全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
1428 6
2017-03-20
交易规则与Pivot类似,以做多为例,突破观察价后,若继续突破突破价则做多,跌破支撑价则做空。

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

sixline.png


策略代码:

function SixLine(Freq,ShareNum,len,k1,k2)% ------------ Retrace Strategy-------------------%% Freq 为输入时间频率% k1 初始止损ATR% k2 跟踪止损ATR%---------------------策略初始化与是否日内平仓---------------%    targetList = traderGetTargetList(); HandleList = traderGetHandleList(); [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code); %---------------------策略提取数据---------------%global s;n = length(targetList);for j = 1:n    [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'min',Freq, 0-len, 0,false,'FWard');    if length(close)<len+1        return    end    dlen = 10;    [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-dlen, 0,false,'FWard');    if length(Dclose)<dlen+1        return    end    [atr,~] = traderATR(10,targetList(1).Market,targetList(1).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR    %---------------------策略计算与基本逻辑---------------%        t = datevec(time(end));    Y = t(4)*100+t(5);    if Y==1445        traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','收盘平仓');    end;        if Y<945        s(j).bh = 0;        s(j).bb = 0;        s(j).br = 0;        s(j).sh = 0;        s(j).sb = 0;        s(j).sr = 0;        s(j).tt = 0;    end        if Y>=945 && Y<1445         HH = Dhigh(end-1);        LL = Dlow(end-1);        CC = Dclose(end-1);        mid = (HH+LL+2*CC)/4;        B1 = HH;        B2 = HH+(mid-LL);        B3 = HH+2*(mid-LL);        S1 = LL;        S2 = LL+(mid-HH);        S3 = LL+2*(mid-HH);                if close(end)>B2             s(j).bh = 1;        end        if s(j).bh==1 && close(end)<B1            s(j).br = 1;        end        if s(j).bh==1 && close(end)>B3            s(j).bb = 1;        end                if close(end)<S2             s(j).sh = 1;        end        if s(j).sh==1 && close(end)>S1            s(j).sr = 1;        end        if s(j).sh==1 && close(end)<S3            s(j).sb = 1;        end    %----------------------策略主体-------------------------------%        % 入场    if marketposition==0        if (s(j).bb==1 || s(j).sr==1) && s(j).tt<1            OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');            if OrderID~=0                s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);                s(j).peak=0;                s(j).tt = s(j).tt+1;            end        elseif (s(j).sb==1 || s(j).br==1) && s(j).tt<1            OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');            if OrderID~=0                s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);                s(j).peak=0;                s(j).tt = s(j).tt+1;            end        end    end    % 出场    if marketposition>0        if close(end)<s(j).openprice-k1*atr(end-1)            traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');        end        if s(j).peak==0 && close(end)>s(j).openprice+k2*atr(end-1) % 上移止损线到开仓位置,并加仓            s(j).peak = high(end);            OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');            if OrderID~=0                s(j).tt = s(j).tt+1;            end        end        if s(j).peak>0            s(j).peak = max(s(j).peak,high(end));            if close(end)<s(j).peak-k2*atr(end-1)                traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');            end        end     end        if marketposition<0        if close(end)>s(j).openprice+k1*atr(end-1)            traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');        end        if s(j).peak==0 && close(end)<s(j).openprice-k2*atr(end-1) % 下移止损线到开仓位置,并加仓            s(j).peak = low(end);            OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','sell');            if OrderID~=0                s(j).tt = s(j).tt+1;            end        end        if s(j).peak>0            s(j).peak = min(s(j).peak,low(end));            if close(end)>s(j).peak+k2*atr(end-1)                traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');            end        end     end    endend%----------------------自定义函数-------------------------------%




更多免费策略源码下载请登录DigQuant社区-策略资源页面下载~




二维码

扫码加我 拉你入群

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

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

全部回复
2017-3-20 17:59:07
这是一个系列吗?
二维码

扫码加我 拉你入群

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

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

2017-3-21 12:22:58
哈哈,456
二维码

扫码加我 拉你入群

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

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

2017-3-21 16:34:44
期待下一篇~~已关注楼主~~~
二维码

扫码加我 拉你入群

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

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

2017-3-22 10:15:06
楼主好人~
二维码

扫码加我 拉你入群

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

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

2017-3-29 22:18:50
谢谢分享
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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