1. Settings

sel_month <- as.Date("2020-12-01")   # 50 largest stocks selected in this month
win_start <- as.Date("2018-01-01")
win_end   <- as.Date("2020-12-01")   # 36-month window
n_top     <- 50

# OPTIONAL: TEJ stock file(s) with stock code, date, monthly return, market value.
# Put the file next to this .Rmd (or give the full path). Leave NULL if you have none yet.
stock_files <- NULL                  # e.g. c("tej_stock_2017_2025.xlsx")

2. Fama-French factors (data from TOP50__2018-2025.xlsx)

The factor data from your uploaded file is built into this document, so no file path is needed. Values are in percent (TEJ), converted to decimals below.

ff3_raw <- tibble::tribble(
  ~Date, ~Mkt, ~SMB, ~HML, ~Rf,
  201812, -1.6912, 1.3346, -2.1142, 1.045,
  201901, 1.9631, 0.0341, 0.0837, 1.045,
  201902, 4.4682, 0.3841, -2.012, 1.045,
  201903, 2.3039, 0.4998, -1.4823, 1.045,
  201904, 2.9774, -2.034, 0.2454, 1.045,
  201905, -4.3307, 1.5714, 2.2665, 1.045,
  201906, 3.1907, -1.3933, -0.7903, 1.045,
  201907, 2.9402, 1.402, 0.9882, 1.045,
  201908, -1.2756, 2.2032, -1.1659, 1.045,
  201909, 2.1216, -1.4567, -0.9756, 1.045,
  201910, 4.7426, -2.254, -1.3045, 1.045,
  201911, 1.0799, -1.9401, 3.4893, 1.045,
  201912, 4.476, -0.8082, -1.5641, 1.045,
  202001, -4.3368, -0.8064, -0.2487, 1.045,
  202002, -1.8544, -0.076, -0.3514, 1.045,
  202003, -13.8962, -2.2179, -2.3226, 0.795,
  202004, 13.1776, 5.9529, 1.9246, 0.795,
  202005, -0.5231, 5.5189, -0.3267, 0.795,
  202006, 6.7265, 0.3759, 1.6339, 0.795,
  202007, 10.5466, -5.4945, -6.6159, 0.795,
  202008, -0.0977, 5.5599, 7.6317, 0.795,
  202009, -0.394, -0.3002, 0.6311, 0.795,
  202010, 0.2043, 0.4993, 2.5335, 0.795,
  202011, 9.3275, -0.2675, 0.9808, 0.795,
  202012, 7.4394, -3.1343, 2.533, 0.795,
  202101, 2.609, -6.6254, -8.8644, 0.795,
  202102, 5.3468, 3.8544, 2.6764, 0.795,
  202103, 3.0917, 2.7548, 6.0862, 0.795,
  202104, 7.0657, -0.1155, 18.3558, 0.795,
  202105, -2.8645, -5.8574, 0.3184, 0.795,
  202106, 4.3, 4.1065, 6.7649, 0.795,
  202107, -2.0646, 2.5151, 0.7242, 0.795,
  202108, 2.2434, -5.0198, 0.8207, 0.795,
  202109, -2.935, 1.1358, 2.4129, 0.795,
  202110, 0.1504, 1.5618, 0.0795, 0.795,
  202111, 2.4868, 1.9208, -0.9342, 0.795,
  202112, 4.6015, 1.1576, -0.9394, 0.795,
  202201, -2.91, -5.0122, -0.2106, 0.795,
  202202, -0.0653, 1.5479, 1.4452, 0.795,
  202203, 0.3769, -0.1847, 2.5816, 1.045,
  202204, -6.2044, 1.0733, 1.7546, 1.045,
  202205, 1.1295, 1.691, -3.8868, 1.045,
  202206, -10.378, 3.5363, 3.3743, 1.2,
  202207, 2.9838, 0.4935, -2.7401, 1.2,
  202208, 1.0578, 5.7463, 1.3848, 1.2,
  202209, -10.8649, 0.1011, 4.9374, 1.325,
  202210, -3.5537, -0.8461, 1.6877, 1.325,
  202211, 14.7201, -2.146, -7.1873, 1.325,
  202212, -4.9165, 2.9072, 1.853, 1.45,
  202301, 7.782, -2.3922, -5.4326, 1.45,
  202302, 1.4299, 4.8504, -1.2716, 1.45,
  202303, 2.4791, 1.9839, -3.7971, 1.575,
  202304, -1.865, 2.6621, 2.2804, 1.575,
  202305, 6.3721, -2.3795, -2.189, 1.575,
  202306, 3.342, 1.4255, -0.7202, 1.575,
  202307, 2.2632, -3.8691, 3.829, 1.575,
  202308, -2.7053, 1.2205, 0.8909, 1.575,
  202309, -1.5878, 1.8801, 1.8718, 1.575,
  202310, -2.2733, 0.6754, -0.3085, 1.575,
  202311, 8.7955, 0.4628, -0.4597, 1.575,
  202312, 2.8933, -2.3574, 1.282, 1.575,
  202401, -0.2977, -0.1365, -2.0605, 1.575,
  202402, 5.8546, 2.0636, -3.9557, 1.575,
  202403, 7.1463, -7.9988, 3.5737, 1.7,
  202404, 0.4211, 2.6175, 5.5349, 1.7,
  202405, 3.6518, 1.4309, 2.859, 1.7,
  202406, 9.061, -4.5677, -3.416, 1.7,
  202407, -2.7868, 1.276, 4.0775, 1.7,
  202408, 0.4629, 1.4047, -2.3261, 1.7,
  202409, -0.1467, 0.0656, 0.9326, 1.7,
  202410, 2.5532, -3.8195, -2.6079, 1.7,
  202411, -2.5685, 0.2519, 0.003, 1.7,
  202412, 3.4963, -1.025, -8.139, 1.7,
  202501, 1.9739, -3.3194, -2.2618, 1.7,
  202502, -2.2123, 4.9412, 4.4022, 1.7,
  202503, -10.1131, -0.9996, 3.9881, 1.7,
  202504, -2.3014, -2.1569, -2.2312, 1.7,
  202505, 5.3773, -2.8071, -0.6949, 1.7,
  202506, 4.9776, -4.8906, -4.6067, 1.7,
  202507, 6.7898, -3.2908, -2.1778, 1.7,
  202508, 3.0178, 3.9158, -3.1657, 1.7,
  202509, 6.6635, -7.2084, -1.0908, 1.7,
  202510, 9.2301, -9.2126, -1.4514, 1.7,
  202511, -2.2515, 0.0901, 5.3439, 1.7,
  202512, 4.8698, -0.2322, 0.8177, 1.7
)
ff3 <- ff3_raw %>%
  mutate(month = ymd(paste0(Date, "01")),
         across(c(Mkt, SMB, HML, Rf), ~ .x / 100)) %>%
  select(month, Mkt, SMB, HML, Rf)

