2010年4月15日 星期四

This bar at Close with Q_Time(下)


程式交易小學堂─期貨投機事業的王道
繼上篇 This bar at Close with Q_Time(上) 這次要來談談如何運用 Q_Time 來協助 This bar at Close 達到實際運作幾乎或是說非常接近歷史回測,我只是說"幾乎"或是"非常接近"而不是做到,也就是說這樣的手法絕大多數可以得到我們預想的結果,但是一定會成功如常運作嗎?不一定~

首先,我們先分辨一下 Time 與 Q_Time 的差異。這兩者是不一樣的,不僅僅只是同意代換字。Time 指的是 K棒的收盤時間,而Q_Time 指的則是最新 Tick 的時間,舉例以 5 分線圖來說,當盤中真實時間在09:13:08的時候,你可以在當下做個Print( Time, Q_Time ) 應該會得到 091500 091308xxxx 很明顯的,我們會得到兩個不一樣的數值。但是也會看到 Q_Time 的部份只有在最新的這根K棒有數值(不管是否已收盤),之前K棒的 Q_Time 通通是 0 !當然,之前的K棒內塞有超多 Tick ,在HTS 我猜它是乾脆就忽略掉,一律 Return... 0。

再來,This bar at Close 與 Next bar at Market,盤中運作的食物上應該是幾乎相同的,所以我們需要處理的就是每天的"最後"這1根K棒。在非結算日的日子,要處理的是 K棒時間( Time )= 134500 的這根K棒。但是因為 Q_Time 除了最新的 K棒以外,數值通通為 0 這個特性也不能忘記,否則,我們會失去了歷史上的訊號,當然~回測的部份也跟著不見。


作法如下:

if Condition XX= True and
   T=134500 and ( Q_Time >= 134440 or Q_Time = 0 ) then

Buy / Sell / ExitLong / ExitShort ..... This bar at Market


end if

是的,在這裡我寫上了 This bar at Market。有在使用自動下單機的朋友應該很清楚這是個非常危險的指令,只要在這個 IF 語句的判斷式內含有"最新價格"及其衍生的數值,同 1根K棒發生來回掃價觸發下單機高頻率的丟市價單就不是什麼新鮮事了。

而為了在將來真的可以做到所謂的收盤站上就在收盤價進/出場,這恐怕是我目前所知的必要之惡了。在條件判斷式中,加入Time=134500讓這個語句只在最後1根K棒有可能作用,並且加入 Q_Time>=134440 讓這個語句只在 134440~134500中間這10秒鐘才有作用的可能性。至於加上 or Q_Time=0 當然是為了留下這個IF語句所作動的訊號不要消失,因為明天一開盤,這根有訊號的K棒會因為 Q_Time 變成 0 而讓訊號消失的,如果你沒有加上 ( Q_Time >= 134440 or Q_Time = 0 ) 的話。


舉個實用上的例子。如果我想要在帳面虧損超過50點的狀況下,不要抱單留倉的話:

if PositionLoss(0)<= -50*PointValue and
   T=134500 and ( Q_Time >= 134440 or Q_Time = 0 ) then
  ExitLong this bar at Market
  ExitShort this bar at Market
end if



至於 This bar at Close 與 Next bar at Market 間 還會有停損或是停利上的影響,那又是另外一個題目了。

熱門文章