楼主: 挖矿专家
4447 6

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

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

楼主
挖矿专家 发表于 2017-2-24 10:54:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略原理:
         以最近50个交易周期的开高低收价格算出CMI值,
         当CMI小于50且价格高于均线,定义为震荡上行
         当CMI小于50且价格低于均线,定义为震荡下行
         当CMI大于等于50,定义为趋势
         不同行情使用不同的下单信号


回测曲线:


恒温器策略.png

策略代码:

function  Strategy1(default_unit,default_exitway,freq)%


targetList  =  traderGetTargetList();  

%获取目标资产信息

HandleList  =  traderGetHandleList();

%获取账户句柄

global  entrybar;

global  istrend;

for  k=1:length(targetList);


        %--------------------仓位、K线、当前bar的提取-----------------------------%

        %获取当前仓位

        [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);

        %策略中每次取数据的长度

        lags=201;

        dlags=20;

        barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);

        %数据长度限制

        if(barnum<lags)

                continue;

        end

        if(barnum<dlags)

                continue;

        end

        %获取K线数据

        [time,open,high,low,close,volume,turnover,openinterest]  =  traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,  0-lags,  0,false,'FWard');

        [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,~,~]  =  traderGetKData(targetList(k).Market,targetList(k).Code,'day',1,  0-dlags,  0,false,'FWard');

        if  length(close)<lags  ||  length(Dclose)<dlags

                continue;

        end;        

        %-------------------------交易逻辑-------------------------------%

        %----------入场信号--------------------%

        len=50;

        CMIvalue=CMI(close,high,low,len);

        len1=20;

        ma1=ma(close,len1);

        ma2=ma(close,120);

        upline1=ma1+stdev(close,len1);

        dnline1=ma1-stdev(close,len1);

        upline2=ma1+2*stdev(close,len1);

        dnline2=ma1-2*stdev(close,len1);

        position=zeros(length(close),1);

        for  i=1:length(position)

                if  close(i)>upline2(i)

                        position(i)=3;

                elseif  close(i)>upline1(i)  &&  close(i)<=upline2(i)

                        position(i)=2;

                elseif  close(i)>ma1(i)  &&  close(i)<=upline1(i)

                        position(i)=1;

                elseif  close(i)<=ma1(i)  &&  close(i)>dnline1(i)

                        position(i)=-1;

                elseif  close(i)<=dnline1(i)  &&  close(i)>dnline2(i)

                        position(i)=-2;

                elseif  close(i)<=dnline2(i)

                        position(i)=-3;

                end;

        end;

        state=0;

        if  CMIvalue(end)<50  &&  close(end)>ma2(end)  %  震荡上行

                state=1;

        elseif  CMIvalue(end)<50  &&  close(end)<ma2(end)%  震荡下行

                state=2;

        elseif  CMIvalue(end)>=50  %  趋势

                state=3;

        end;

        buycon=0;

        sellshortcon=0;

        sellcon=0;

        buytocovercon=0;

        if  state==1

                if  position(i)==-2  &&  position(i-1)==-3;

                        buycon=1;

                        istrend(k)=-1;

                end;

        elseif  state==2

                if  position(i)==2  &&  position(i-1)==3;

                        sellshortcon=1;

                        istrend(k)=-1;

                end;

        elseif  state==3

                if  position(i)==2  &&  position(i-1)==1;

                        buycon=1;

                        istrend(k)=1;

                end;

                if  position(i)==-2  &&  position(i-1)==-1;

                        sellshortcon=1;

                        istrend(k)=1;

                end;

        end;

        if  default_exitway==1

                if  istrend(k)==-1

                        sellcon=position(i)==1;

                        buytocovercon=position(i)==-1;

                elseif  istrend(k)==1

                        sellcon=position(i)==-1;

                        buytocovercon=position(i)==1;

                end;

        end;

        %---------------------------入场操作--------------------------------%

        if  sellcon  &&  marketposition>0

                orderID1=traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0,0,'market','sell');

                if  orderID1==0

                        continue;

                end;

                istrend(k)=0;

        end;

        if  buytocovercon  &&  marketposition<0

                orderID2=traderPositionTo(HandleList(1),targetList(k).Market,targetList(k).Code,0,0,'market','sell');

                if  orderID2==0

                        continue;

                end;

                istrend(k)=0;

        end;

        if  buycon  &&  marketposition<=0

                buyunit=default_unit;

                orderID3=traderBuy(HandleList(1),targetList(k).Market,targetList(k).Code,buyunit,0,'market','buy');

                if  orderID3==0

                        continue;

                end;

                entrybar(k)=barnum;

        end;

        if  sellshortcon  &&  marketposition>=0

                sellshortunit=default_unit;

                orderID4=traderSellShort(HandleList(1),targetList(k).Market,targetList(k).Code,sellshortunit,0,'market','sell');

                if  orderID4==0

                        continue;

                end;

                entrybar(k)=barnum;

        end;  

end

end


来源:Atrader社区-策略服务


二维码

扫码加我 拉你入群

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

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

关键词:量化交易策略 MATLAB matla atlab 交易策略 恒温器

沙发
挖矿专家 发表于 2017-2-24 10:55:14
更多免费策略源码下载请登录atrader社区-策略服务,http://www.atrader.com.cn/stra.php

藤椅
ghjktdf 发表于 2017-2-24 14:51:41
恒温器?我孤陋寡闻了~

板凳
65425856 发表于 2017-2-28 13:46:46
ghjktdf 发表于 2017-2-24 14:51
恒温器?我孤陋寡闻了~
同感,感觉还有好多需要向楼主学习

报纸
挖矿专家 发表于 2017-3-1 11:17:45
大家一起学习~

地板
挖矿专家 发表于 2017-3-6 14:24:32
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn

7
283228553 在职认证  发表于 2019-1-18 23:34:43
好贴!

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-20 04:57