开盘30分钟内不交易。
取开盘价上下0.5*atr为上下轨,突破上轨做多,突破下轨做空。
Atr止盈止损
回测曲线(由Auto-trader提供回测报告)
策略源码:
- function volbreak(Freq,ShareNum,StartTime,thr)
- % ------------ Retrace Strategy-------------------%
- % Freq 为输入时间频率
- % StartTime 计算开盘多少分钟的最高点
- %---------------------策略初始化与是否日内平仓---------------%
- global daynum;
- global newday;
- traderDailyCloseTime(145500);
- targetList = traderGetTargetList();
- HandleList = traderGetHandleList();
- barnum=traderGetCurrentBar(targetList(1).Market,targetList(1).Code);
- if(barnum==1)
- daynum = 1;
- end
- [~,~,~,~,Dclose,~,~,~] = traderGetKData(targetList(1).Market,targetList(1).Code,'day',1, 1-barnum, 0,true,'FWard');
- if daynum<length(Dclose)
- daynum = daynum+1;
- newday = 1;
- else
- newday = newday+1;
- end
- [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code);
- %---------------------策略提取数据---------------%
- global s;
- n = length(targetList);
- for j = 1:n
- end
- len = 500;
- [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq, 0-len, 0,false,'FWard');
- if length(close)<len+1
- return
- end
- dlen = 10;
- [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'day',1, 0-dlen, 0,false,'FWard');
- if length(Dclose)<dlen+1
- return
- end
- [atr,~] = traderATR(10,targetList(1).Market,targetList(1).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR
-
- %---------------------策略计算与基本逻辑---------------%
-
- p = newday;
- p
- s(j).condition = 0;
- if p*Freq>=StartTime
- if close(end)-close(end-p+1)>thr*atr(end)
- s(j).condition = 1;
- end
- if close(end)-close(end-p+1)<-thr*atr(end)
- s(j).condition = -1;
- end
-
- %----------------------策略主体-------------------------------%
-
- % 入场
- if marketposition==0
- if s(j).condition == 1
- OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
- if OrderID~=0
- s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
- s(j).peak=0;
- end
- elseif s(j).condition == -1
- OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
- if OrderID~=0
- s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
- s(j).peak=0;
- end
- end
- end
- % 出场
- if marketposition>0
- if close(end)<s(j).openprice-0.5*atr(end) || close(end)-s(j).openprice>0.8*atr(end) % 止盈止损
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
- end
- if s(j).condition==-1
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,-ShareNum,0,'market','close'); % 反手开空
- end
- if s(j).peak==0 && (close(end)-s(j).openprice)>0.3*atr(end) % 上移止损线到开仓位置
- s(j).peak = s(j).openprice;
- end
- if s(j).peak>0
- if close(end)<s(j).peak
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
- end
- end
- end
- if marketposition<0
- if close(end)>s(j).openprice+0.5*atr(end) || close(end)-s(j).openprice<-0.8*atr(end)
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
- end
- if s(j).condition==1
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','close');
- end
- if s(j).peak==0 && (s(j).openprice-close(end))>0.3*atr(end) % 上移止损线到开仓位置
- s(j).peak=s(j).openprice;
- end
- if s(j).peak>0
- if close(end)>s(j).peak
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
- end
- end
- end
- end
- end
更多免费策略源码下载请登录DigQuant社区-策略资源下载~