选股:10年日平均振幅最大的股票(最好大于5%)
确定网格的区间:最高点就是股票历史最高价,最低点就是股价的最低价。然后对网格进行等分,具体的间距应该由股票的日平均振幅来决定,不大于股票的日均振幅,一般为5%,也就是等分为20个小网格。
资金分配:每个网格可以交易的资金量时固定的,可以等分,为提高资金利用率可以适当减少高低位的资金分配量,酌情加到中间部分。
首次建仓:从上往下数,第几个网格就买入多少份
日常交易方法:上升到上一个网格时卖出,下降到下一个网格时买入
回测曲线(由Auto-trader提供回测报告)
策略源码:
- function wg1(n1) % 等分网格交易法,等比例分割网格,等比例分割资金.
- %获取目标资产信息
- targetList = traderGetTargetList(); % 在RunBackTest中选择好的标的.
- %获取账户信息
- HandleList = traderGetHandleList();
- %=================================================================
- % 定义持有的账户为全局变量
- global wg;
- if isempty(wg)
- for i=1:length(targetList)
- wg(i).now=0;
- wg(i).last=0;
- wg(i).openbar=0;
- end
- end
- % 金额
- initial=100000000/length(targetList); % 为每只股票的总资金
- initialeach=initial/20; % 为每只股票每个网格的资金
- % 画出每只股票的网格grid,一共分为20个格子
- grid=zeros(21,length(targetList));
- for i=1:length(targetList)
- for j=1:21
- grid(j,i)=targetList(i).High-(j-1)*(targetList(i).High-targetList(i).Low)/20;
- end
- end
- k=n1;
- %------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- for i = 1:length(targetList) % 每个股票过一遍
- % lags为策略需要往前获取多少天
- lags=3;
- %策略中每次取数据的长度
- barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code); % K线的序号,后面会增加,前面的值对应的日期固定.
- % 数据长度限制,排除了前lags根k线
- if(barnum<lags)
- continue;
- end
-
- % 策略开始部分
- [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',1, 0-lags, 0,false,'FWard');
- if length(close)<3
- continue;
- end
- if time(end)>=datenum('1-Jan-2009')
- if length(close)<3
- continue;
- end
- %------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
- % 跑到网格外面去不操作
- if ((close(end)>grid(1,i)) || (close(end)<grid(21,i))) && marketposition>0;
- orderID1=traderSell(HandleList(1),targetList(i).Market,targetList(i).Code,'all',0,'market','sell1');
- continue;
- end
-
- % 给每个bar定位
- for j=1:21
- if close(end)<grid(j,i) && close(end)>grid(j+1,i)
- wg(i).now=j;
- end
- if close(end-1)<grid(j,i) && close(end-1)>grid(j+1,i)
- wg(i).last=j;
- end
- end
- if marketposition ==0 && close(end)<grid(1,i) && close(end)>grid(21,i); % 第一次买入
- sharenum=floor(initialeach*wg(i).now/close(end));
- orderID1=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy1'); % 开多单
- if orderID1~=0
- wg(i).openbar=barnum;
- end
- end
- % 涨到上一个网格就卖,跌到下一个网格就买
- buy=wg(i).now>wg(i).last;
- sell=wg(i).now<wg(i).last;
-
- if marketposition>0 && barnum> wg(i).openbar && buy
- sharenum=floor(initialeach*(-wg(i).last+wg(i).now)/close(end));
- orderID1=traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','buy2'); % 开多单
- end
-
- if marketposition>0 && barnum> wg(i).openbar && sell
- sharenum=floor(initialeach*(wg(i).last-wg(i).now)/close(end));
- orderID1=traderSell(HandleList(1),targetList(i).Market,targetList(i).Code,sharenum,0,'market','sell1');
- end
-
-
-
- end
- end
- end
更多免费策略源码下载请登录DigQuant社区-策略资源下载~


雷达卡


京公网安备 11010802022788号







