楼主: 挖矿专家
1455 2

[源码分享] 【每日一策】Matlab量化交易策略之 NEWS+SAR_原始 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

楼主
挖矿专家 发表于 2017-4-5 15:13:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
利用NEWS系统决定入场,利用SAR决定出场。

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

NEWS+SAR_原始.png

策略源码:
  1. function NEWS1sar(freq) %
  2. targetList = traderGetTargetList();
  3. HandleList = traderGetHandleList();
  4. global recordbar;
  5. for i=1:length(targetList)
  6.    
  7.     marketposition=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
  8.     barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);
  9.     len=100;   
  10.     dlen=100;
  11.     [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'min',freq, 0-len, 0,false,'FWard');
  12.     [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',1, 0-dlen, 0,false,'FWard');
  13.     if length(close)<len+1||length(Dclose)<dlen+1
  14.         continue;
  15.     end
  16.       
  17.     %---------------计算进场出场指标----------%
  18.    
  19.     ef=(hhigh(Dclose,20)-llow(Dclose,20))./sum(abs(Dclose(end-20:end)-Dclose(end-20)));
  20.     ef10=MA(ef,10);
  21.     hhv=hhigh(Dhigh,fix(10-(ef10(end)-0.5)*10));
  22.     llw=llow(Dlow,fix(10-(ef10(end)-0.5)*10));
  23.     con1=close(end)>hhv(end-1);%做多
  24.     con2=close(end)<llw(end-1);%做空
  25.     [sarc,sarn,pos,turn]=SAR(high,low);
  26.     N=barnum-recordbar(i);
  27.     if recordbar(i)==0
  28.         N=15;
  29.     end
  30.     N=max(N,15);
  31.     N=min(N,50);
  32.     con20=sum(pos(end-N:end-4)==-1)>=fix(N*0.8)&&sum(pos(end-3:end)==1)>=3;%空转多,反转做多
  33.     con10=sum(pos(end-N:end-4)==1)>=fix(N*0.8)&&sum(pos(end-3:end)==-1)>=3;%多转空,反转做空
  34.     shareNum=5;
  35.    if  marketposition==0
  36.         if con1
  37.             order=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','buy');%开多单
  38.              if order~=0
  39.             recordbar(i)=barnum;
  40.             end
  41.                elseif con2
  42.             order=traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','sellshort');%开空单
  43.             if order~=0
  44.             recordbar(i)=barnum;
  45.             end
  46.         end
  47.     end
  48.    
  49.     if  marketposition>0 && con10
  50.         order=traderSell(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','sell');%平多单
  51.          if order~=0
  52.         recordbar(i)=0;
  53.         end
  54.     end
  55.    
  56.     if  marketposition<0 && con20
  57.         order=traderBuyToCover(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','buytocover');%平空单
  58.         if order~=0
  59.         recordbar(i)=0;
  60.         end
  61.     end
  62. end
  63. end
  64. function ATRValue=ATR(High,Low,Close,Length)
  65. ATRValue=zeros(length(High),1);
  66. TRValue=zeros(length(High),1);
  67. 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);
  68. ATRValue=MA(TRValue,Length);
  69. end

  70. function MAValue=MA(Price,Length)
  71. MAValue=zeros(length(Price),1);
  72. for i=Length:length(Price)
  73.     MAValue(i)=sum(Price(i-Length+1:i))/Length;
  74. end
  75. MAValue(1:Length-1)=Price(1:Length-1);
  76. end
复制代码


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


二维码

扫码加我 拉你入群

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

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


Cyber Cycle.png (79.32 KB)

Cyber Cycle.png

沙发
ghjktdf 发表于 2017-4-6 10:29:16
感谢分享~

藤椅
65425856 发表于 2017-4-7 11:26:33
感谢分享

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

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