1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab布林算法代码 MATLAB量化交易策略源码分享之 布林通道+高低点

matlab布林算法代码 MATLAB量化交易策略源码分享之 布林通道+高低点

时间:2021-07-29 22:09:09

相关推荐

matlab布林算法代码 MATLAB量化交易策略源码分享之 布林通道+高低点

策略原理:

通过布林带以及突破后的高低点的形成产生交易信号

采取跟踪止损出场

回测曲线:

-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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。