全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
2437 5
2017-02-24
策略名称:海龟改进


策略思路:
入场:价格突破50日高点,或者跌破50日低点
被动出场:多头情况下跌破20日低点
                空头情况下突破20日高点
主动出场:每个加仓点单独出场,以每个加仓点下的N倍ATR出场,且每次调整对每个止损点调整N


回测曲线:


海龟改进.png

策略代码:

%加仓逻辑:加仓间隔逐渐扩大,每次扩大1倍ATR

%止损逻辑:止损间隔逐渐扩大,每次扩大1倍ATR

function  Turtle3(len1,len2,len3,Freq,ShareNum,multi)


targetList  =  traderGetTargetList();

HandleList  =  traderGetHandleList();


global  s;


lens=60;

n=length(targetList);

PsnLimit=4;


for  j=1:n

        [time,open,high,low,close,volume,turnover,openinterest]  =  traderGetKData(targetList(j).Market,targetList(j).Code,'day',1,  0-lens,  0,false,'FWard');

        [mp,~,AvgPrice]  =  traderGetAccountPosition(HandleList,targetList(j).Market,targetList(j).Code);


        %---------------------策略计算与基本逻辑---------------%

        if  length(close)<lens+1  ||  volume(end)==0

                continue;

        end


        value1  =  high(end-lens+1:end)  -  low(end-lens+1:end);%  当日最高价减去当日最低价

        value2  =  abs(high(end-lens+1:end)-close(end-lens:end-1));%  当日最高价减去前日收盘价的绝对值

        value3  =  abs(low(end-lens+1:end)-close(end-lens:end-1));%    当日最低价减去前日收盘价的绝对值

        TRlist=max(value1,max(value2,value3));

        ATR_len3=mean(TRlist(end-len3+1:end));


        %  四条轨道

        High_len1=max(high(end-len1:end-1));

        Low_len1=min(low(end-len1:end-1));

        High_len2=max(high(end-len2:end-1));

        Low_len2=min(low(end-len2:end-1));


        %          ValidCash  =  traderGetAccountInfo(HandleList);

        %

        %          s(j).Cap=ValidCash/n+mp*close(end);

        %          PsnLimit=floor(s(j).Cap*0.01*plus/(ATR_len3*s(j).Multiple));



        con1=close(end)>High_len1;

        con2=close(end)<Low_len1;

        con3=close(end)>High_len2;

        con4=close(end)<Low_len2;


        %%    出场

        if  mp>0

                if  con4


                        OrderID=traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');

                        if  OrderID~=0

                        s(j).openprice=[];

                        s(j).stoploss=[];

                        s(j).addprice=0;

                        end

                else

                        for  i=1:length(s(j).stoploss)

                                if  ~isempty(s(j).stoploss)  &&  close(end)<s(j).stoploss(end)

                                        OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','close');

                                        if  OrderID~=0

                                        s(j).stoploss(end)=[];

                                        s(j).openprice(end)=[];


                                        end

                                end

                        end

                end

        end


        if  mp<0

                if  con3

                          OrderID=traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');

                        if  OrderID~=0

                        s(j).openprice=[];

                        s(j).stoploss=[];

                        s(j).addprice=0;

                        end

                else

                        for  i=1:length(s(j).stoploss)

                                if  ~isempty(s(j).stoploss)  &&  close(end)>s(j).stoploss(end)


                                        OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','close');

                                        if  OrderID~=0

                                        s(j).stoploss(end)=[];

                                        s(j).openprice(end)=[];

                                        end


                                end

                        end

                end

        end


        mp  =  traderGetAccountPosition(HandleList,targetList(j).Market,targetList(j).Code);


        %%  进场

        if  mp==0

                if  con1

                        OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');

                        if  OrderID~=0

                                s(j).openprice(1)=traderOrderFilledPrice(HandleList(1),OrderID);

                                s(j).addprice=s(j).openprice+multi*ATR_len3;

                                s(j).stoploss(1)=s(j).openprice(1)-0.5*multi*ATR_len3;

                        end

                elseif  con2

                        OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');

                        if  OrderID~=0

                                s(j).openprice(1)=traderOrderFilledPrice(HandleList(1),OrderID);

                                s(j).addprice=s(j).openprice-multi*ATR_len3;

                                s(j).stoploss(1)=s(j).openprice(1)+0.5*multi*ATR_len3;

                        end

                end

        end



        %%  加仓

        if  mp>0  &&  mp<  PsnLimit


                if    close(end)>=(s(j).addprice)

                        OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');

                        if  OrderID~=0

                                s(j).openprice(end+1)=traderOrderFilledPrice(HandleList(1),OrderID);

                                N=length(s(j).openprice);

                                s(j).addprice=s(j).openprice(end)+N*multi*ATR_len3;

                                stoploss=s(j).openprice(end)-(N-1)*multi*ATR_len3;

                                s(j).stoploss(end+1)=stoploss;

                        end

                end

        end


        if  mp<0  &&  abs(mp)<  PsnLimit

                if  close(end)<=(s(j).addprice)

                        OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');

                        if  OrderID~=0

                                s(j).openprice(end+1)=traderOrderFilledPrice(HandleList(1),OrderID);

                                N=length(s(j).openprice);

                                s(j).addprice=s(j).openprice(end)-N*multi*ATR_len3;

                                stoploss=s(j).openprice(end)+(N-1)*multi*ATR_len3;

                                s(j).stoploss(end+1)=stoploss;

                        end

                end

        end

end


更多免费策略源码下载请登录atrader社区-策略服务,http://www.atrader.com.cn/stra.php


附件列表
海龟改进.png

原图尺寸 62.03 KB

海龟改进.png

二维码

扫码加我 拉你入群

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

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

全部回复
2017-3-2 14:47:33
厉害!!!!
二维码

扫码加我 拉你入群

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

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

2017-3-3 10:31:24
感谢支持,后续可以持续关注
二维码

扫码加我 拉你入群

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

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

2017-3-3 14:42:49
感谢楼主分享~
二维码

扫码加我 拉你入群

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

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

2017-3-6 10:46:47

atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn
二维码

扫码加我 拉你入群

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

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

2017-9-19 16:04:01
楼主可以解释一下代码的思路吗?有些变量不是很明白,小白求带
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群