See part I for instructions on required packages and datasets: https://tradersinsight.news/ibkr-quant-news/tech-dividends-part-i/. The below is the full call:
nasdaq %>%
clean_names() %>%
mutate(market_cap =
if_else(str_detect(market_cap, "M|B", negate = TRUE),
str_remove_all(market_cap, "\\$") %>% as.numeric() %>% `/`(1000),
if_else(str_detect(market_cap, "B"),
str_remove_all(market_cap, "\\$|B") %>% as.numeric() %>% `*`(1000),
str_remove_all(market_cap, "\\$|M") %>% as.numeric()))) %>%
arrange(desc(market_cap))
# A tibble: 3,547 x 7
symbol company last_sale_price market_cap ipo_year sector industry
<chr> <chr> <dbl> <dbl> <dbl> <chr> <chr>
1 MSFT Microsof… 133. 1018490 1986 Techno… Computer S…
2 AAPL Apple In… 203. 915770 1980 Techno… Computer M…
3 AMZN Amazon.c… 1750. 865460 1997 Consum… Catalog/Sp…
4 GOOGL Alphabet… 1154. 799890 NA Techno… Computer S…
5 GOOG Alphabet… 1151. 798300 2004 Techno… Computer S…
6 FB Facebook… 178. 507110 2012 Techno… Computer S…
7 CSCO Cisco Sy… 46.6 199520 1990 Techno… Computer C…
8 INTC Intel Co… 45.0 199170 NA Techno… Semiconduc…
9 CMCSA Comcast … 42.4 192840 NA Consum… Television…
10 PEP Pepsico,… 130. 182140 NA Consum… Beverages …
# … with 3,537 more rows
That finally looks how we were expecting, the top five by market cap are MSFT
, AMZN
, GOOG
, FB
and CSCO
. Let’s save that as an object called nasdaq_wrangled
.
nasdaq_wrangled <-
nasdaq %>%
clean_names() %>%
mutate(market_cap =
if_else(str_detect(market_cap, "M|B", negate = TRUE),
str_remove_all(market_cap, "\\$") %>% as.numeric() %>% `/`(1000),
if_else(str_detect(market_cap, "B"),
str_remove_all(market_cap, "\\$|B") %>% as.numeric() %>% `*`(1000),
str_remove_all(market_cap, "\\$|M") %>% as.numeric()))) %>%
arrange(desc(market_cap))
Now let’s dig in to the dividends paid by these NASDAQ-listed companies that have IPO’d in the last ten years. It’s a bit anticlimactic because most haven’t paid any dividends but here we go. First, let’s pull just the tickers for companies that IPO’d after 2007, by setting filter(ipo_year > 2007)
.
nasdaq_tickers <-
nasdaq_wrangled %>%
filter(ipo_year > 2007) %>%
pull(symbol)
nasdaq_tickers %>%
head()
[1] "FB" "AVGO" "JD" "TSLA" "PDD" "TEAM"
We will import the dividend data using tq_get(source = 'dividends')
, which is a wrapper for quantmod::getDividends()
and sources dividend data from Yahoo! Finance.
We are passing 1120 symbols to this function but only those that pay a dividend will come back to us. It takes a while to run this because we still have to check on all 1120.
nasdaq_dividends <-
nasdaq_tickers %>%
tq_get(get = 'dividends') %>%
select(-value)
After a huge data import task like that, I like to use slice(1)
to grab the first observation from each group, which in this case will be each symbol
. We can count the number symbols for which we have a dividend and it’s 130.
nasdaq_dividends %>%
group_by(symbol) %>%
slice(1) %>%
glimpse()
Observations: 128
Variables: 3
Groups: symbol [128]
$ symbol <chr> "AGNC", "AMAL", "ATAI", "AVGO", "AY", "BKEP", "BLMN", …
$ date <date> 2009-03-31, 2018-11-15, 2011-06-28, 2010-12-13, 2014-…
$ dividends <dbl> 0.850, 0.060, 0.430, 0.070, 0.037, 0.110, 0.060, 0.003…
We could also get a sense for how these first dividend payments cluster into years by using count(year)
. Note we need to ungroup()
first.
nasdaq_dividends %>%
group_by(symbol) %>%
slice(1) %>%
mutate(year = year(date)) %>%
ungroup() %>%
count(year)
# A tibble: 11 x 2
year n
<dbl> <int>
1 2009 3
2 2010 8
3 2011 6
4 2012 8
5 2013 14
6 2014 12
7 2015 14
8 2016 12
9 2017 11
10 2018 28
11 2019 12
And a chart will help to communicate these yearly frequencies.
nasdaq_dividends %>%
group_by(symbol) %>%
slice(1) %>%
mutate(year = year(date)) %>%
ungroup() %>%
count(year) %>%
ggplot(aes(year, n)) +
geom_col(fill = "cornflowerblue", width = .5) +
scale_x_continuous(breaks = 2008:2019) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 15)) +
labs(y = "number of first dividends by year", x = "")

Stay tuned for the next installment in which Jonathan will create a quick chart of the last dividend paid by each of these 130 companies, using slice(n())
and will plot a dot with geom_point()
.
Any stock, options or futures symbols displayed are for illustrative purposes only and are not intended to portray recommendations.
Disclosure: Interactive Brokers
Information posted on IBKR Traders’ Insight that is provided by third-parties and not by Interactive Brokers does NOT constitute a recommendation by Interactive Brokers that you should contract for the services of that third party. Third-party participants who contribute to IBKR Traders’ Insight are independent of Interactive Brokers and Interactive Brokers does not make any representations or warranties concerning the services offered, their past or future performance, or the accuracy of the information provided by the third party. Past performance is no guarantee of future results.
This material is from Reproducible Finance and is being posted with permission from Reproducible Finance. The views expressed in this material are solely those of the author and/or Reproducible Finance and IBKR is not endorsing or recommending any investment or trading discussed in the material. This material is not and should not be construed as an offer to sell or the solicitation of an offer to buy any security. To the extent that this material discusses general market activity, industry or sector trends or other broad based economic or political conditions, it should not be construed as research or investment advice. To the extent that it includes references to specific securities, commodities, currencies, or other instruments, those references do not constitute a recommendation to buy, sell or hold such security. This material does not and is not intended to take into account the particular financial conditions, investment objectives or requirements of individual customers. Before acting on this material, you should consider whether it is suitable for your particular circumstances and, as necessary, seek professional advice.
In accordance with EU regulation: The statements in this document shall not be considered as an objective or independent explanation of the matters. Please note that this document (a) has not been prepared in accordance with legal requirements designed to promote the independence of investment research, and (b) is not subject to any prohibition on dealing ahead of the dissemination or publication of investment research.
Any trading symbols displayed are for illustrative purposes only and are not intended to portray recommendations.