cat("Factor months available:", format(min(ff3$month), "%Y/%m"), "to",
    format(max(ff3$month), "%Y/%m"), "(", nrow(ff3), "months )\n")
## Factor months available: 2018/12 to 2025/12 ( 85 months )

Note: the uploaded factor file starts in 2018/12, so 2018/01-2018/11 have no factor values (shown as NA). Re-download the TEJ factors from 2018/01 to fill them.

3. Stock data (top 50 and returns)

read_any <- function(path) {
  if (grepl("\\.csv$", path, ignore.case = TRUE)) read_csv(path, show_col_types = FALSE)
  else read_excel(path)
}
to_month <- function(x) {
  if (inherits(x, "POSIXt") || inherits(x, "Date")) return(floor_date(as.Date(x), "month"))
  ymd(paste0(substr(gsub("[^0-9]", "", as.character(x)), 1, 6), "01"))
}
find_col <- function(df, pattern) {
  hit <- names(df)[str_detect(names(df), regex(pattern, ignore_case = TRUE))]
  if (length(hit)) hit[1] else NA_character_
}
auto_scale <- function(x) if (median(abs(x), na.rm = TRUE) > 0.2) x / 100 else x
pick1 <- function(x) { x <- x[!is.na(x)]; if (length(x)) x[1] else NA_real_ }

have_stock <- !is.null(stock_files) && all(file.exists(stock_files))

