楼主: 挖矿专家
1428 6

[源码分享] 【每日一策】Matlab量化交易策略之 SixLine [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

楼主
挖矿专家 发表于 2017-3-20 16:19:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
交易规则与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社区-策略资源页面下载~




二维码

扫码加我 拉你入群

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

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


已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 66 + 66 精彩帖子

总评分: 经验 + 66  论坛币 + 66   查看全部评分

沙发
65425856 发表于 2017-3-20 17:59:07
这是一个系列吗?

藤椅
ghjktdf 发表于 2017-3-21 12:22:58
哈哈,456

板凳
peppep 发表于 2017-3-21 16:34:44
期待下一篇~~已关注楼主~~~

报纸
ghjktdf 发表于 2017-3-22 10:15:06
楼主好人~

地板
ydc129 发表于 2017-3-29 22:18:50
谢谢分享

7
ghjktdf 发表于 2017-4-1 10:42:15
感谢楼主分享

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-28 07:06