全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
1813 5
2017-03-02
策略名称:均线系统
策略原理:
         多头入场:5日均线上穿65日均线且当前价格大于200日均线
         空头入场:5日均线下穿65日均线且当前价格小于200日均线
         出场:动态跟踪止损出场


回测曲线(由Auto-trader提供回测报告)


均线系统.png


策略源码:


function  Strategy1(default_unit,default_exitway,freq)%


targetList  =  traderGetTargetList();  

%获取目标资产信息

HandleList  =  traderGetHandleList();

%获取账户句柄

global  entrybar;

for  k=1:length(targetList);


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

        %获取当前仓位

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

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

        lags=200;

        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  legth(close)<lags  ||  length(Dclose)<dlags

                continue;

        end;        

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

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

        TRvalue=TR(Dclose,Dhigh,Dlow);

        ATR=ma(TRvalue,10);

        ma2=ma(close,200);

        ma0=ma(close,5);

        ma1=ma(close,65);

        buycon=ma0(end)>ma1(end)  &&  ma0(end-1)<ma1(end-1)  &&  close(end)>ma2(end);

        sellshortcon=ma0(end)<ma1(end)  &&  ma0(end-1)>ma1(end-1)  &&  close(end)<ma2(end);

        if  default_exitway==1

                sellcon=ma0(end)<ma1(end)  &&  ma0(end-1)>ma1(end-1);

                buytocovercon=ma0(end)>ma1(end)  &&  ma0(end-1)<ma1(end-1);

        elseif  default_exitway==2

                TRvalue=TR(close,high,low);

                ATR=ma(TRvalue,4);

                barsinceentry=barnum-entrybar(k);

                [~,entryopen,entryhigh,entrylow,entryclose,~,~,~]  =  traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,  0-barsinceentry,  0,false,'FWard');

                range=4*ATR(end-1);

                [sellcon,buytocovercon]=exitway1(entryopen,entryclose,entryhigh,entrylow,marketposition,range);

        elseif  default_exitway==3

                barsinceentry=barnum-entrybar(k);

                [~,entryopen,entryhigh,entrylow,entryclose,~,~,~]  =  traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,  0-barsinceentry,  0,false,'FWard');

                enterprice=entryclose(1);

                percent=0.5;

                ATRparam=1;

                sellcon=0;

                buytocovercon=0;

                if  marketposition>0

                        stoplossprice=enterprice-ATRparam*ATR(end);

                        stopearnprice=enterprice+ATRparam*ATR(end);

                        [sellcon,buytocovercon]=exitway3(entryopen,entryclose,entryhigh,entrylow,marketposition,stoplossprice,stopearnprice,percent);

                elseif  marketposition<0

                        stoplossprice=enterprice+ATRparam*ATR(end);

                        stopearnprice=enterprice-ATRparam*ATR(end);

                        [sellcon,buytocovercon]=exitway3(entryopen,entryclose,entryhigh,entrylow,marketposition,stoplossprice,stopearnprice,percent);

                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;

        end;

        if  buytocovercon  &&  marketposition<0

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

                if  orderID2==0

                        continue;

                end;

        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社区-策略服务下载



二维码

扫码加我 拉你入群

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

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

全部回复
2017-3-2 14:46:28
谢谢分享
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

2017-3-3 14:38:49
有双均线的吗?
二维码

扫码加我 拉你入群

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

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

2017-3-4 15:47:33
。。。。帮顶
二维码

扫码加我 拉你入群

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

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

2017-3-6 10:42:34

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

扫码加我 拉你入群

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

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

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

说点什么

分享

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