楼主: 挖矿专家
1808 9

[源码分享] 【每日一策】Matlab量化交易策略之 HPStrategy [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

威望
0
论坛币
2016 个
通用积分
5.2622
学术水平
21 点
热心指数
21 点
信用等级
21 点
经验
6055 点
帖子
403
精华
0
在线时间
151 小时
注册时间
2017-2-8
最后登录
2017-6-27

楼主
挖矿专家 发表于 2017-3-8 11:59:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略原理:

多头条件:向上趋势比重大于90%且中长期趋势线在收盘价下方且快速EMA均线在收盘价下方且
慢速EMA均线在收盘价下方且快速EMA均线上穿慢速EMA均线且中长期趋势线在慢速EMA均线上方

空头条件:向下趋势比重大于90%且中长期趋势线在收盘价上方且快速EMA均线在收盘价上方且
慢速EMA均线在收盘价上方且慢速EMA均线上穿快速EMA均线且中长期趋势线在慢速EMA均线下方

回测曲线(由Auto-Trader软件提供回测报告):

HP策略.png

策略源码:

function HPStrategy(Freq,len,len1,len2,shareNum) %上面五个为输入参数 % ------------ HPStrategy-------------------% Freq 为输入时间频率% shareNum 为操作的手数% len1 为快速均线参数% len2 为慢速均线参数    len1<len2% len  为滚动窗口大小%---------------------策略初始化与是否日内平仓---------------%traderDailyCloseTime(145000);     % 每天14:50分平仓    如果没有日内平仓,去掉这句话就可以了。targetList = traderGetTargetList(); %获取交易标的句柄HandleList = traderGetHandleList(); %获取账户句柄[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code); %获取当前仓位状况lags=300;barnum=traderGetCurrentBar(targetList(1).Market,targetList(1).Code); %当前Bar的编号if(barnum<=lags) %当编号不超过所取的数据长度时,返回    return;end%---------------------策略提取数据---------------%[time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq, 0-lags, 0,false,'FWard'); %提取数据,从当前开始往前取lags个数据%---------------------策略计算与基本逻辑---------------%Xo=close(end-len+1:end);[C1 T1]=hpfilter(Xo,14400); %HP滤波获得中长期趋势[C2 T2]=hpfilter(C1,14400); %二次HP滤波EMA1=EMA(C2,len1); %len1=5,快速EMA均线EMA2=EMA(C2,len2); %len2=20,慢速EMA均线Y0=C2;df=diff(C2);df1=find(df>0);df2=find(df<0);tick1=length(df1);  %上涨次数tick2=length(df2);  %下跌次数con1=tick1/(tick1+tick2)>0.9;  %向上趋势比重大于90%con2=tick2/(tick1+tick2)>0.9;  %向下趋势比重大于90%con3=(Y0(end)<close(end)) ;    %中长期趋势线在收盘价下方con4=(Y0(end)>close(end));     %中长期趋势线在收盘价上方con5=(EMA1(end)<close(end));   %快速EMA均线在收盘价下方con6=(EMA1(end)>close(end));   %快速EMA均线在收盘价上方con7=(EMA2(end)<close(end)) ;  %慢速EMA均线在收盘价下方con8=(EMA2(end)>close(end));   %慢速EMA均线在收盘价上方con9=(EMA1(end)>EMA2(end));    %快速EMA均线上穿慢速EMA均线con10=(EMA1(end)<EMA2(end));   %慢速EMA均线上穿快速EMA均线con11=(Y0(end)>EMA2(end));     %中长期趋势线在慢速EMA均线上方con12=(Y0(end)<EMA2(end));     %中长期趋势线在慢速EMA均线下方%----------------------策略主体-------------------------------%if  marketposition<=0    if con1        if con3            if con5                if con7                    if con9                        if con11                            [barnum,bartime] = traderGetCurrentBar(targetList(1).Market,targetList(1).Code);                            traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buy1'); %做多%                             fprintf('%s  买  %s  %s  %d手  市价  tick1/(tick1+tick2)=%f EMA1=%f  EMA2=%f\n',datestr(bartime),targetList(1).Market,targetList(1).Code,shareNum,tick1/(tick1+tick2),EMA1(end),EMA2(end));                                                    end                    end                end            end        end    endendif  marketposition>=0    if con2        if con4            if con6                if con8                    if con10                        if con12                            [barnum,bartime] = traderGetCurrentBar(targetList(1).Market,targetList(1).Code);                            traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sell1'); %做空%                             fprintf('%s  卖  %s  %s  %d手  市价  tick2/(tick1+tick2)=%f EMA1=%f  EMA2=%f\n',datestr(bartime),targetList(1).Market,targetList(1).Code,shareNum,tick2/(tick1+tick2),EMA1(end),EMA2(end));                        end                    end                end            end        end    end    endendfunction EMAValue=EMA(Price,Length)%------------------------此函数用来计算指数移动平均------------------------%----------------------------------编写者--------------------------------EMAValue=zeros(length(Price),1);K=2/(Length+1);for i=1:length(Price)    if i==1        EMAValue(i)=Price(i);    else        EMAValue(i)=Price(i)*K+EMAValue(i-1)*(1-K);    endendend


更多免费策略源码下载请登录DigQuant社区-策略资源下载~

二维码

扫码加我 拉你入群

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

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


沙发
ghjktdf 发表于 2017-3-8 15:48:57
感觉排版乱掉了~

藤椅
挖矿专家 发表于 2017-3-9 10:08:53
ghjktdf 发表于 2017-3-8 15:48
感觉排版乱掉了~
贴过来就这样了~建议去网站上下载,有完整的函数库

板凳
65425856 发表于 2017-3-9 16:51:58
挖矿专家 发表于 2017-3-9 10:08
贴过来就这样了~建议去网站上下载,有完整的函数库
OK,那就方便多了~

报纸
挖矿专家 发表于 2017-3-13 10:37:43
65425856 发表于 2017-3-9 16:51
OK,那就方便多了~
嗯,直接点下载就好了

地板
ghjktdf 发表于 2017-3-14 16:50:59
挖矿专家 发表于 2017-3-13 10:37
嗯,直接点下载就好了
好,谢楼主

7
挖矿专家 发表于 2017-3-15 11:31:54
ghjktdf 发表于 2017-3-14 16:50
好,谢楼主
客气~

8
ghjktdf 发表于 2017-3-22 10:36:06
楼主好人
~

9
挖矿专家 发表于 2017-3-24 14:23:36
客气客气,感谢大家支持~

10
65425856 发表于 2017-3-27 20:35:32
楼主干货实在多~

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-28 17:29