楼主: huiyujuanjuan
1540 0

[交易策略] 人工神经网络交易策略R语言实现 [推广有奖]

  • 0关注
  • 6粉丝

副教授

36%

还不是VIP/贵宾

-

威望
0
论坛币
697 个
通用积分
331.9472
学术水平
19 点
热心指数
23 点
信用等级
10 点
经验
46761 点
帖子
503
精华
0
在线时间
1152 小时
注册时间
2015-2-2
最后登录
2024-3-14

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
众多投资者总觉得人工神经网络策略很神秘,其实不然,只要用简单的R语言,就可以实现回测的異能。下面就以美的集团股票为例,随机选择willR,RSI、ATR和macd指标为输入变量,后一天价格的涨跌为输出变量,建立人工神经网络交易策略,说明如何利用人工神经网络进行择时策略的选择。
       话不多说,直接上代码:

  1. ################################################################
  2. ## ----------------------example 6.2.2-----------------------------
  3. ##artifical neural network and random forest strategy
  4. ## Author by: fwushi815
  5. ###############################################################
  6. ##loading packages
  7. library(quantstrat)
  8. library(data.table)
  9. library(IKTrading)
  10. library(DSTrading)
  11. library(corrplot)
  12. library(caret)
  13. library(pROC)
  14. library(FSelector)
  15. #read customized function (transfer local data into time series data)
  16. source('read.local.xts.R')mdjt <- read.local.xts('000333',type='stock',source='tdx')
  17. #artifical neural network model
  18. #object(output variable)
  19. mdjtret<-ROC(mdjt,type='discrete')
  20. class<-ifelse(Cl(mdjtret)>=0,'UP','DOWN')class<-lag(class,-1)
  21. #input variables are technical indicators including WillR, RSI, ATR and MACD
  22. willR5<-WPR(HLC(mdjt),n=5)
  23. willR10<-WPR(HLC(mdjt),n=10)
  24. willR15<-WPR(HLC(mdjt),n=15)
  25. rsi5<-RSI(Cl(mdjt),maType='EMA',n=5)
  26. rsi10<-RSI(Cl(mdjt),maType='EMA',n=10)
  27. rsi15<-RSI(Cl(mdjt),maType='EMA',n=15)
  28. atr5<-ATR(HLC(mdjt),n=5,maType='EMA')$atr
  29. atr10<-ATR(HLC(mdjt),n=10,maType='EMA')$atr
  30. macd<-MACD(Cl(mdjt))$signal


  31. dataset<-data.frame(class,willR5,willR10,willR15,rsi5,rsi10,rsi15,atr5,atr10,macd)
  32. names(dataset)<-c('class','willR5','willR10','willR15','rsi5','rsi10','rsi15','atr5','atr10','macd')
  33. dataset<-na.omit(dataset)
  34. #dataset visualization and stats
  35. y<-dataset$classcbind(freq=table(y),percentage=prop.table(table(y))*100)

  36. datacor<-cor(dataset[,-1])
  37. corrplot(datacor,method='circle')
  38. #Feature selection:
  39. set.seed(1000)
  40. dataweight<-random.forest.importance(class~.,dataset,importance.type = 1)
  41. subset<-cutoff.k(dataweight,5)


  42. datasetrf<-data.frame(class,willR15,rsi10,rsi5,macd)
  43. names(datasetrf)<-c('class','willR15','rsi10','rsi5','macd')
  44. datasetrf<-na.omit(datasetrf)
  45. #fit modelfit.knn<-train(class~.,data=datasetrf,method='knn',preProc='range')
  46. set.seed(1000)
  47. fit.cart<-train(class~.,data=datasetrf,method='rpart')
  48. set.seed(1000)
  49. fit.nb<-train(class~.,data=datasetrf,method='nb')
  50. set.seed(1000)
  51. fit.svm<-train(class~.,data=datasetrf,method='svmRadial')
  52. result<-resamples(list(KNN=fit.knn,CART=fit.cart,NB=fit.nb,SVM=fit.svm))
  53. summary(result)dotplot(result)

  54. out<-predict.train(fit.knn)
  55. out<-c(rep(NA,nrow(mdjt)-length(out)),out)
  56. #generate ANN signalsout<-reclass(out,mdjt)
  57. mdjt$entry<-mdjt$exit<-NA
  58. mdjt$entry[out==2]=1
  59. mdjt$exit[out==1]=1

  60. #strategy initialization
  61. initDate<-'2013-09-10'
  62. startDate<-'2013-09-18'
  63. symbols<-'mdjt'
  64. initEq <- 10000
  65. Sys.setenv(tz='UTC')
  66. currency('CNY')
  67. stock(symbols,currency='CNY',multiplier=1)
  68. strategy.st<-portfolio.st<-account.st<-'ANN'
  69. .blotter<-.strategy<-new.env()

  70. rm.strat(portfolio.st) #important!
  71. rm.strat(STRATSMART)  #remove strategy etc. if this is a re-run

  72. initPortf(portfolio.st,symbols=symbols,initDate=initDate,currency='CNY')
  73. initAcct(account.st,portfolios=portfolio.st,initDate=initDate,currency='CNY')
  74. initOrders(portfolio.st,initDate=initDate)strategy(STRATSMART,store=T)

  75. addPosLimit(portfolio.st, symbols, startDate, 10000, 1)

  76. #add rules
  77. add.rule(STRATSMART, name="ruleSignal",
  78.           arguments=list(sigcol="entry",sigval=TRUE,orderqty=10000,
  79.                         ordertype="market",orderside='long', osFUN=osMaxPos),
  80.          type="enter", path.dep=TRUE)

  81. add.rule(STRATSMART, name="ruleSignal",
  82.           arguments=list(sigcol="exit",sigval=TRUE,orderqty='all',
  83.                          ordertype="market",orderside="long", replace=FALSE),
  84.           type="exit",path.dep=TRUE)

  85. #process the indicators and generate trades
  86. start_t <- Sys.time()
  87. out <- try(applyStrategy(strategy ='ANN',portfolios = 'ANN'))
  88. end_t <- Sys.time()
  89. print('Strategy Loop:')
  90. print(end_t-start_t)


  91. updatePortf(STRATSMART,Dates=paste0('::',as.Date(Sys.time())))
  92. updateAcct(STRATSMART)
  93. updateEndEq(STRATSMART)
  94. print('trade blotter portfolio update:')
  95. chart.Posn(portfolio.st)tradeStats(portfolio.st)
复制代码
回测对应的绩效如下所示:
彩图2.jpeg

      需要指出的是,上述方法完全可以用到期货、外汇等产品上,如有感兴趣的读者,可以进一步参考图书:《量化投资基础、方法与策略——R语言实战指南》(电子工业出版社)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 18:41