搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  SVM_HS300Data.xls
资料下载链接地址: https://bbs.pinggu.org/a-1742788.html
附件大小:
240.5 KB   举报本内容
欢迎大牛拍砖指正

数据:

[hide]
1,先读取数据
  1. #先读取xls数据
  2. library(RODBC)
  3. excel_conn<-odbcConnectExcel('SVM_HS300Data.xls')
  4. HS300.Data<-sqlFetch(excel_conn,'Sheet1')
  5. #关闭DB连接
  6. close(excel_conn)
  7. #查看数据
  8. head(HS300.Data,30)
复制代码


2,再获取训练和回测的数据集

  1. Close<-HS300.Data[,5]
复制代码
3,建立训练和测试的数据集
  1. #Macd的函数
  2. macd<-function(Stock,short_period,
  3. long_period,dea_period) {
  4. #Stock是股票的价格
  5. #short_period是短期
  6. #long_period是长期
  7. #还有dea_period
  8. length_stock<-length(Stock)
  9. EMA_short<-rep(0,length_stock)
  10. EMA_long<-rep(0,length_stock)
  11. stock_diff<-rep(0,length_stock)
  12. stock_dea<-rep(0,length_stock)
  13. stock_macd<-rep(0,length_stock)
  14. #计算各类指标初始值
  15. EMA_short[1]<-Stock[1]
  16. EMA_long[1]<-Stock[1]
  17. stock_diff[1]<-0
  18. stock_dea[1]<-0
  19. stock_macd[1]<-0
  20. #计算各类指标
  21. for (t in 2:length_stock) {
  22. EMA_short[t]<-Stock[t]*2/(short_period+1)+
  23. EMA_short[t-1]*(short_period-1)/(short_period+1)
  24. EMA_long[t]<-Stock[t]*2/(long_period+1)+
  25. EMA_long[t-1]*(long_period-1)/(long_period+1)
  26. stock_diff[t]<-EMA_short[t]-EMA_long[t]
  27. stock_dea[t]<-stock_diff[t]*2/(dea_period+1)+
  28. stock_dea[t-1]*(dea_period-1)/(dea_period+1)
  29. stock_macd[t]<-2*(stock_diff[t]-stock_dea[t])
  30. }
  31. return(stock_macd)
  32. }

  33. #自变量选择过去一天和两天的Macd指标、过去一天的涨跌情况
  34. #过去两天的涨跌情况(测试)代表历史T-1时刻的信息集
  35. #因变量是今天的涨跌情况(代表T时刻的信息集)(1代表涨0代表跌)
  36. short_period<-5
  37. long_period<-25
  38. dea_period<-9
  39. Macd<-macd(Close,short_period,long_period,dea_period)
  40. Diff<-diff(Close)
  41. Diff<-ifelse(Diff>0,1,0)
  42. #T时刻的涨跌情况(因变量)
  43. Diff.T<-Diff
  44. Diff.T<-c(NA,Diff.T)
  45. #T-1时刻的涨跌情况(自变量)
  46. Diff.T1<-Diff[-length(Diff)]
  47. Diff.T1<-c(NA,NA,Diff.T1)
  48. #T-2时刻的涨跌情况(自变量)
  49. Diff.T2<-Diff[-c((length(Diff)-1),length(Diff))]
  50. Diff.T2<-c(NA,NA,NA,Diff.T2)
  51. #T-1时刻的Macd情况(自变量)
  52. Macd.T1<-Macd[-length(Macd)]
  53. Macd.T1<-c(NA,Macd.T1)
  54. #T-2时刻的Macd情况(自变量)
  55. Macd.T2<-Macd[-c((length(Macd)-1),length(Macd))]
  56. Macd.T2<-c(NA,NA,Macd.T2)
  57. #数据集
  58. N<-length(Close)
  59. Data.train<-data.frame(
  60. y=as.factor(Diff.T[c((N-199):(N-50))]),
  61. x1=Diff.T1[c((N-199):(N-50))],
  62. x2=Diff.T2[c((N-199):(N-50))],
  63. x3=Macd.T1[c((N-199):(N-50))],
  64. x4=Macd.T2[c((N-199):(N-50))])
  65. Data.test<-data.frame(
  66. x1=Diff.T1[c((N-49):(N))],
  67. x2=Diff.T2[c((N-49):(N))],
  68. x3=Macd.T1[c((N-49):(N))],
  69. x4=Macd.T2[c((N-49):(N))])
复制代码
4,建模交易
  1. #建立支持向量机模型
  2. library(e1071)
  3. Hs300SvmModel<-svm(y~x1+x2+x3+x4,
  4. data=Data.train,probability=TRUE)
  5. #预测
  6. Predict<-predict(Hs300SvmModel,Data.test,
  7. probability=TRUE)
  8. #最终得到了预测的涨跌情况
  9. Predict<-as.numeric(as.vector(Predict))
  10. #看下预测的准确率
  11. sum(Diff.T[c((N-49):(N))]==Predict)/50

  12. #建立交易和回测
  13. cost<-0.001
  14. Length<-length(Predict)
  15. Trading.Return<-rep(0,Length)
  16. Close.test<-Close[c((N-50):N)]
  17. for (i in 1:Length) {
  18. if (Predict[i]==1) {
  19. #涨的情况
  20. Trading.Return[i]<-
  21. Close.test[i+1]*(1-cost)-Close.test[i]*(1+cost)
  22. } else {
  23. #跌的情况
  24. Trading.Return[i]<-
  25. Close.test[i]*(1-cost)-Close.test[i+1]*(1+cost)
  26. }

  27. }
  28. #累积回报
  29. Trading.Return<-cumsum(Trading.Return)

  30. #试验结果惨败
复制代码
5, 回测结果回顾
  1. #最大回撤比率的函数
  2. Retreat_Ratio<-function(stock_return1) {
  3. N<-length(stock_return1)
  4. RetraceRatio<-rep(0,N)
  5. for (i in 2:N) {
  6. C<-max(stock_return1[1:i])
  7. if (C==stock_return1[i]) {
  8. RetraceRatio[i]<-0
  9. } else {
  10. RetraceRatio[i]<-(stock_return1[i]-C)/C
  11. }
  12. }
  13. return(RetraceRatio)
  14. }
  15. retreat_ratio<-Retreat_Ratio(Trading.Return)
  16. #回测比率和买卖仓位作图
  17. par(family='serif',mfrow=c(2,1))
  18. c1<-c(c(0:Length),c(Length:0))
  19. c2<-c(c(0,retreat_ratio),rep(0,Length+1))
  20. plot(c1,c2,type='n',xlab='Time',
  21. ylab='Retreat Ratio')
  22. polygon(c1,c2,col='green',border='yellow')
  23. title('follow your Retreat Ratio')
  24. plot(Predict,type='b',pch=21,
  25. lwd=0.8,col='blue',bg='green',main='交易头寸回顾')
  26. ########################################################
  27. ########################################################
复制代码

[/hide]










    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2025-12-30 17:20