更新日期 : 2023-02-20 10:57:03

載入與更新資料

載入Python套件

## [1] "無需更新"
## [1] "最新日期 : 20230217"

股價漲幅在不同期間(2023-02-17)

[清洗]漲跌幅

[清洗]合併基本資料與tags

#讀取基本資料
hash.stock.info = stock.twse.info.load()


#讀取tags
hash.stock.tags <-
  stock.tags.load() %>% 
  select(stockcode,tag) %>% 
  group_by(stockcode) %>% 
  summarise(tags = paste(tag,collapse ="|"))

#表格化  
res<-df %>%
  #合併基本資料
  merge(hash.stock.info %>% select(stockcode,產業類別),by="stockcode") %>% 
  #合併tags
  merge(hash.stock.tags, by="stockcode") %>% 
  select(stockname,stockcode,產業類別,tags,everything()) %>% 
  #加入連結
  mutate(link = glue::glue('https://tw.stock.yahoo.com/quote/{as.character(stockcode)}.TW/profile')
         ,.after=stockcode) %>% 
  #mutate(stockname = cell_spec(stockname, "html", link = link)) %>%
  # #轉為百分比
  # mutate(across(everything() 
  #               & -stockcode 
  #               & -stockname 
  #               & -d 
  #               & -link 
  #               & -產業類別 
  #               & -tags,
  #               ~percent(.,0))) %>%  
  #select(-link) %>% 
  #合併成交量、股價、本益比
  merge(dbdf %>%
          collect() %>% 
          group_by() %>% 
          filter(date ==max(date)) %>%
          select(stockcode,成交張數,本益比) %>% 
          mutate(成交張數 = 成交張數/10^4) %>%
          dplyr::rename(成交張數_萬 = 成交張數 ),by="stockcode",all.x=T) %>% 
  #排序
  select(stockcode
         ,stockname
         ,產業類別
         ,tags
         ,股價 = d
         ,成交張數_萬
         ,本益比
         ,everything()) %>% 
  filter(股價!=0) %>%      #排除異常
  filter(!is.na(股價)) %>% #排除異常 
  darrange(d1) %>% 
  distinct()

# res %>% 
#   kable(format = "html", escape = FALSE,table.attr = "style = \"color: black;\"") %>%
#   kable_styling(bootstrap_options = c("hover", "condensed")) 

[清洗]股價sparkline

con <<- DBI::dbConnect(RSQLite::SQLite(), dbname = paste0(dir.r.stock,'stock.ohlc.db'))
df <- dplyr::tbl(con, "stock.ohlc")
yyyymmdd.db<-df %>%
  arrange(desc(date)) %>% 
  pu(date)
dbDisconnect(con)

#標示日期
day0  = yyyymmdd.db[1]
day1  = yyyymmdd.db[2]
day3  = yyyymmdd.db[4]
day5  = yyyymmdd.db[6]   #1   week
day10 = yyyymmdd.db[11]  #2   weeks
day20 = yyyymmdd.db[21]  #1   month
day40 = yyyymmdd.db[41]  #2   months
day60 = yyyymmdd.db[61]  #1   months
day120= yyyymmdd.db[121] #0.5 year
day240= yyyymmdd.db[241] #1   year

#依據標示日期query資料庫資料
con <<- DBI::dbConnect(RSQLite::SQLite(), dbname = paste0(dir.r.stock,'stock.ohlc.db'))
dbdf <- dplyr::tbl(con, "stock.ohlc")

#list-column 股價
plot.stock.close.sparkline<-
dbdf %>%
  filter(date >= day240) %>% 
  select(stockcode,date,收盤價) %>% 
  collect() %>%
  arrange(stockcode,date) %>% 
  group_by(stockcode) %>%
  na.omit(.) %>% 
  summarize(across(where(is.numeric), list)) %>%
  dplyr::rename(close = 收盤價)

#list-column 成交張數
plot.stock.piece.sparkline<-
dbdf %>%
  filter(date >= day240) %>% 
  select(stockcode,date,成交張數) %>% 
  collect() %>%
  arrange(stockcode,date) %>% 
  group_by(stockcode) %>%
  na.omit(.) %>% 
  summarize(across(where(is.numeric), list)) %>%
  dplyr::rename(piece = 成交張數)
res %<>% 
 mutate(across(where(is.numeric)
               ,~as.numeric(ifelse(is.infinite(.),"",.))))

res %<>% 
  merge(plot.stock.close.sparkline,by="stockcode") %>% 
  merge(plot.stock.piece.sparkline,by="stockcode")   

輸出

### display crosstalk filters
shiny::div(bscols(
    list(stockcode_filter,
         type_filter))
)
### display table
(ohlc_table)

#進一步有興趣

stock.tags.grep("材料-KY")
##          stock 化纖原料 半合成纖維
## 1: 4763材料-KY        ●          ●