全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
2369 7
2017-02-28
策略原理:
          将资金分为N份,采取随机抛点的形式入场,止损为10%,止盈为11%
          如果该份资金获利超过11%,则上移止盈止损线,且启动下一份资金抛点入场。
          同时在原策略的基础上加上空头入场


回测曲线(由Auto-Trader软件提供回测报告):
网格资金管理.png

策略代码:

function  Strategy1(freq)%


targetList  =  traderGetTargetList();  

%获取目标资产信息

HandleList  =  traderGetHandleList();

%获取账户句柄

global  record;

for  k=1:length(targetList);


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

        %获取当前仓位

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

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

        lags=121;

        dlags=31;

        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,~,~]  =  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;        

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

%          TRvalue=TR(close,high,low);

%          ATR=ma(TRvalue,50);

%          p=5;

%          stoplossratio=p*mean(ATR(end-20:end-1))/mean(Dclose(end-20:end-1));                              %  止损触发比例

        stoplossratio=0.02;

        stopearnratio=stoplossratio*1.1;                                                                                                    %  止盈触发比例

        %  未平仓的订单提取

        remain_num=find(record.isopen==1);

        remain.isopen=record.isopen(remain_num);

        remain.isearn=record.isearn(remain_num);

        remain.pivotprice=record.pivotprice(remain_num);

        remain.entrybar=record.entrybar(remain_num);

        remain.unit=record.unit(remain_num);

        remain.direction=record.direction(remain_num);

%          remain.stoplossratio=record.stoplossratio(remain_num);

%          remain.stopearnratio=record.stopearnratio(remain_num);

        %  计算购买手数

        [ValidCash,MarketCap,OrderFrozen,MarginFrozen,PositionProfit]  =  traderGetAccountInfo(HandleList(1));

        [~,~,Multiple,~,~,~,~,~,~]  =  traderGetFutureInfo(targetList(k).Market,targetList(k).Code);

        remain_share=10-length(remain_num);

        con1=0;

        if  remain_share~=0;

                con1=1;      %  表示仍有可用资金购买

                openunit=fix(ValidCash/remain_share/close(end)/Multiple);

        end;

        %  判断当前是多头持仓还是空头持仓

        posdir=0;  

        if  ~isempty(remain.direction)

                if  remain.direction(end)>0

                        posdir=1;

                elseif  remain.direction(end)<0

                        posdir=-1;

                end;

        end;

        %  对未平仓的订单进行平仓或者调整止损线

        for  i=1:length(remain_num)

                index=remain_num(i);

                if  remain.direction(i)==1

                        if  close(end)<remain.pivotprice(i)-stoplossratio*remain.pivotprice(i)  %  触发止损线

                                orderID3=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','sell');

                                if  orderID3==0

                                        continue;

                                end;

                                record.isopen(index)=0;

                        elseif  close(end)>remain.pivotprice(i)+stopearnratio*remain.pivotprice(i)  %  触发止盈线

%                                  record.stoplossratio(index)=(close(end)-record.pivotprice(index))/close(end);

%                                  record.stopearnratio(index)=record.stoplossratio(index)*1.1;

                                record.pivotprice(index)=close(end);

                                record.isearn(index)=2;

                        end;

                elseif  remain.direction(i)==-1

                        if  close(end)>remain.pivotprice(i)+stoplossratio*remain.pivotprice(i)  %  触发止损线

                                orderID4=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','buy');

                                if  orderID4==0

                                        continue;

                                end;

                                record.isopen(index)=0;

                        elseif  close(end)<remain.pivotprice(i)-stopearnratio*remain.pivotprice(i)  %  触发止盈线

%                                  record.stoplossratio(index)=(record.pivotprice(index)-close(end))/close(end);

%                                  record.stopearnratio(index)=record.stoplossratio(index)*1.1;

                                record.pivotprice(index)=close(end);

                                record.isearn(index)=2;

                        end;

                end;

        end;

        %  入场条件

%          ma0=ma(close,5);

        ma1=ma(close,20);

        std1=stdev(close,20);

        con2=isempty(find(remain.isearn==1,1));                            %  所有头寸都是盈利的才考虑进新的头寸

        bcon=close(end)>ma1(end)+2*std1(end)  &&  close(end-1)>ma1(end-1)+2*std1(end-1);

        scon=close(end)<ma1(end)-2*std1(end)  &&  close(end-1)<ma1(end-1)-2*std1(end-1);

        buycon=con1  &&  con2  &&  bcon  &&  posdir>=0;

        sellshortcon=con1  &&  con2  &&  scon  &&  posdir<=0;

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

        if  buycon

                orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','buy');

                if  orderID1==0

                        continue;

                end;

                record.pivotprice=[record.pivotprice,close(end)];

                record.isearn=[record.isearn,1];

                record.isopen=[record.isopen,1];

                record.unit=[record.unit,openunit];

                record.entrybar=[record.entrybar,barnum];

                record.direction=[record.direction,1];

%                  record.stoplossratio=[record.stoplossratio,stoplossratio];

%                  record.stopearnratio=[record.stopearnratio,stopearnratio];

        end;

        if  sellshortcon

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

                if  orderID2==0

                        continue;

                end;

                record.pivotprice=[record.pivotprice,close(end)];

                record.isearn=[record.isearn,1];

                record.isopen=[record.isopen,1];

                record.unit=[record.unit,openunit];

                record.entrybar=[record.entrybar,barnum];

                record.direction=[record.direction,-1];

%                  record.stoplossratio=[record.stoplossratio,stoplossratio];

%                  record.stopearnratio=[record.stopearnratio,stopearnratio];

        end;

end

end


二维码

扫码加我 拉你入群

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

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

全部回复
2017-2-28 10:28:59
策略源码下载请登录atrader社区-策略服务下载~
二维码

扫码加我 拉你入群

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

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

2017-2-28 10:59:38
楼主这个是从atrader社区摘的吧? 那边有很多策略啊
二维码

扫码加我 拉你入群

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

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

2017-2-28 11:50:29
嗯呢,
二维码

扫码加我 拉你入群

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

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

2017-2-28 13:08:28
谢谢分享
二维码

扫码加我 拉你入群

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

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

2017-3-1 11:27:51
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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