楼主: 挖矿专家
2087 5

[源码分享] Matlab量化交易策略之 海龟改进策略 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略名称:海龟改进


策略思路:
入场:价格突破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

沙发
peppep 发表于 2017-3-2 14:47:33 |只看作者 |坛友微信交流群
厉害!!!!

使用道具

藤椅
挖矿专家 发表于 2017-3-3 10:31:24 |只看作者 |坛友微信交流群
感谢支持,后续可以持续关注

使用道具

板凳
ghjktdf 发表于 2017-3-3 14:42:49 |只看作者 |坛友微信交流群
感谢楼主分享~

使用道具

报纸
挖矿专家 发表于 2017-3-6 10:46:47 |只看作者 |坛友微信交流群

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

使用道具

楼主可以解释一下代码的思路吗?有些变量不是很明白,小白求带

使用道具

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

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

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

GMT+8, 2024-4-25 12:59