R의 알고리즘 트레이딩 시각화
알고리즘 거래에 대한 시각화는 경제 부문의 수요가 증가하고 있습니다. R에는 알고리즘 거래를 위한 데이터, 시각화 및 모델 전략을 얻기위한 많은 훌륭한 패키지들이 있습니다. 이번 기사에서는 R에서 알고리즘 트레이딩을 위한 시각화 및 모델링을 수행하는 방법을 학습하고자 합니다.
알고리즘 트레이딩 소개
알고리즘 트레이딩은 경제 및 금융 분야에서 매우 인기있는 기계 학습 방법입니다. 일반적으로 많은 프로그래밍과 시각화가 필요합니다. 프로그래밍은 알고리즘 트레이딩 (Algorithmic Trading) 분석을위한 재무 데이터를 얻기 위해 필요합니다.
패키지를 R 라이브러리로 읽어들입니다.
먼저 첫 번째 것들! 위의 패키지를 R 라이브러리에 읽어 들여야합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# R 패키지 불러오기 library(PortfolioEffectHFT) library(rvest) library(pbapply) library(TTR) library(dygraphs) library(lubridate) library(tidyquant) library(timetk) library(pacman) library(quantmod) library(parallelMap) library(BiocParallel) library(parallel) library(plotly) pacman::p_load(dygraphs,DT) |
위 패키지 BiocParallel
는 아래 코드 를 사용하여 설치해야합니다 .
1 2 3 4 5 |
## BiocParallel 설치 source("https://bioconductor.org/biocLite.R") biocLite("BiocParallel") |
알고리즘 트레이딩을 위해 R로 데이터 읽기
다음으로, 데이터를 수집할 때 R에서 아래와 같이 프로그래밍을 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# 데이터 수집 website <- read_html("https://www.marketwatch.com/tools/industry/stocklist.asp?bcind_ind=9535&bcind_period=3mo") table <- html_table(html_nodes(website, "table")[[4]], fill = TRUE) stocks.symbols <- table$X2 stocks.names <- table$X3 table1 <- table[-1,-1] colnames(table1) <- table[1,-1] DT::datatable(table1) stock.list <- "https://www.marketwatch.com/tools/industry/stocklist.asp?bcind_ind=9535&bcind_period=3mo" stocks <- read_html(stock.list) stocks.names <- html_nodes(stocks,".lk01") stocks.names <- html_text(stocks.names) table1[table1==""] <- NA table1 <- table1[complete.cases(table1$Symbol),] DT::datatable(table1) # 데이터 생성 start.date <- Sys.Date() end.date <- Sys.Date()-years(3) start.date <- gsub('-','', start.date) end.date <- gsub('-','', end.date) start.date # 기호 벡터는 시세를 유지 symbols <- c("SPY","EFA", "IJS", "EEM","AGG") # 가격 객체는 원가 데이터를 보유 prices %&>% map(~Ad(get(.))) %&>% #Extract (transformed) data from a suitable OHLC object. getSymbols('IBM',src='yahoo') Ad(IBM) reduce(merge) %&>% #reduce() combines from the left, reduce_right() combines from the right `colnames <-`(symbols) head(prices) tickers <- c("AAPL", "MSFT","GOOGL","IBM","FB") getSymbols(tickers) closePrices <- do.call(merge, lapply(tickers, function(x) Cl(get(x)))) # 매핑 parallelStartSocket(2) parallelStartMulticore(cpus=6)# start in socket mode and create 2 processes on localhost f = function(x) Cl(get(x)) # define our job y = parallelMap(f, tickers) # like R's Map but in parallel mapdata %&>% head() # Bioconductor f = function(x) Ad(get(x)) options(MulticoreParam=quote(MulticoreParam(workers=4))) param <- SnowParam(workers = 2, type = "SOCK") vec=c(tickers[1],tickers[2],tickers[3],tickers[4]) multicoreParam <- MulticoreParam(workers = 7) bio=bplapply(tickers, f, BPPARAM = multicoreParam) biodata %&>% head() |
알고리즘 트레이딩 시각화
이제 우리는 첫 번째 그래프 시각화를 만들 수 있습니다.
1 2 3 4 5 6 7 8 9 |
# 시각화 그래프 AdjustedPrices <- biodata dateWindow %&>% dyRebase(value = 100) %&>% dyRangeSelector(dateWindow = dateWindow) end <- Sys.Date() start <- Sys.Date()-years(3) prices %&>% head() pacman::p_load(dygraph) |
그러면 다음과 같은 시각화 그래프가 표시됩니다. dygraph
패키지로 구현 합니다.
이제 데이터의 코어 수를 계산하여 시각화 그래프에 적용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 코어수 계산 no_cores <- detectCores() - 1 # 클러스터 초기화 cl <- makeCluster(no_cores) f <-function(x) Ad(get(x)) AdjustedPrices %&>% head() # 코어수 시각화 dateWindow %&>% dyRebase(value = 100) %&>% dyRangeSelector(dateWindow = dateWindow) |
세 번째 시각화를하기 전에 프로그래밍을 좀 더해야합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 양적 모델링 getSymbols("AAPL",src='yahoo') # basic example of ohlc charts df <- data.frame(Date=index(AAPL),coredata(AAPL)) df <- tail(df, 30) # 색상 맞춤 i <- list(line = list(color = '#FFD700')) d <- list(line = list(color = '#0000ff')) p %&>% plot_ly(x = ~Date, type="ohlc", open = ~AAPL.Open, close = ~AAPL.Close, high = ~AAPL.High, low = ~AAPL.Low, increasing = i, decreasing = d) p |
다음으로 시간에 따른 조정 주가의 프로그램 된 시각화를 만듭니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 시간 경과에 따른 조정 주가의 프로그램 된 시각화 biodatadf%rename(Date=index) data%filter(Date&>"2014-01-11") p %&>% add_trace(y = ~MSFT.Adjusted, name = 'MSFT', mode = 'lines')%&>% add_trace(y = ~IBM.Adjusted, name = 'IBM', mode = 'lines')%&>% add_trace(y = ~GOOGL.Adjusted, name = 'GOOGL', mode = 'lines')%&>% layout(title = "Visualizing Adjusted Stock Prices", xaxis = list(title = "Time"), yaxis = list (title = "Adjusted Prices")) p |
위의 프로그래밍은 우리에게 다음과 같은 시각화를 제공합니다.
트렌드를 따르는 간단한 거래 전략
다음으로 시간이 지남에 따라 대화형 Apple Moving Averages의 시각화를 프로그래밍합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
## 간단한 거래 전략 : 추세 대응 tail(SMA(AdjustedPrices$AAPL.Adjusted, 200)) tail(SMA(AdjustedPrices$AAPL.Adjusted, 50)) data.frame(sma200=SMA(AdjustedPrices$AAPL.Adjusted, 200),sma50=SMA(AdjustedPrices$AAPL.Adjusted, 50))%&>%head() sdata%select(-Date) #sdata <- tk_xts(data,date_var=Date) df_50=as.data.frame.matrix(apply(sdata, 2, SMA,50)) colnames(df_50)=paste0(colnames(df_50),"_sma50") df_200=as.data.frame.matrix(apply(sdata, 2, SMA,200)) colnames(df_200)=paste0(colnames(df_200),"_sma200") df_all%drop_na() # sma 50 f50 <- function(x) SMA(x,50) # sma 50 f200 <- function(x) SMA(x,200) df_all%head() dim(df_all) # 평균 이동 mov.avgs <- function(df){ ifelse((nrow(df) <(2*260)), x <- data.frame(df, 'NA', 'NA'), x <- data.frame( SMA(df, 200), SMA(df, 50))) colnames(x) <- c( 'sma_200','sma_50') x%head() var=names(df_all)[str_detect(names(df_all), "AAPL")] df_all[,var] %&>% head() dateWindow=c("2015-01-01","2018-09-01") dygraph(df_all[,var],main = 'Apple Moving Averages') %&>% dySeries('AAPL.Adjusted_sma50', label = 'sma 50') %&>% dySeries('AAPL.Adjusted_sma200', label = 'sma 200') %&>% dyRangeSelector(height = 30) %&>% dyShading(from = '2016-01-01', to = '2016-9-01', color = '#CCEBD6') %&>% dyShading(from = '2016-9-01', to = '2017-01-01', color = '#FFE6E6')%&>% dyRangeSelector(dateWindow = dateWindow) |
참조: Visualizations for Algorithmic Trading in R
(Visited 89 times, 1 visits today)