if (have_stock) {
  read_stock <- function(f) {
    d <- read_any(f)
    c_id  <- find_col(d, "^coid$|co_id|stock.?id|code|\u4ee3\u78bc|\u516c\u53f8")
    c_dt  <- find_col(d, "date|mdate|\u5e74\u6708|\u65e5\u671f")
    c_ret <- find_col(d, "^ret|return|roi|\u5831\u916c")
    c_mv  <- find_col(d, "market.?value|^mv|\u5e02\u503c")
    cat(f, "->", paste(c(id = c_id, date = c_dt, ret = c_ret, mv = c_mv), collapse = " | "), "\n")
    tibble(id = trimws(as.character(d[[c_id]])), month = to_month(d[[c_dt]]),
           ret = if (is.na(c_ret)) NA_real_ else suppressWarnings(as.numeric(d[[c_ret]])),
           mv  = if (is.na(c_mv))  NA_real_ else suppressWarnings(as.numeric(d[[c_mv]])))
  }
  stock <- bind_rows(lapply(stock_files, read_stock)) %>%
    filter(!is.na(id), !is.na(month), !str_detect(id, "^Y9999")) %>%
    group_by(id, month) %>% summarise(ret = pick1(ret), mv = pick1(mv), .groups = "drop") %>%
    mutate(ret = auto_scale(ret))
  cat("Stock data:", format(min(stock$month), "%Y/%m"), "to", format(max(stock$month), "%Y/%m"), "\n")
} else {
  stock <- tibble(id = character(), month = as.Date(character()), ret = numeric(), mv = numeric())
  cat("NO STOCK FILE SUPPLIED: stock columns below are placeholders (NA).\n",
      "Set `stock_files` in section 1 once you have the TEJ stock data.\n")
}
## NO STOCK FILE SUPPLIED: stock columns below are placeholders (NA).
##  Set `stock_files` in section 1 once you have the TEJ stock data.

3.1 The 50 largest stocks each month (2017/11 - 2025/12)

top50_by_month <- stock %>%
  filter(month >= as.Date("2017-11-01"), month <= as.Date("2025-12-01"), !is.na(mv)) %>%
  group_by(month) %>% slice_max(mv, n = n_top, with_ties = FALSE) %>%
  mutate(rank = row_number()) %>% ungroup() %>% arrange(month, rank)

if (nrow(top50_by_month) > 0) {
  write_csv(top50_by_month, "top50_by_month.csv")
  head(top50_by_month, 10)
} else cat("Not available yet (needs the stock file).")
## Not available yet (needs the stock file).

4. First window: 2018/01 - 2020/12

top50_sel <- top50_by_month %>% filter(month == sel_month) %>% pull(id)
if (length(top50_sel) == 0) top50_sel <- paste0("stock", 1:n_top)   # placeholder names

stock_map <- tibble(Name = paste0("stock", seq_along(top50_sel)), `TEJ code` = top50_sel)

months <- tibble(month = seq(win_start, win_end, by = "month"))
ret_wide <- stock %>%
  filter(id %in% top50_sel, month >= win_start, month <= win_end) %>%
  select(month, id, ret) %>% pivot_wider(names_from = id, values_from = ret)
for (i in setdiff(top50_sel, names(ret_wide))) ret_wide[[i]] <- NA_real_
ret_wide <- months %>% left_join(ret_wide, by = "month") %>% select(month, all_of(top50_sel))
names(ret_wide)[-1] <- stock_map$Name

window1 <- ret_wide %>%
  left_join(ff3 %>% select(month, Mkt, SMB, HML), by = "month") %>%
  mutate(Date = format(month, "%Y/%m")) %>%
  select(Date, starts_with("stock"), Mkt, SMB, HML)

cat("Table size:", nrow(window1), "rows x", ncol(window1), "columns\n")
## Table size: 36 rows x 54 columns
cat("Months with factor values:", sum(!is.na(window1$Mkt)), "of 36\n")
## Months with factor values: 25 of 36

4.1 Whiteboard-style table

excerpt <- window1 %>%
  select(Date, stock1, stock2, stock50, Mkt, SMB, HML) %>%
  mutate(across(-Date, ~ ifelse(is.na(.x), "NA", sprintf("%.4f", .x))))
dots <- excerpt[1, ]; dots[1, ] <- "..."

