Matlab自适应均线_【每日一策】Matlab量化交易策略之 均线通道+突破+加仓

该博客介绍了一种基于20日均线和标准差构建的均线通道交易策略。当价格突破通道上轨并成为近期高点时,触发多头入场;跌破下轨并成为近期低点时,触发空头入场。每变动2倍ATR进行加仓,动态跟踪止损作为出场依据。策略源码展示了如何在不同市场条件下执行买卖操作。
摘要由CSDN通过智能技术生成

均线通道突破+加仓

策略原理:

20均线为中轴,上下一个单位的标准差构成一个均线通道

多头入场:价格突破通道上轨,且成为近期高点

空头入场:价格突破通道下轨,且成为近期低点

加仓:价格每变动2倍ATR

出场:动态跟踪止损

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

2017-3-21 10:10:26 上传

下载附件 (84.88 KB)

策略源码:

function Strategy1(default_unit,default_exitway,freq)%targetList = traderGetTargetList(); %获取目标资产信息HandleList = traderGetHandleList();%获取账户句柄global entry;for k=1:length(targetList);        %--------------------仓位、K线、当前bar的提取-----------------------------%    %获取当前仓位    [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);    %策略中每次取数据的长度    dlags=11;    lags=150;    barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);    %数据长度限制    if(barnumHH-p*(HH-LL);%     con3=ma0(end)>ma1(end) && ma0(end-1)ma1(end-1);%     s(1).buycon=con1 && con3;%     s(1).sellshortcon=con2 && con4;    len1=20;    con1=ma0(end)>upline(end);    con2=ma0(end)max(close(end-len1+1:end-1));    con4=close(end)0        totalunit=totalunit-abs(s(2).marketposition);        % 把已经平掉的订单的开关关掉        for j=1:length(s(1).num)            entry.record{k}(remain.num(s(1).num(j)))=0;        end;    end;    if s(1).buytocovercon && s(1).marketposition<0        totalunit=totalunit+abs(s(2).marketposition);        % 把已经平掉的订单的开关关掉        for j=1:length(s(1).num)            entry.record{k}(remain.num(s(1).num(j)))=0;        end;    end;    %----------------策略2----------------------%    if s(2).sellcon && s(2).marketposition>0        totalunit=totalunit-s(2).marketposition;        % 把已经平掉的订单的开关关掉        for j=1:length(s(2).num)            entry.record{k}(remain.num(s(2).num(j)))=0;        end;    end;    if s(2).buytocovercon && s(2).marketposition<0        totalunit=totalunit+s(2).marketposition;        % 把已经平掉的订单的开关关掉        for j=1:length(s(2).num)            entry.record{k}(remain.num(s(2).num(j)))=0;        end;    end;    %}        %---------------------------加仓--------------------------------%    %----------------策略1----------------------%    %再次找到未平仓的订单    remain=remainorder(entry,k);    % 找到策略i的marketposition    s=mptaking(s,remain);    % 找到最近的加仓点和加仓价格    if s(1).marketposition~=0;        lastentrybar=max(remain.entrybar(s(1).num));        lastbarsinceentry=barnum-lastentrybar;        lastentryprice=open(end-lastbarsinceentry+1);        vector=remain.entrydirection(s(1).num);        lastdirection=vector(end);        TRvalue=TR(close,high,low);        ATR=ma(TRvalue,10);        s(1).addbuycon=0;        s(1).addsellshortcon=0;        if lastdirection>0            s(1).addbuycon=close(end)-lastentryprice>2*ATR(end);        elseif lastdirection<0            s(1).addsellshortcon=lastentryprice-close(end)>2*ATR(end);        end;        %---------------加仓操作-------------------------%        if s(1).addbuycon && s(1).marketposition>=default_unit && s(1).marketposition-default_unit*2            addsellshortunit=default_unit*0.5;            totalunit=totalunit-addsellshortunit;            [~]=entryalter(k,barnum,-1,1,addsellshortunit,5,1);            % 合约号,barnum,方向,开关,手数,出场,策略        end;    end;    %---------------------------入场操作--------------------------------%    %----------------策略1----------------------%    if s(1).buycon && s(1).marketposition==0        buyunit=default_unit;        totalunit=totalunit+buyunit;        [~]=entryalter(k,barnum,1,1,buyunit,default_exitway,1);        % 合约号,barnum,方向,开关,手数,出场,策略    end;        if s(1).sellshortcon && s(1).marketposition==0        sellshortunit=default_unit;        totalunit=totalunit-sellshortunit;        [~]=entryalter(k,barnum,-1,1,sellshortunit,default_exitway,1);        % 合约号,barnum,方向,开关,手数,出场,策略    end;         %{    %----------------策略2----------------------%    if s(2).buycon && s(2).marketposition==0        buyunit=default_unit;        totalunit=totalunit+buyunit;        [~]=entryalter(k,barnum,1,1,buyunit,default_exitway,2);        % 合约号,barnum,方向,开关,手数,出场,策略    end;    if s(2).sellshortcon && s(2).marketposition==0        sellshortunit=default_unit;        totalunit=totalunit-sellshortunit;        [~]=entryalter(k,barnum,-1,1,sellshortunit,default_exitway,2);        % 合约号,barnum,方向,开关,手数,出场,策略    end;      %}    %---------------------- 虚拟交易所最终执行买卖 ------------------------------%    if totalunit>0        orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,abs(totalunit),0,'market','totalbuy');    elseif totalunit<0        orderID2=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,abs(totalunit),0,'market','totalsell');    end;endend

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值