《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 4589|回复: 103
收起左侧

[源码] 【原创】基于支持向量机的股指期货策略

  [复制链接]

该用户从未签到

发表于 2016-10-12 09:55:02 | 显示全部楼层 |阅读模式
本帖最后由 Masque 于 2016-10-12 09:56 编辑

分享一个自己写的基于支持向量机(SVM)的量化交易策略。
思路是对之前一段时间的高、低、收数据用svmtrain函数进行二分类,从而预测下一根bar的涨跌。我还加上了双均线系统进行过滤。

在股指期货上进行回测,60分钟频率,从2014/06/012016/07/01,结果如下:

信号点:
微信截图_20161011133525.png
权益曲线:
微信截图_20161011133508.png
多头权益:
微信截图_20161011142103.png
空头权益:
微信截图_20161011142107.png
每月盈利:
微信截图_20161011142042.png
策略绩效概要:
微信截图_20161011133323.png

这个策略没有加止损和头寸管理,还有许多可以完善的地方,欢迎大家一起交流学习哈~

源代码如下:
function svm(lags1,lags2,freq,shareNum)

%---------------------策略初始化与是否日内平仓---------------%
% traderDailyCloseTime(145000);
targetList = traderGetTargetList();
HandleList = traderGetHandleList();


%---------------------策略提取数据---------------%
[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code); % 读取仓位信息
[BarNumber,BarTime,BarOpen,BarHigh,BarLow,BarClose,BarVolume,BarTurnOver,BarOpenInterest] = traderGetCurrentBar(targetList(1).Market,targetList(1).Code); % 读取当前bar位置
if(BarNumber<lags1)
    return;
end
[Time,Open,High,Low,Close,Volume,Turnover,Openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',freq, 0-lags1, 0,false,'NA'); % 读取K线数据
if(length(Time)<lags2)
    return;
end

%---------------------策略计算与基本逻辑---------------%
H=High;
L=Low;
C=Close;
statesData=diff(Close)>0;
trainData=[H,L,C];
trainData__=trainData(end-lags2+1:end-1,:);
statesData__=statesData(end-lags2+2:end);
SVMstruct=svmtrain(trainData__,statesData__,'kernel_function','rbf');
y=svmclassify(SVMstruct,trainData(end,:));
con1=mean(Close(end-4:end))>mean(Close(end-29:end)); % 均线过滤,上穿
con2=mean(Close(end-4:end))<mean(Close(end-29:end)); % 均线过滤,下穿

%----------------------策略主体-------------------------------%
if y(end)>0&&marketposition <=0&&con1
    traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buy1');  % 做多
end

if y(end)<=0&&marketposition>=0&&con2
    traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sell1'); % 做空
end

end


该用户从未签到

发表于 2017-10-30 22:02:06 | 显示全部楼层
楼主,我是新手,运行程序,提示 未定义函数或变量 'traderGetTargetList' 出错 qhcx001 (line 6)  targetList = traderGetTargetList();应该怎么解决
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2016-10-19 15:26:54 | 显示全部楼层
seven77 发表于 2016-10-12 12:01
细看代码,里面好多不是matlab的函数吧?这是自己编的函数吗?好厉害啊!!

回测框架和读取数据是atrader里面自定义的函数
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-12 12:01:43 | 显示全部楼层
孤独的电子 发表于 2016-10-12 11:33
支持向量机,做预测很好。

svm预测股票价格行情应该很难吧
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-12 09:59:04 | 显示全部楼层
看看,多谢分享  
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-12 10:03:26 | 显示全部楼层
这个策略看起来表现不错啊!求看代码~~
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-12 11:33:27 | 显示全部楼层
支持向量机,做预测很好。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-12 12:01:43 | 显示全部楼层
细看代码,里面好多不是matlab的函数吧?这是自己编的函数吗?好厉害啊!!
回复 支持 反对

使用道具 举报

签到天数: 56 天

[LV.5]常住居民I

发表于 2016-10-12 17:16:45 | 显示全部楼层
学习一下,谢谢分享·
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-12 20:08:38 | 显示全部楼层
一直在学习支持向量机应用到金融建模,好好学习一下
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-13 09:47:03 | 显示全部楼层
楼主厉害,我用SVM做出来的东西效果就比较差了。。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-10-13 11:33:35 | 显示全部楼层
holyfeng 发表于 2016-10-12 12:01
svm预测股票价格行情应该很难吧

SVM的泛化能力还可以呀。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 陕ICP备08102094号  

GMT+8, 2018-4-24 20:19 , Processed in 0.137564 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表