這一篇講的是如何把交易系統的倉位訊號在結算日清空部位,但是在隔天建立同方向且口數相同的訊號。也就是說,如果你的交易系統是屬於持有口數會變化的那種的話,就會需要(適用)以下這種方式。
這個方式會讓你的系統有結算日當天最後一根的K棒沒有部位,因為每個人所採用的週期時間不同,所以清空部位的時間就不一樣,我不是定個時間來清倉的,當然你可以因應自己的需要想想用定時的方式該怎麼做?別忘了結算日當天的 01:30 期貨連續圖就不會再有報價喔!所以...想落跑要趁早 XD
首先,我們需要先在宣告兩個變數,一個用來記錄目前分線是當天的第幾根K棒,名稱就取做 K,另外還需要用來記錄在面臨結算時系統的未平倉口數 N。CheckDay 是用來判斷結算日的函數。
Var:K(1),N(0);
K = iff( D>D[1], 1, K+1 );
然後接上這個換倉用的程式碼在你的程式尾端。
HTS版:
//跨月換倉
N=abs(CurrentContracts)
if CheckDay then
if K=(300/BarInterval)-1 then
ExitLong ("多換") next bar at Market
ExitShort ("空換") next bar at Market
end if
if K=(300/BarInterval) and BarsSinceExit(0)=0 then
if EntryType(0)>0 then
Buy ("換多") N[1] Share next bar at Market
else
Sell ("換空") N[1] Share next bar at Market
end if
end if
end if
MultiCharts版:
//OverMonth Change
M=CurrentContracts;
PositionWay=MarketPosition;
if CheckDay then begin
if K=(300/BarInterval)-1 then begin
Sell ("L_C") next bar Market;
BuyToCover ("S_C") next bar Market;
end;
if K=(300/BarInterval) and BarsSinceExit(1)=0 and PositionWay[1]>0 then
Buy ("C_L") M[1] Share next bar at Market;
if K=(300/BarInterval) and BarsSinceExit(1)=0 and PositionWay[1]<0 then
SellShort ("C_S") M[1] Share next bar at Market;
end;
再來讓我們看看這樣做的效果。這個是結算當日系統本來有 1口空單,我們在結算日最後一根的開盤價出場,空手等到隔天的開盤建立 1口空單以延續本來的系統部位。
這是結算日當天系統有 2口空單,在結算日最後一根的開盤平倉,空手等到隔天開盤建立 2口空單。
而且這是可以接在自動下單去執行的。
對了,當你要使用這個套件時,還必須檢查你的進場條件會不會受這個出場的動作影響?比如一開盤就有可能觸發 STOP 價格的,在跨月的時候,進場條件的合理性?
==============
我個人後來處理跨月價差的問題,採用的是結算日當天抱單抱到參與結算(不會有出場的滑價),隔天按原部位原方向進場的話,程式碼(MultiCharts)如下:
value99=marketposition; value98=currentcontracts;
if _CheckDay and sessionlastbar then begin
setexitonclose;
if value99>0 then buy ("cB") value98 share next bar market;
if value99<0 then sellshort ("cS") value98 share next bar market;
end;