一開始先來講進出場價位,這代表什麼?這代表著也許某個條件已經成立了,所以我們利用變數把預計的進出場價位先存下來,接下來我們會等待著第二個條件成立,也許第二個條件成立後會進場等。
以一個簡單的例子來說明狀況的儲存,假設我們在均線交叉的時候,記錄下當交叉當根 k 線的高低點,接下來,我們就以這個高低點來進出場。
這樣的程式該怎麼寫呢?首先是均線交叉的寫法,這應該要沒問題了。如果你對這個均線的交叉還有問題的話,那你應該要重頭開始看這系列的文章。
接下來在交叉的時候,我們利用一個變數把高、低點存下來。再來就是等待突破進場了。
整個說起來應該不難才對,所以就直接來寫吧:
vars: longLine(0), shortLine(0);
Value1 = average(close, 10);
Value2 = average(close, 30);
if Value1 cross over Value2 then begin
longLine = high;
shortLine = 0;
end;
if Value1 cross under Value2 then begin
shortLine = low;
longLine = 0;
end;
if longLine <> 0 then
buy next bar at longLine stop;
if shortLine <> 0 then
sell next bar at shortLine stop;
在這個程式可以看到我宣告了二個變數分別是 longLine 和 shortLine,這二個變數分別記錄著多單進場的價位和空單進場的價位。
再下來是二條均線的運算式。
然後是當均線有交叉動作發生時,需要作的動作。在這邊可以看到不再是一交叉就直接進場了,而只是在有交叉動作發生時,記錄下當根 k 線的高或低點。
比較需要注意的是,因為變數一設定值進去後,如果沒再去變動它,那麼那個值就會一直存在,所以什麼時候需要把變數作歸零的動作,是很值得注意的一件事情。
如果在這邊我沒有把另一邊的進場點作歸零的話,那麼在下面的進場語法就會產生不可預期的狀況囉。
沒把變數歸零的狀況:
在這邊所謂的歸零,是指在進場條件你必需排除掉的數值,可以看到我在進場條件的寫法是排除掉 longLine 或 shortLine = 0 的情況。
那就練習一下吧…來寫個 MACD 交叉後以交叉時的高低點作為進場點吧。
Value1 = MACD(close, 12, 26);
回覆刪除Value2 = XAverage(MACD(close, 12, 26), 9);
if Value1 cross above Value2 then begin
longline=high;
shortline=0;
end;
if Value2 cross under Value1 then begin
longline=0;
shortline=low;
sell next bar at shortline stop;
end;
\*進場*\
if longline<>0 then begin
buy next bar at longline stop;
end;
if shortline<>0 then begin
sell next bar at shortline stop;
end;
\*出場*\
if priceenterprice+40 marketposition=-1 then begin
exitshort this bar at close;
最後面漏了
回覆刪除if price<enterprice-40 and marketposition=1 then begin
exitlong this bar at close;
很多錯誤
請DK大大多多鞭策我XXD
layx: 請貼錯誤訊息囉..另外如果你沒貼錯的話..你在空單出場那邊寫錯了..還有 entryprice 我習慣用 entryprice(0) 代表最近一筆的進場
回覆刪除抱歉@@ 我暫時沒把法提供錯誤
回覆刪除那我更正一下:
\*出場*\
if price>enterprice+40 marketposition=-1 then begin
exitshort this bar at close;
if price<enterprice-40 and marketposition=1 then begin
exitlong this bar at close;
但不曉得您說的entryprice如何使用
他是內建函式嗎?!還是我要重新宣告?
進場的價格不是就是entryprice嗎@@
有點搞混了..
Layx: 是一樣的..只是你的程式碼裡面打的不是 entryprice
回覆刪除