政策名稱:海龜組合政策
政策思路:
以多均線構造海龜系統,采取加速因子跟蹤出場
回測曲線:

2017-2-24 11:17:21 上傳
下載下傳附件 (74.74 KB)
政策代碼:
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=150;
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;
%-------------------------交易邏輯-------------------------------%
%----------入場信号--------------------%
n1=100;
p=0.015;
mclose=close(end-n1:end-1);
midvalue=mean(mclose);
upvalue=midvalue*(1+p);
dnvalue=midvalue*(1-p);
con1=0;
for i=1:length(mclose)
if mclose(i)>upvalue || mclose(i)
con1=1;
end;
end;
s(1).buycon=close(end)>max(mclose);
s(1).sellshortcon=close(end)
ma0=ma(close,5);
ma1=ma(close,20);
ma2=ma(close,50);
s(2).buycon=ma0(end)>ma1(end) && ma0(end-1)ma2(end);
s(2).sellshortcon=ma0(end)ma1(end-1) && ma0(end)
%----------主動出場信号----------------%
s(1).sellcon=0;
s(1).buytocovercon=0;
s(2).sellcon=0;
s(2).buytocovercon=0;
%------------被動出場操作------------------%
%找到未平倉的訂單
remain=remainorder(entry,k);
%對未平倉的訂單進行平倉判斷及操作
for i=1:length(remain.entrybar);
% 進倉以來的bar個數
barsinceentry=barnum-remain.entrybar(i);
backlen=10; % 回溯的長度(進倉bar之前)
% 回溯的資訊提取
[backtime,backopen,backhigh,backlow,backclose,~,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-barsinceentry-backlen, 0,false,'FWard');
% 根據出場方式計算出場條件
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);
elseif remain.entryexitway(i)==5;
initialATRparam=1.4;
AF=0.02;
minATRparam=1;
[longstopcon,shortstopcon,exitline]=exit2(backopen,backhigh,backlow,backclose,remain.entrydirection(i),backlen,initialATRparam,AF,minATRparam);
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(2).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(2).marketposition);
% 把已經平掉的訂單的開關關掉
for j=1:length(s(1).num)
entry.record{k}(remain.num(s(1).num(j)))=0;
end;
end;
%----------------政策2----------------------%
if s(2).sellcon && s(2).marketposition>0
totalunit=totalunit-s(2).marketposition;
% 把已經平掉的訂單的開關關掉
for j=1:length(s(2).num)
entry.record{k}(remain.num(s(2).num(j)))=0;
end;
end;
if s(2).buytocovercon && s(2).marketposition<0
totalunit=totalunit+s(2).marketposition;
% 把已經平掉的訂單的開關關掉
for j=1:length(s(2).num)
entry.record{k}(remain.num(s(2).num(j)))=0;
end;
end;
%}
%---------------------------加倉--------------------------------%
%再次找到未平倉的訂單
remain=remainorder(entry,k);
% 找到政策i的marketposition
s=mptaking(s,remain);
% 找到最近的加倉點和加倉價格
%----------------政策1----------------------%
if s(1).marketposition~=0;
lastentrybar=max(remain.entrybar(s(1).num));
lastbarsinceentry=barnum-lastentrybar;
lastentryprice=open(end-lastbarsinceentry+1);
vector=remain.entrydirection(s(1).num);
lastdirection=vector(end);
TRvalue=TR(close,high,low);
ATR=ma(TRvalue,10);
s(1).addbuycon=0;
s(1).addsellshortcon=0;
if lastdirection>0
s(1).addbuycon=close(end)-lastentryprice>ATR(end);
elseif lastdirection<0
s(1).addsellshortcon=lastentryprice-close(end)>ATR(end);
end;
%---------------加倉操作-------------------------%
if s(1).addbuycon && s(1).marketposition>=2 && s(1).marketposition<4
addbuyunit=1;
totalunit=totalunit+addbuyunit;
[~]=entryalter(k,barnum,1,1,addbuyunit,5,1);
% 合約号,barnum,方向,開關,手數,出場,政策
end;
if s(1).addsellshortcon && s(1).marketposition<=-2 && s(1).marketposition>-4
addsellshortunit=1;
totalunit=totalunit-addsellshortunit;
[~]=entryalter(k,barnum,-1,1,addsellshortunit,5,1);
% 合約号,barnum,方向,開關,手數,出場,政策
end;
end;
更多免費政策源碼下載下傳,請登入atrader社群-政策服務下載下傳~