700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python均线斜率_【每日一策】Matlab量化交易策略之 均线拐头配合出场

python均线斜率_【每日一策】Matlab量化交易策略之 均线拐头配合出场

时间:2020-03-04 04:32:37

相关推荐

python均线斜率_【每日一策】Matlab量化交易策略之  均线拐头配合出场

function Strategy1(default_unit,default_exitway,freq)%

targetList = traderGetTargetList();

%获取目标资产信息

HandleList = traderGetHandleList();

%获取账户句柄

global entry;

for k=1:length(targetList);

%--------------------仓位、K线、当前bar的提取-----------------------------%

%获取当前仓位

[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);

%策略中每次取数据的长度

dlags=10;

lags=100;

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');

if length(close)

continue;

end

% 虚拟交易所初始手数

totalunit=0;

%-------------------------交易逻辑-------------------------------%

%----------入场信号--------`------------%

ma0=ma(close,60);

slope0=slope(ma0,5);

s(1).buycon=slope0(end)>3 && mean(slope0(end-5:end))>0 && mean(slope0(end-10:end-5))<0;

s(1).sellshortcon=slope0(end)0;

%----------主动出场信号----------------%

s(1).sellcon=0;

s(1).buytocovercon=0;

% s(1).sellcon=close(end)upline(end-1);

% s(1).buytocovercon=close(end)>dnline(end) && close(end-1)

%------------被动出场操作------------------%

%找到未平仓的订单

remain=remainorder(entry,k);

%对未平仓的订单进行平仓判断及操作

for i=1:length(remain.entrybar);

% 进仓以来的bar个数

barsinceentry=barnum-remain.entrybar(i);

backlen=30; % 回溯的长度(进仓bar之前)

% 回溯的信息提取

[backtime,backopen,backhigh,backlow,backclose,~,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-barsinceentry-backlen, 0,false,'FWard');

% 根据出场方式计算出场条件

longstopcon=0;

shortstopcon=0;

if remain.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);

elseif remain.entryexitway(i)==2;

initialATRparam=2;

AF=0.02;

minATRparam=1;

[longstopcon,shortstopcon,exitline]=exit2(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,initialATRparam,AF,minATRparam);

elseif remain.entryexitway(i)==3;

[longstopcon,shortstopcon,exitline]=exit3(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen);

elseif remain.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);

end;

% 出场执行

if longstopcon

totalunit=totalunit-remain.entryunit(i);

entry.record{k}(remain.num(i))=0;

end;

if shortstopcon

totalunit=totalunit+remain.entryunit(i);

entry.record{k}(remain.num(i))=0;

end;

end;

%------------------- 主动出场操作 --------------------%

% %再次找到未平仓的订单

remain=remainorder(entry,k);

% 找到策略i的marketposition

s=mptaking(s,remain);

%----------------策略1----------------------%

if s(1).sellcon && s(1).marketposition>0

totalunit=totalunit-abs(s(1).marketposition);

% 把已经平掉的订单的开关关掉

for j=1:length(s(1).num)

entry.record{k}(remain.num(s(1).num(j)))=0;

end;

end;

if s(1).buytocovercon && s(1).marketposition<0

totalunit=totalunit+abs(s(1).marketposition);

% 把已经平掉的订单的开关关掉

for j=1:length(s(1).num)

entry.record{k}(remain.num(s(1).num(j)))=0;

end;

end;

%---------------------------入场操作--------------------------------%

%再次找到未平仓的订单

remain=remainorder(entry,k);

% 找到策略i的marketposition

s=mptaking(s,remain);

%----------------策略1----------------------%

if s(1).buycon && s(1).marketposition==0

buyunit=default_unit;

totalunit=totalunit+buyunit;

[~]=entryalter(k,barnum,1,1,buyunit,default_exitway,1);

% 合约号,barnum,方向,开关,手数,出场,策略

end;

if s(1).sellshortcon && s(1).marketposition==0

sellshortunit=default_unit;

totalunit=totalunit-sellshortunit;

[~]=entryalter(k,barnum,-1,1,sellshortunit,default_exitway,1);

% 合约号,barnum,方向,开关,手数,出场,策略

end;

%---------------------- 虚拟交易所最终执行买卖------------------------------%

if totalunit>0

orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,abs(totalunit),0,'market','totalbuy');

elseif totalunit<0

orderID2=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,abs(totalunit),0,'market','totalsell');

end;

end

end

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