楼主: fantuanxiaot
14064 118

[源码分享] [R原创]基于R语言的支持向量机HS300收盘价简单回测[by fantuanxiaot]   [推广有奖]

Ψ▄┳一大卫卍卐席尔瓦

大师

8%

还不是VIP/贵宾

-

威望
7
论坛币
-234475 个
通用积分
124.1424
学术水平
3783 点
热心指数
3819 点
信用等级
3454 点
经验
150207 点
帖子
7546
精华
32
在线时间
1327 小时
注册时间
2013-2-3
最后登录
2022-2-24

初级学术勋章 初级热心勋章 中级热心勋章 中级学术勋章 初级信用勋章 中级信用勋章 高级热心勋章 高级学术勋章 特级学术勋章 特级热心勋章 高级信用勋章 特级信用勋章

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
欢迎大牛拍砖指正

数据: SVM_HS300Data.xls (240.5 KB)

本帖隐藏的内容

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)
复制代码

SVM_Trading_Plot1.jpg


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. #  累积回报
  30. Trading.Return<-cumsum(Trading.Return)

  31. #  试验结果惨败
复制代码
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. #  #######################################################
复制代码



SVM_Trading_Plot3.jpg







二维码

扫码加我 拉你入群

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

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

关键词:fantuanxiaot HS300 支持向量机 NTU R语言 收盘价

已有 5 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
421073390 + 100 + 1 + 1 + 1 精彩帖子
eric5488 + 3 + 3 + 3 精彩帖子
chenyi112982 + 5 + 5 精彩帖子
我的素质低 + 20 + 2 + 1 + 1 精彩帖子
离歌レ笑 + 100 + 5 + 5 精彩帖子

总评分: 经验 + 120  论坛币 + 100  学术水平 + 16  热心指数 + 10  信用等级 + 10   查看全部评分

本帖被以下文库推荐

沙发
zhukeming 发表于 2015-3-9 22:33:14 |只看作者 |坛友微信交流群

回帖奖励 +3

使用道具

藤椅
zhukeming 发表于 2015-3-9 22:33:16 |只看作者 |坛友微信交流群

回帖奖励 +3

使用道具

板凳
jerker 发表于 2015-3-9 22:34:46 |只看作者 |坛友微信交流群

回帖奖励 +3

先抢币,后学习,ohyeah

使用道具

报纸
zhukeming 发表于 2015-3-9 22:35:14 |只看作者 |坛友微信交流群
深夜好福利,哈哈
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 大神您也发发原创帖

总评分: 论坛币 + 5   查看全部评分

使用道具

地板
jerker 发表于 2015-3-9 22:36:54 |只看作者 |坛友微信交流群

回帖奖励 +3

谢谢勤奋帅气善良玉树临风的fantuanxiaot

使用道具

7
离歌レ笑 在职认证  发表于 2015-3-9 23:03:29 |只看作者 |坛友微信交流群

回帖奖励 +3

饭团V5
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 10 谢谢离歌

总评分: 论坛币 + 10   查看全部评分

使用道具

8
mike68097 发表于 2015-3-9 23:24:08 |只看作者 |坛友微信交流群

回帖奖励 +3

使用道具

9
估值菜鸟 发表于 2015-3-9 23:41:20 |只看作者 |坛友微信交流群

回帖奖励 +3

学习啦

使用道具

10
fjrong 在职认证  发表于 2015-3-10 00:29:04 |只看作者 |坛友微信交流群

回帖奖励 +3

使用道具

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

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

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

GMT+8, 2024-4-19 19:27