bind_rows(excerpt[1:3, ], dots, excerpt[34:36, ]) %>%
  rename(`stock 1` = stock1, `stock 2` = stock2, `stock 50` = stock50) %>%
  kable(align = "c", caption = "First window: stock returns and FF3 factors (decimals)") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "bordered"))
First window: stock returns and FF3 factors (decimals)
Date stock 1 stock 2 stock 50 Mkt SMB HML
2018/01 NA NA NA NA NA NA
2018/02 NA NA NA NA NA NA
2018/03 NA NA NA NA NA NA
… … … … … … …
2020/10 NA NA NA 0.0020 0.0050 0.0253
2020/11 NA NA NA 0.0933 -0.0027 0.0098
2020/12 NA NA NA 0.0744 -0.0313 0.0253

4.2 Full table (36 x 53)

window1 %>%
  kable(digits = 4, caption = "50 largest stocks (selected 2020/12) + Mkt, SMB, HML") %>%
  kable_styling(font_size = 10, bootstrap_options = c("striped", "condensed")) %>%
  scroll_box(width = "100%", height = "500px")
50 largest stocks (selected 2020/12) + Mkt, SMB, HML
Date stock1 stock2 stock3 stock4 stock5 stock6 stock7 stock8 stock9 stock10 stock11 stock12 stock13 stock14 stock15 stock16 stock17 stock18 stock19 stock20 stock21 stock22 stock23 stock24 stock25 stock26 stock27 stock28 stock29 stock30 stock31 stock32 stock33 stock34 stock35 stock36 stock37 stock38 stock39 stock40 stock41 stock42 stock43 stock44 stock45 stock46 stock47 stock48 stock49 stock50 Mkt SMB HML
2018/01 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/02 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/03 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/04 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/05 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/06 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/07 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/08 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/09 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/11 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2018/12 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0169 0.0133 -0.0211
2019/01 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0196 0.0003 0.0008
2019/02 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0447 0.0038 -0.0201
2019/03 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0230 0.0050 -0.0148
2019/04 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0298 -0.0203 0.0025
2019/05 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0433 0.0157 0.0227
2019/06 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0319 -0.0139 -0.0079
2019/07 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0294 0.0140 0.0099
2019/08 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0128 0.0220 -0.0117
2019/09 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0212 -0.0146 -0.0098
2019/10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0474 -0.0225 -0.0130
2019/11 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0108 -0.0194 0.0349
2019/12 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0448 -0.0081 -0.0156
2020/01 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0434 -0.0081 -0.0025
2020/02 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0185 -0.0008 -0.0035
2020/03 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.1390 -0.0222 -0.0232
2020/04 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.1318 0.0595 0.0192
2020/05 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0052 0.0552 -0.0033
2020/06 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0673 0.0038 0.0163
2020/07 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.1055 -0.0549 -0.0662
2020/08 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0010 0.0556 0.0763
2020/09 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA -0.0039 -0.0030 0.0063
2020/10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0020 0.0050 0.0253
2020/11 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0933 -0.0027 0.0098
2020/12 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0744 -0.0313 0.0253

4.3 Stock code map

kable(stock_map) %>% kable_styling(full_width = FALSE)
Name TEJ code
stock1 stock1
stock2 stock2
stock3 stock3
stock4 stock4
stock5 stock5
stock6 stock6
stock7 stock7
stock8 stock8
stock9 stock9
stock10 stock10
stock11 stock11
stock12 stock12
stock13 stock13
stock14 stock14
stock15 stock15
stock16 stock16
stock17 stock17
stock18 stock18
stock19 stock19
stock20 stock20
stock21 stock21
stock22 stock22
stock23 stock23
stock24 stock24
stock25 stock25
stock26 stock26
stock27 stock27
stock28 stock28
stock29 stock29
stock30 stock30
stock31 stock31
stock32 stock32
stock33 stock33
stock34 stock34
stock35 stock35
stock36 stock36
stock37 stock37
stock38 stock38
stock39 stock39
stock40 stock40
stock41 stock41
stock42 stock42
stock43 stock43
stock44 stock44
stock45 stock45
stock46 stock46
stock47 stock47
stock48 stock48
stock49 stock49
stock50 stock50