楼主: 挖矿专家
2619 3

[源码分享] 【每日一策】Matlab量化交易策略之 AD+MA+止损 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略思路:

在获得AD指标的数值后,利用其MA(5)和MA(20)的差值进行判断,如果差值由负转正,认为趋势为正,进行做多操作,反之认为趋势为负,进行做空操作。多头出场条件为此时趋势为负,空头出场条件为此时趋势为正。并利用ATR控制止损和加仓机制。

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

AD+MA+止损.png

策略源码:
  1. function ADMAlossadd(freq)
  2. targetList = traderGetTargetList();
  3. HandleList = traderGetHandleList();
  4. global record;
  5. for i=1:length(targetList)
  6.     marketposition=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
  7.     barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);
  8.     len=60;
  9.     dlen=40;
  10.     [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'min',freq, 0-len, 0,false,'FWard');
  11.     [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',1, 0-dlen, 0,false,'FWard');
  12.     if length(close)<len+1||length(Dclose)<dlen+1
  13.         continue;
  14.     end
  15.     %----------------------------------基本用法------------------------------
  16.     %1)视AD指标为领先指标,AD上升则买入,AD下降则卖出(等价于收盘价高于中
  17.     %间价则买入,收盘价低于中间价则卖出)
  18.     %2)计算Chaikin=AD的(m)日指数移动平均-AD的(n)日指数移动平均
  19.     %  Chaikin指标由负值向上穿越0轴时,为买进信号
  20.     %  Chaikin指标由正值向下穿越0轴时,为卖出信号
  21.     ad=AD(high,low,close,volume);
  22.     maad=MA(ad,5)-MA(ad,20);
  23.     con1=maad(end-1)<0&&maad(end)>=0;
  24.     con2=maad(end-1)>0&&maad(end)<=0;
  25.    
  26.     %%
  27.     %止损线
  28.     ATR=ATR(Dhigh,Dlow,Dclose,20);
  29.     %%
  30.     %满仓上移
  31.     if record{i}.m>=4
  32.         if close(end)>record{i}.entryp+2*ATR(end)&&(marketposition>0)
  33.             record{i}.entryp= record{i}.entryp+2*ATR(end);
  34.         elseif close(end)<record{i}.entryp-2*ATR(end)&&(marketposition<0)
  35.             record{i}.entrp= record{i}.entryp-2*ATR(end);
  36.         end
  37.     end
  38.    
  39.     %%
  40.     %-------------------------平仓止损--------------------%
  41.     %做多平仓
  42.     if marketposition>0&&record{i}.m~=0
  43.         if close(end)<record{i}.entryp-0.5*ATR(end)
  44.             order= traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','sell');
  45.             if order~=0
  46.                 record{i}.m=0;
  47.                 record{i}.entryp=close(end);
  48.             end
  49.         end
  50.     end
  51.    
  52.     if marketposition<0&&record{i}.m~=0
  53.         if close(end)>record{i}.entryp+0.5*ATR(end)
  54.             order= traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','sell');
  55.             if order~=0
  56.                 record{i}.m=0;
  57.                 record{i}.entryp=close(end);
  58.             end
  59.         end
  60.     end
  61.     %%
  62.     %入场
  63.     sharenum=1;
  64.     %---------------入场-------------%
  65.     if con1&&(record{i}.m==0)&&(marketposition==0)
  66.         order=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy'); %%%%做多
  67.         if order~=0
  68.             record{i}.m= record{i}.m+1;
  69.             record{i}.entryp=close(end);
  70.         end
  71.     end
  72.    
  73.     if con2&&(record{i}.m==0)&&(marketposition==0)
  74.         order=traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy'); %%%%做多
  75.         if order~=0
  76.             record{i}.m= record{i}.m+1;
  77.             record{i}.entryp=close(end);
  78.         end
  79.     end
  80.     %%
  81.     %-----------------加仓----------------%
  82.     if  close(end)>record{i}.entryp+2*ATR(end)&&(record{i}.m<4)&&(marketposition>0)
  83.         order=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy'); %%%%做多
  84.         if order~=0
  85.             record{i}.m= record{i}.m+1;
  86.             record{i}.entryp=close(end);
  87.         end
  88.     end
  89.    
  90.     if  close(end)<record{i}.entryp-2*ATR(end)&&(record{i}.m<4)&&(marketposition<0)
  91.         order=traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy'); %%%%做多
  92.         if order~=0
  93.             record{i}.m= record{i}.m+1;
  94.             record{i}.entryp=close(end);
  95.         end
  96.     end
  97.    
  98.    
  99. end
  100. end
  101. function ATRValue=ATR(High,Low,Close,Length)
  102. ATRValue=zeros(length(High),1);
  103. TRValue=zeros(length(High),1);
  104. TRValue(2:end)=max([High(2:end)-Low(2:end) abs(High(2:end)-Close(1:end-1)) abs(Low(2:end)-Close(1:end-1))],[],2);
  105. ATRValue=MA(TRValue,Length);
  106. end

  107. function MAValue=MA(Price,Length)
  108. MAValue=zeros(length(Price),1);
  109. for i=Length:length(Price)
  110.     MAValue(i)=sum(Price(i-Length+1:i))/Length;
  111. end
  112. MAValue(1:Length-1)=Price(1:Length-1);
  113. end
复制代码


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


二维码

扫码加我 拉你入群

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

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


已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 33 + 33 + 3 + 3 + 3 精彩帖子

总评分: 经验 + 33  论坛币 + 33  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

沙发
ghjktdf 发表于 2017-3-31 18:31:45 |只看作者 |坛友微信交流群

使用道具

藤椅
林三岁 发表于 2017-4-30 15:48:53 |只看作者 |坛友微信交流群
请问执行代码是什么?

使用道具

板凳
挖矿专家 发表于 2017-5-3 14:57:54 |只看作者 |坛友微信交流群
林三岁 发表于 2017-4-30 15:48
请问执行代码是什么?
网站上可以直接下载的,你搜一下就好

使用道具

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

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 01:54