換日的判斷如下:
if date <> date[1] then begin
end;
上面的 if 判斷抓出了日期,而 date <> date[1] 代表著目前這根 k 線的日期和上一根 k 線的日期不一樣!
什麼時候會相鄰的兩根 k 線日期會得到不一樣的結果呢?那當然就是今天的第一根 k 線和昨天的最後一根 k 線啦。透過這樣子的判斷我們可以很簡單的得到是否已經換日的條件出來了。
那麼以這樣子的判斷再加上一些條件…就可以很簡單的寫出跳高買、跳低賣囉:
if date <> date[1] and open > close[1] then begin
buy next bar at markte;
end;
if date <> date[1] and open < close[1] then begin
sell next bar at market;
end;
簡單說明一下:
假如目前的 k 線日期不等於上一根 k 線的日期,而且目前的開盤價大於上一根的收盤價,則買進。
是不是有感覺到寫程式有愈來愈簡單的樣子了…基本上只要你能夠把邏輯條件想出來、量化出來…要轉成程式碼其實並不是這麼困難的事。
除了上面的寫法外…再介紹一個更簡單的寫法,因為這樣子的條件並不會因為每日 k 線波動的差異產生不一樣的結果…因為昨天的收盤價是固定的、今天的開盤價也是固定的。所以簡單的寫成這樣:
if opend(0) > closed(1) then begin
buy next bar at market;
end;
if opend(0) < closed(1) then begin
sell next bar at market;
end;
這邊用到了二個新函數,順便介紹一下,分別是 opend(0) 和 closed(1)。
opend(0) 代表著今日的開盤價
closed(1) 代表著昨日的收盤價
簡單的記法 open 代表開盤價,而 d(day) 代表天,所以 opend 就代表著某一天的開盤價,後面接上 (0) 代表就是今日的開盤價,如果用上了 (1) 那就表示是昨天的開盤價囉。
在分線週期內要取得日線的開高低收,就可以分開用上 opend、highd、lowd和 closed 等四個函數。
最後一個跳高買、跳低賣的方式…如果希望是以開盤價觸價就進場,而不是等待第一根 k 線收完呢?要觸價進場…也就是需要用到 stop 單囉…而 stop 單只能在當根判斷的時候就立刻進場…透過這樣的想法繞回來後,你就知道這個進場必需寫在昨天的最後一根 k 線上才能在隔天的開盤立刻進場了。
if time = 1345 then begin
buy next bar at close + 1 stop;
end;
if time = 1345 then begin
sell next bar at close - 1 stop;
end;
這是以 5 分線為例子…5 分線的最後一根 k 線時間為 1345,所以上面的例子判斷是在最後一根 k 線的時候,寫下了進場的條件:下一根買進在目前收盤價 + 1 點,或是賣出在目前收盈價 - 1 點的價位。
下一根其實就是隔天開盤的那根 k 線囉,所以買進在目前收盤價 + 1 點…代表的就是隔天是開高的意思。
不過如果實際的去跑上面的例子…會發現有時候在第一根 k 線又買又賣的…那是因為隔天開盤的第一根 k 線把買進和賣出的點位都碰到了…
所以這只是個例子…通常我會特別避免掉同一根 k 線同時產生二個交易訊號出場。因為這樣在 k 線圖上是沒辦法分的出哪個先、哪個後的。這也會在回測或實際執行上出現一些問題。
下一個練習題:計算出20根k線移動平均線。(hint:移動平均線的計算為 Average 函數)
DK大:想請問你這篇!若是我想用跳空下來後,以第一支15k棒的開盤為準! 只要突破這支15k的開盤,就進多單!那程式又怎記錄此開盤點呢?
回覆刪除momo: if time = 900 then value1 = open;
回覆刪除