策略原理:
通过布林带以及突破后的高低点的形成产生交易信号
采取跟踪止损出场
回测曲线:
-2-27 10:09:43 上传
下载附件 (65.41 KB)
策略代码:
functionStrategy1(default_unit,default_exitway,freq)%
targetList=traderGetTargetList();
%获取目标资产信息
HandleList=traderGetHandleList();
%获取账户句柄
globalentry;
globalrecord;
globalstopprice;
globalboll;
fork=1:length(targetList);
%--------------------仓位、K线、当前bar的提取-----------------------------%
%获取当前仓位
[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);
%策略中每次取数据的长度
dlags=10;
lags=60;
barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);
%数据长度限制
if(barnum
continue;
end
%获取K线数据
[time,open,high,low,close,volume,turnover,openinterest]=traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,0-lags,0,false,'FWard');
% [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest]=traderGetKData(targetList(k).Market,targetList(k).Code,'day',1,0-dlags,0,false,'FWard');
iflength(close)
continue;
end;
%-------------------------交易逻辑-------------------------------%
%----------入场信号--------------------%
len=30;
p=2.5;
p2=0;
percent=0.1;
percent2=0.5;
ma0=ma(close,len);
std0=stdev(close,len);
upline=ma0+p*std0;
dnline=ma0-p*std0;
upline2=ma0+p2*std0;
dnline2=ma0-p2*std0;
s(1).buycon=0;
s(1).sellshortcon=0;
ifboll.switch==0;
ifclose(end)>upline(end)
boll.num=boll.num+1;
boll.value(boll.num)=close(end);
boll.switch=1;
elseifclose(end)
boll.num=boll.num+1;
boll.value(boll.num)=close(end);
boll.switch=-1;
end;
elseifboll.switch==1;
ifclose(end)>upline(end)&&close(end)>boll.value(boll.num)
boll.value(boll.num)=close(end);
elseifclose(end)
boll.num=boll.num+1;
boll.value(boll.num)=close(end);
boll.switch=-1;
end;
elseifboll.switch==-1;
ifclose(end)
boll.value(boll.num)=close(end);
elseifclose(end)>upline(end)
boll.num=boll.num+1;
boll.value(boll.num)=close(end);
boll.switch=1;
end;
end;
iflength(boll.value)>=2;
ifrecord==1
con1=boll.value(end)
con2=close(end)>(boll.value(end-1)-boll.value(end))*percent+boll.value(end);
s(1).buycon=con1&&con2;
end;
ifrecord==-1
con3=boll.value(end)>boll.value(end-1);
con4=close(end)
s(1).sellshortcon=con3&&con4;
end;
end;
%------------被动出场操作------------------%
%找到未平仓的订单
remain=remainorder(entry,k);
%对未平仓的订单进行平仓判断及操作
fori=1:length(remain.entrybar);
%进仓以来的bar个数
longstopcon=0;
shortstopcon=0;
barsinceentry=barnum-remain.entrybar(i);
backlen=50; %回溯的长度(进仓bar之前)
%回溯的信息提取
[backtime,backopen,backhigh,backlow,backclose,~,~,~]=traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,0-barsinceentry-backlen,0,false,'FWard');
%根据出场方式计算出场条件
ifremain.entryexitway(i)==1;
AFinitial=0;
AFparam=0.02;
AFmax=0.2;
Firstbarmultp=1; %影响第一根bar的止损价,调高表示可忍受的回撤越多
[longstopcon,shortstopcon,exitline]=exit1(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,AFinitial,AFparam,AFmax,Firstbarmultp);
elseifremain.entryexitway(i)==2;
initialATRparam=3;
AF=0.1;
minATRparam=1;
[longstopcon,shortstopcon,exitline]=exit2(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,initialATRparam,AF,minATRparam);
elseifremain.entryexitway(i)==3;
[longstopcon,shortstopcon,exitline]=exit3(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen);
elseifremain.entryexitway(i)==4
startpoint=10;
percent=0.3;
TRmutlp=1;
[longstopcon,shortstopcon,exitline]=exit4(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,startpoint,percent,TRmutlp);
elseifremain.entryexitway(i)==5;
stdlen=20;
initialstdparam=3;
minstdparam=1;
AF=0.25;
[longstopcon,shortstopcon,exitline]=exit5(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,stdlen,initialstdparam,minstdparam,AF);
elseifremain.entryexitway(i)==6;
longstopcon=0;
shortstopcon=0;
sellcon=0;
buytocovercon=0;
ifremain.entrydirection(i)==1;
sellcon=high(end)>upline2(end);
longstopcon=close(end)
elseifremain.entrydirection(i)==-1
buytocovercon=low(end)
shortstopcon=close(end)>stopprice;
end;
longstopcon=longstopcon||sellcon;
shortstopcon=shortstopcon||buytocovercon;
elseifremain.entryexitway(i)==7;
ATRparam=1.5;
[longstopcon,shortstopcon,exitline]=exit7(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,len,stopprice,p2,ATRparam);
elseifremain.entryexitway(i)==8;
ATRparam=1.5;
[longstopcon,shortstopcon,exitline]=exit8(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,len,stopprice,p2,ATRparam);
% sellcon=0;
% buytocovercon=0;
% ifremain.entrydirection(i)==1;
% sellcon=high(end)>upline(end);
% longstopcon=close(end)
% elseifremain.entrydirection(i)==-1
% buytocovercon=low(end)
% shortstopcon=close(end)>stopprice.loss;
% end;
% longstopcon=longstopcon||sellcon;
% shortstopcon=shortstopcon||buytocovercon;
end;
更多免费策略二院吗下载请登录atrader社区-策略服务下载,/stra.php
下载Auto-trader软件助您成为策略开发高手,现在下载还送3年免费分时数据~
下载地址:/software.php
如果觉得《matlab布林算法代码 MATLAB量化交易策略源码分享之 布林通道+高低点》对你有帮助,请点赞、收藏,并留下你的观点哦!