收盘价站稳今天开盘价30分钟,做多;反之做空。收盘价低于今日开盘价则多头出场,反之则空头出场,或者收盘前,主动平仓。
回测曲线(由Auto-trader提供回测)
策略源码:
- function boda(freq) %
- %freq为输入频率
- %len为计算使用的长度
- %band为波动乘数
- %shareNum为操作的手数
- %%%以小博大的日内开盘突破日内策略,30分钟站稳
- targetList = traderGetTargetList();
- HandleList = traderGetHandleList();
- global p;
- % global record;
- for i=1:length(targetList)
- dlen=600;
- barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);
- marketposition=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);
- len=21;
-
- [time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'min',freq, 0-len, 0,false,'FWard');
- [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'day',1, -20, 0,false,'FWard');
- [mtime,mopen,mhigh,mlow,mclose,mvolume,mturnover,mopeninterest] = traderGetKData(targetList(i).Market,targetList(i).Code,'min',1, 0-dlen, 0,false,'FWard');
- if length(close)<len+1||length(Dclose)<21||length(mclose)<dlen+1
- continue;
- end
- %----------------------------日内策略---------------%
- gettime=datevec(mtime);
- timenum=gettime(:,4)*100+gettime(:,5);
- %------------------开盘30分钟后进行操作--------------%
- if timenum(end)<0945
- continue
- end
- %----------------------找前30分钟的位置-----------------%
- id=find(timenum>=0916&timenum<=0945,30,'last');%找最近的前30分钟数据的位置
- if length(id)<30
- continue
- end
- p{i}.price=mopen(id(1));%记录开盘价
- for k=1:length(id)
- p{i}.con=[p{i}.con,mclose(id(k))>p{i}.price];
- end
-
- %-----------------------日内策略-----------------------------------------%
- if timenum(end)>0900&&timenum(end)<1448||timenum(end)<2100&&timenum(end)>2400||timenum(end)>0000&&timenum(end)<0158
- cont=1;
- else cont=0;
- p{i}.state=0;
- p{i}.price=0;
- p{i}.con=[];
- end
- %---------------------进出场指标--------%
- con1=sum(p{i}.con)>=30&&cont;%30分钟内价格均在上方,做多
- con2=sum(p{i}.con)==0&&cont;%30分钟内价格均在下方,做空
- con10=close(end)<p{i}.price||cont==0;
- con20=close(end)>p{i}.price||cont==0;
- %----------仓位操作-----------%
- [~,~,Multiple,MinMove,~,~,~,LongMargin,~] = traderGetFutureInfo(targetList(i).Market,targetList(i).Code);
- [cash,~,~,~,~] = traderGetAccountInfo(HandleList(1));
- shareNum=cash/close(end)/LongMargin/7/Multiple;
- if marketposition==0
- if con1
- traderBuy(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','buy');%开多单
-
- elseif con2
- traderSellShort(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','sellshort');%开空单
-
- end
- end
-
- if marketposition>0 && con10
- order= traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','sell');
- end
-
- if marketposition<0 && con20
- order= traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','sell');
-
- end
- end
- end
- function ATRValue=ATR(High,Low,Close,Length)
- ATRValue=zeros(length(High),1);
- TRValue=zeros(length(High),1);
- 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);
- ATRValue=MA(TRValue,Length);
- end
- function MAValue=MA(Price,Length)
- MAValue=zeros(length(Price),1);
- for i=Length:length(Price)
- MAValue(i)=sum(Price(i-Length+1:i))/Length;
- end
- MAValue(1:Length-1)=Price(1:Length-1);
- end
更多免费策略源码下载请登录DigQuant社区-策略资源下载~


雷达卡





京公网安备 11010802022788号







