楼主: 挖矿专家
1266 1

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

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

楼主
挖矿专家 发表于 2017-3-28 15:17:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略思路:

突破唐奇安上轨,做多
突破唐奇安下轨,最空
外加atr跟踪止损

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

Donchian.png

策略源码:

  1. function Donchian(Freq,tlen1,tlen2,ShareNum)

  2. % ------------ Retrace Strategy-------------------%

  3. % Freq 为输入时间频率
  4. % tlen1 管道突破入场周期
  5. % tlen2 管道突破出场周期

  6. %---------------------策略初始化与是否日内平仓---------------%

  7. % traderDailyCloseTime(145000);     
  8. targetList = traderGetTargetList();
  9. HandleList = traderGetHandleList();


  10. %---------------------策略提取数据---------------%

  11. global s;
  12. n = length(targetList);
  13. for j = 1:n
  14.     [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(j).Market,targetList(j).Code);
  15.     len = 100;
  16.     [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'min',Freq, 0-len, 0,false,'FWard');
  17.     if length(close)<len+1
  18.         return
  19.     end
  20.     dlen = 10;
  21.     [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-dlen, 0,false,'FWard');
  22.     if length(Dclose)<dlen+1
  23.         return
  24.     end
  25.     [atr,~] = traderATR(10,targetList(j).Market,targetList(j).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR
  26.    
  27. %---------------------策略计算与基本逻辑---------------%

  28.     s(j).condition = 0;
  29.     if close(end)>max(high(end-tlen1:end-1)) && s(j).condition<=0
  30.         s(j).condition = 1;
  31.     elseif close(end)<min(low(end-tlen1:end-1)) && s(j).condition>=0
  32.         s(j).condition = -1;
  33.     end      
  34.    
  35.    
  36. %----------------------策略主体-------------------------------%
  37.    
  38.     % 入场
  39.     if marketposition==0
  40.         if s(j).condition == 1
  41.             OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
  42.             if OrderID~=0
  43.                 s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
  44.                 s(j).peak=0;
  45.             end
  46.         elseif s(j).condition == -1
  47.             OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
  48.             if OrderID~=0
  49.                 s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
  50.                 s(j).peak=0;
  51.             end
  52.         end
  53.     end
  54.    
  55.    
  56.     % 出场
  57.     if marketposition>0
  58.         if close(end)<min(low(end-tlen2:end-1)) || close(end)<s(j).openprice-2*atr(end) || open(end)-low(end)>1*atr(end)
  59.             traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  60.         end
  61.         if s(j).peak==0 && (close(end)-s(j).openprice)>3*atr(end) % 上移止损线
  62.             s(j).peak=high(end);
  63.         end
  64.         if s(j).peak>0
  65.             s(j).peak=max(s(j).peak,high(end));
  66.             if close(end)<s(j).peak-1.4*atr(end)
  67.                 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  68.             end
  69.         end
  70.     end
  71.     if marketposition<0
  72.         if close(end)>max(high(end-tlen2:end-1)) || close(end)>s(j).openprice+2*atr(end) || high(end)-open(end)>1*atr(end)
  73.             traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  74.         end
  75.         if s(j).peak==0 && (s(j).openprice-close(end))>3*atr(end) % 上移止损线
  76.             s(j).peak=low(end);
  77.         end
  78.         if s(j).peak>0
  79.             s(j).peak=min(s(j).peak,low(end));
  80.             if close(end)>s(j).peak+1.4*atr(end)
  81.                 traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
  82.             end
  83.         end
  84.     end
  85. end
  86. %----------------------自定义函数-------------------------------%
复制代码


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


二维码

扫码加我 拉你入群

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

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


Donchian.png (65.07 KB)

Donchian.png

沙发
挖矿专家 发表于 2017-3-29 10:26:34
改用了代码编辑器,好看多了~

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

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