首先是下一根 k 線進出場,那為什麼需要等到下一根 k 線呢?因為在盤中的時候,k 線是會一直跳動的…所以如果不是等待 k 線收完線就立刻進場,那可能會因為 k 線跳動的情況使得成立的條件又消失了。
所以會有以下的程式碼:
buy next bar at market;
sell next bar at market;
exitlong next bar at market;
exitshort next bar at market;
這樣的程式分別代表:
在下一根 k 線開盤買進。
在下一根 k 線開盤賣出。
在下一根 k 線開盤多單出場。
在下一根 k 線開盤空單出場。
那如果希望能夠用 this bar 的方式呢? TradeStation 2000i 只支援 this bar at close 的方式,也就是進出場在目前這根 k 線的收盤價。
不過其實在交易執行的過程中…程式是沒辦法知道 k 線什麼時候才算收盤的…所以它的判斷方式還是需等待下一根 k 線出場後,它才知道原來上一根 k 線已經收線了。
也就是 next bar at market 其實是和 this bar at close 是一樣的。只是在 k 線圖上面標示的進出場點位會不同而已。這點還請特別注意一下…因為有時候收盤價你是買不到的,以日線程式來說…你程式寫著你要進場在今天的收盤價,可是你必需等待明天開盤後才知道原來今天已經收盤了。所以其實你能進場的價位是在明天的開盤價。
不過程式回測卻是把你進場的點位標示在今天的收盤價,所以這就會產生了回測時候績效是錯誤的情況了。
再來就是,如果我希望是觸點就進出場的話呢?那就必需用到 stop 或是 limit 了。關於 stop 和 limit 的分別…請先參考一下:搞清楚 Stop 和 Limit
這個部份在進出場的話會寫成這樣:
buy next bar at 9000 stop;
sell next bar at 6000 stop;
exitlong next bar at 9000 stop;
exitshort next bar at 6000 stop;
等…分別代表著:
從下一根 k 線開始觸價 9000 點買進。
從下一根 k 線開始觸價 6000 點賣出。
從下一根 k 線開始觸價 9000 點多單出場。
從下一根 k 線開始觸價 6000 點空單出場。
當然你可以把 9000 或 6000 等固定的點位在程式內用一個變數取代它…而這個變數可能會是你計算出來的某個價位。
比較需要注意的是…即使是用觸價就進出場的方式…你還是必需等待下一根 k 線才會開始執行你的命令。假如你開的是 5 分 k 並寫下這樣的程式碼:
if time = 900 then
buy next bar at 6000 stop;
這樣最早的進場會是在 9:00 那根 k 線的下一根。並不會在當根 k 線就產生訊號。
基本上我是不太建議用 this bar 的方式來寫策略,因為會有回測的訊號和即時的訊號不一樣的情況產生。
總算可以有讓大家練習的機會了…請寫一下跳空開高就買進,跳空開低就賣出的程式吧。至於怎麼判斷開高、開低,那就動動頭腦想一下囉。下一篇會把這個練習程式寫出來。
沒有留言:
張貼留言
請留下您的大名…匿名者恕不回應…