日內(nèi)交易常用的一類策略是開(kāi)盤(pán)區(qū)間突破,它與前例的通道突破策略相似,其基本公式是:
//-------金魔方智能交易公式--------------
//例3_1 開(kāi)盤(pán)區(qū)間突破策略
//用于分鐘線周期
{策略:
1.當(dāng)日開(kāi)盤(pán)價(jià)加減指定價(jià)差形成區(qū)間
2.突破區(qū)間高點(diǎn)做多,跌破區(qū)間低點(diǎn)做空
3.當(dāng)天僅做多1次,做空1次
4.日內(nèi)交易,收盤(pán)前清倉(cāng)
}
input:
Rng(10), //區(qū)間范圍
EndTime(1400); //下午14:00以后不開(kāi)倉(cāng)
RngH: OpenD(0) + Rng;
RngL: OpenD(0) - Rng;
if Time < EndTime*100 then begin
if EntriesToday(Date,MP_LONG)<1 then
Buy('', 2, RngH, -1, OT_STOP);
if ExitsToday(Date,MP_SHORT)<1 then
SellShort('', 2, RngL, -1, OT_STOP);
end;
SetExitOnClose;
{
注解:
1.OpenD(0)返回當(dāng)日開(kāi)盤(pán)價(jià),這套函數(shù)在日內(nèi)交易時(shí)方便常用;
2.EntriesToday(Date,MP_LONG)取得當(dāng)天多頭開(kāi)倉(cāng)次數(shù),MP_LONG 是值為1的宏;
3.ExitsToday (Date,MP_SHORT)取得當(dāng)天空頭平倉(cāng)次數(shù),MP_SHORT 是值為-1的宏;
4.SetExitOnClose用于在收市時(shí)清倉(cāng),歷史測(cè)評(píng)時(shí)以收盤(pán)價(jià)作為平倉(cāng)價(jià),自動(dòng)交易時(shí)在收市前若干秒平倉(cāng),可在【策略設(shè)置】中設(shè)置,默認(rèn)在收市前60秒清倉(cāng)。
}
如圖所示,該策略以當(dāng)日開(kāi)盤(pán)價(jià)加減由Rng參數(shù)指定的范圍,形成一個(gè)區(qū)間,當(dāng)價(jià)格突破區(qū)間時(shí)進(jìn)場(chǎng)交易,收盤(pán)時(shí)清倉(cāng)不過(guò)夜。
上例的區(qū)間范圍Rng是個(gè)常數(shù),不能適應(yīng)市場(chǎng)變動(dòng),所以Rng通常用各種算法得到,例如,著名的Dual Thrust系統(tǒng)曾長(zhǎng)期在交易系統(tǒng)排行榜名列三甲,其原始公式應(yīng)用于日線周期,不太能如實(shí)反映日內(nèi)波動(dòng),我們把它改造為應(yīng)用于分鐘周期的策略:
//-------金魔方智能交易公式--------------
//例3_2 Dual Thrust日內(nèi)策略
//用于1分鐘-15分鐘周期
{策略:
1.根據(jù)前幾日的波動(dòng)范圍動(dòng)態(tài)調(diào)整開(kāi)盤(pán)區(qū)間
2.突破區(qū)間高點(diǎn)做多,跌破區(qū)間低點(diǎn)做空
3.可選是否持倉(cāng)過(guò)夜
}
input:
K1(0.5),K2(0.5),Mday(1),Nday(1),
ExitOnClose(1);
variable:
BarsPerDay(48), BuyRange(1000), SellRange(1000);
if BarPos = 1 then begin //只需計(jì)算1次
switch DataPeriod begin //滬深300股指期貨日周期數(shù)
case 1: BarsPerDay:=270; //1分鐘周期數(shù)/每日
case 2: BarsPerDay:=54; //5分鐘周期數(shù)/每日
case 3: BarsPerDay:=18; //15分鐘周期數(shù)/每日
end
end
Bars:= Mday*BarsPerDay;
MHH := HHV(H,Bars)[1];
MHC := HHV(C,Bars)[1];
MLL := LLV(L,Bars)[1];
MLC := LLV(C,Bars)[1];
Bars:= Nday*BarsPerDay;
NHH := HHV(H,Bars)[1];
NHC := HHV(C,Bars)[1];
NLL := LLV(L,Bars)[1];
NLC := LLV(C,Bars)[1];
if Date <> Date[1] then begin //新交易日開(kāi)始,計(jì)算區(qū)間范圍
BuyRange := Max(MHH - MLC, MHC - MLL);
SellRange := Max(NHH - NLC, NHC - NLL);
end
RngH: OpenD(0) + K1*BuyRange;
RngL: OpenD(0) - K2*SellRange;
if SessionLastBar = 0 then begin
Buy('', DEFAULT, RngH, -1, OT_STOP,OB_NEXTBAR);
SellShort('', DEFAULT, RngL, -1, OT_STOP,OB_NEXTBAR);
end
if ExitOnClose then SetExitOnClose;
{
注解:
1.用不同的參數(shù)分別設(shè)置買(mǎi)賣(mài)區(qū)間的幅度
2.BarsPerDay為1天的K線數(shù)量,只需在第1根K線時(shí)計(jì)算1次
用switch語(yǔ)句根據(jù)周期類型賦值,公式中是股指期貨的每日周期數(shù)量
3.HHV(H,Bars)[1]表示取用前一周期的指標(biāo)值
可以把之前的:=改為:進(jìn)行調(diào)試
4.SessionLastBar函數(shù)用于判斷是否是當(dāng)日最后一個(gè)周期
5.外部參數(shù)ExitOnClose控制是否做日內(nèi)交易或持倉(cāng)過(guò)夜
}
可見(jiàn),在同一時(shí)間段,本例的區(qū)間與上例相比較是動(dòng)態(tài)變化的,各位可以修改公式參數(shù)看看運(yùn)行結(jié)果。
在實(shí)際交易中,分批開(kāi)平倉(cāng)是常用的技巧,金魔方如何實(shí)現(xiàn)呢?