楼主: 挖矿专家
3724 4

[源码分享] 【每日一策】Matlab量化交易策略之 Aberration + 等权重资金配置 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

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

楼主
挖矿专家 发表于 2017-3-24 18:30:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
相对于 Aberration 加入了等权重资金配置和一些其他止损操作。

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

Aberration+等权重资金配置.png

策略源码:


  1. function Aberration(bInit,bDayBegin,cellPar)%
  2. %% 函数说明
  3. %  上面的三个参数是一种固定结构。
  4. %  当在调用该函数如 DualThrust(a1,a2,a3,a4,a5,...).所有的参数都会被赋值给cellPar,即cellPar={a1,a2,a3,a4,a5,...}
  5. %  bInit,在策略逻辑运行前为1,类似优矿等平台的initialize函数。当开始判断是否下单后,该变量为0.
  6. %  bDayBegin 在一天的第一根Bar为1,其他时刻为0

  7. %% 外部和全局参数声明,这是一个固定结构.
  8. global g_idxKDay; % 注册日数据的index.日数据是分钟数据的合成.如在日中获取,当日的数据仅是当日已出现数据的合成,不包含之后的数据。
  9. global g_idxSignal;
  10. global holdTime; % 持仓时间
  11. n=cellPar{1};
  12. r = cellPar{2};
  13. stopgap1 = cellPar{3};
  14. stopgap2 = cellPar{4};
  15. %% 初始化回测帐户
  16. if bInit
  17.     traderSetParalMode(false);%默认是true,因子计算函数并行执行,速度快,不能调试,false串行执行可以设断点调试
  18.     g_idxKDay = traderRegKData('day',1);% 只有注册之后才能获取数据。分钟数据的获取方法为 traderRegKData('min',1)。后面的数字是刷新频率。
  19.     g_idxSignal = traderRegUserIndi(@getSignal,{g_idxKDay,n,r}); %计算因子。调用需要函数如getRange,大括号内是输入参数
  20.     holdTime = containers.Map;
  21.     %% 交易逻辑
  22. else
  23.     targetList = traderGetTargetList(); % 获取标的信息。
  24.     TLen = length(targetList);
  25.     dSignal = traderGetRegUserIndi(g_idxSignal,1);
  26.     [mp,~,AvgPrice]=traderGetAccountPositionV2(1,1:TLen);
  27.     % ――――――――――――――――――调仓―――――――――――――――――――
  28.     dataDay = traderGetRegKData(g_idxKDay,1,false);
  29.     if isempty(dataDay)
  30.         return
  31.     end
  32.    
  33.     [ValidCash,MarketCap,~,~,~] =traderGetAccountInfoV2(1);
  34.     len = max(length(mp(mp==0)),1);
  35.     percash = min(ValidCash/len,MarketCap/TLen);
  36.     prices = dataDay(5:8:end,end);
  37.     CAPChange = mp.*(AvgPrice-prices);
  38.     COST=abs(mp).*AvgPrice;
  39.    
  40.     if sum(CAPChange(~isnan(prices)))>sum(COST(~isnan(prices)))*stopgap2
  41.         for i=1:TLen
  42.             if mp(i)~=0
  43.                 traderPositionToV2(1,i,0,0,'market','close');
  44.             end
  45.         end
  46.         return;
  47.     end
  48.    
  49.    
  50.     for i=1:TLen
  51.         % 数据长度足够;数据非空;当日的成交价不为0;当日高低不同
  52.         if isnan(dSignal(i,end))|| isnan(dataDay(6+8*(i-1),end)) || dataDay(6+8*(i-1),end) ==0
  53.             continue;
  54.         end
  55.         %% 平仓
  56.         if mp(i)~= 0 && (mp(i)*dSignal(i,end)<=0 || sign(mp(i))*(AvgPrice(i)-dataDay(5+8*(i-1),end))>AvgPrice(i)*stopgap1)
  57.             traderPositionToV2(1,i,0,0,'market','close');
  58.         end
  59.                
  60.         %% 开仓及加仓信号
  61.         coef = traderGetFutureInfoV2(i);
  62.         amount = floor(percash/coef/dataDay(5+8*(i-1),end));
  63.         if amount < 1
  64.             continue;
  65.         end
  66.         
  67.         if mp(i)<= 0 && dSignal(i,end)==1
  68.             traderBuyV2(1,i,amount,0,'market','buy1');%开多单
  69.         elseif mp(i)>= 0 && dSignal(i,end)==-1
  70.             traderSellShortV2(1,i,amount,0,'market','buy1');%开空单
  71.         end
  72.     end
  73. end
  74. end



  75. %% 计算因子的自定义函数
  76. function value=getSignal(cellPar,bpPFCell)
  77. %调用该函数的参数将会全部被赋给cellPar
  78. %bpPFCell为一个时间序列,标记特定的刷新时刻

  79. %%%参数声明
  80. idxK =cellPar{1};
  81. n = cellPar{2};
  82. r = cellPar{3};
  83. %%%函数计算
  84. [targetNum,~]=size(idxK);
  85. value = nan(1,targetNum*2);
  86. for i=1:targetNum
  87.     regKMatrix = traderGetRegKData(idxK(i,:),n+10,false,bpPFCell);
  88.     regKMatrix(:,any(isnan(regKMatrix),1))=[];
  89.     [~,KLen]=size(regKMatrix);
  90.     if KLen<n+1
  91.         continue;
  92.     end
  93.     closeNow = regKMatrix(5,end);
  94.     closePre = regKMatrix(5,end-1);
  95.     meanNow = mean(regKMatrix(5,end-n+1:end));
  96.     meanPre = mean(regKMatrix(5,end-n:end-1));
  97.     stdNow = std(regKMatrix(5,end-n+1:end),1);
  98.     stdPre = std(regKMatrix(5,end-n:end-1),1);
  99.    
  100.     if closeNow>meanNow+r*stdNow && closePre<meanPre+r*stdPre && mean(regKMatrix(6,:))>100
  101.         value(i)=1;
  102.     elseif closeNow<meanNow-r*stdNow && closePre>meanPre-r*stdPre && mean(regKMatrix(6,:))>100
  103.         value(i) = -1;
  104.     elseif closeNow<meanNow
  105.         value(i) = -2;
  106.     elseif closeNow > meanNow
  107.         value(i) = 2;
  108.     end
  109. end
  110. end
复制代码



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



二维码

扫码加我 拉你入群

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

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

关键词:软件

Aberration+等权重资金配置.png (139.7 KB)

Aberration+等权重资金配置.png

沙发
ghjktdf 发表于 2017-3-28 10:16:39
资金配置的策略很少见

藤椅
3862161 在职认证  发表于 2017-3-28 11:53:46
策略代码 那么乱  看的头都大了

板凳
magnatezq 发表于 2017-3-28 22:50:08
是啊,太乱,没看明白

报纸
挖矿专家 发表于 2017-3-29 13:18:19
代码重新用编辑器整了一下

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

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