楼主: 挖矿专家
3556 2

[源码分享] 【每日一策】Matlab量化交易策略之 等分网格股票交易 [推广有奖]

  • 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:01:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略原理:
选股:10年日平均振幅最大的股票(最好大于5%)
确定网格的区间:最高点就是股票历史最高价,最低点就是股价的最低价。然后对网格进行等分,具体的间距应该由股票的日平均振幅来决定,不大于股票的日均振幅,一般为5%,也就是等分为20个小网格。
资金分配:每个网格可以交易的资金量时固定的,可以等分,为提高资金利用率可以适当减少高低位的资金分配量,酌情加到中间部分。
首次建仓:从上往下数,第几个网格就买入多少份
日常交易方法:上升到上一个网格时卖出,下降到下一个网格时买入

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

等分网格股票交易.png

策略源码:
  1. function wg1(n1) % 等分网格交易法,等比例分割网格,等比例分割资金.
  2. %获取目标资产信息
  3. targetList = traderGetTargetList(); % 在RunBackTest中选择好的标的.
  4. %获取账户信息
  5. HandleList = traderGetHandleList();
  6. %=================================================================
  7. % 定义持有的账户为全局变量
  8. global wg;
  9. if isempty(wg)
  10.     for i=1:length(targetList)
  11.         wg(i).now=0;
  12.         wg(i).last=0;
  13.         wg(i).openbar=0;
  14.     end
  15. end
  16. % 金额
  17. initial=100000000/length(targetList); % 为每只股票的总资金
  18. initialeach=initial/20; % 为每只股票每个网格的资金

  19. % 画出每只股票的网格grid,一共分为20个格子
  20. grid=zeros(21,length(targetList));
  21. for i=1:length(targetList)
  22.     for j=1:21
  23.         grid(j,i)=targetList(i).High-(j-1)*(targetList(i).High-targetList(i).Low)/20;
  24.     end
  25. end
  26. k=n1;
  27. %------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  28. for i = 1:length(targetList) % 每个股票过一遍
  29.     % lags为策略需要往前获取多少天
  30.     lags=3;
  31.     %策略中每次取数据的长度
  32.     barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code); % K线的序号,后面会增加,前面的值对应的日期固定.
  33.     % 数据长度限制,排除了前lags根k线
  34.     if(barnum<lags)
  35.         continue;
  36.     end
  37.    
  38.     % 策略开始部分
  39.     [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',1, 0-lags, 0,false,'FWard');
  40.     if length(close)<3
  41.         continue;
  42.     end
  43.     if time(end)>=datenum('1-Jan-2009')
  44.         if length(close)<3
  45.             continue;
  46.         end
  47. %------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  48.         [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
  49.         % 跑到网格外面去不操作
  50.         if ((close(end)>grid(1,i)) || (close(end)<grid(21,i))) && marketposition>0;
  51.             orderID1=traderSell(HandleList(1),targetList(i).Market,targetList(i).Code,'all',0,'market','sell1');
  52.             continue;
  53.         end
  54.         
  55.         % 给每个bar定位
  56.         for j=1:21
  57.             if close(end)<grid(j,i) && close(end)>grid(j+1,i)
  58.                 wg(i).now=j;
  59.             end
  60.             if close(end-1)<grid(j,i) && close(end-1)>grid(j+1,i)
  61.                 wg(i).last=j;
  62.             end
  63.         end
  64.         if marketposition ==0 && close(end)<grid(1,i) && close(end)>grid(21,i); % 第一次买入
  65.             sharenum=floor(initialeach*wg(i).now/close(end));
  66.             orderID1=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy1'); % 开多单
  67.             if orderID1~=0
  68.                 wg(i).openbar=barnum;
  69.             end
  70.         end
  71.         % 涨到上一个网格就卖,跌到下一个网格就买
  72.         buy=wg(i).now>wg(i).last;
  73.         sell=wg(i).now<wg(i).last;
  74.         
  75.         if marketposition>0 && barnum> wg(i).openbar && buy
  76.             sharenum=floor(initialeach*(-wg(i).last+wg(i).now)/close(end));
  77.             orderID1=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy2'); % 开多单
  78.         end
  79.         
  80.         if marketposition>0 && barnum> wg(i).openbar && sell
  81.             sharenum=floor(initialeach*(wg(i).last-wg(i).now)/close(end));
  82.             orderID1=traderSell(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','sell1');
  83.         end
  84.         
  85.         
  86.         
  87.     end
  88. end
  89. end
复制代码

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



二维码

扫码加我 拉你入群

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

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

关键词:股票交易

沙发
ghjktdf 发表于 2017-4-6 10:30:21
感谢分享

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

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

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