上次我介紹過樞紐點進場方式,也許對一些新手來說不知道要怎麼用程式語言去把它寫出來,所以這次來具體的把程式寫出來,順便利用這個機會來介紹一下EasyLanguage PowerEditor的一些寫程式的方式。之前有說過大概如何構造出一支程式,但是只有具體說出大概支架,可能有些人對於細節要如何去描寫出來有點疑惑,所以下面就來講解一下如何寫出樞紐點進場方式的程式。
首先先把所有完整程式寫出來給大家瞧瞧:
Inputs:TrailBar(4);
Vars:Pivot(0), Support1(0), Support2(0), Support3(0), Resistance1(0), Resistance2(0), Resistance3(0);
If Date<>Date [1] then Begin
Pivot=(High+Low+Close)/3;
Resistance1=Pivot*2-Low;
Resistance2= Pivot+Range;
Resistance3= Resistance1+Range;
Support1=Pivot*2-High;
Support2= Pivot-Range;
Support3= Support1-Range;
End;
If Time>Sess1StartTime and Time
If Low>Support3 then Begin
Sell next bar at Support3 Stop;
Sell next bar at Support2 Stop;
End;
If High
Buy next bar at Resistance 3 Stop;
Buy next bar at Resistance 2 Stop;
End;
End;
Exitlong next bar at Lowest(Low,TrailBar) Stop;
Exitshort next bar at Highest(High,TrailBar) Stop;
SetExitOnClose;
我們這邊開始來解釋一下上面程式為什麼這樣寫。首先Inputs後面接的變數是我們可以在程式中任意改變的參數,也是我們要最佳化的參數,當然參數名稱有它命名的規則,不過原則上如果是用英文字組成的名稱都不會有什麼問題,不要加上一些奇奇怪怪的符號就好了。Vars後面所接的變數是我們在程式計算過程中要用來儲存計算結果的變數,而在這些參數或是變數的後面括號中的數值是我們設定的起始值,所以我們可以隨時改變參數的值,而變數的數值也會隨便計算結果的改變而改變,不過要記得在Inputs參數跟Vars變數最後面都要加上分號代表此段程式結束,在之後的每段程式結束也都要加上分號。
接下來是程式的主要部份:
If XXXXXX then Begin
###########;
End;
這意思是說如果滿足XXXXXX條件,那麼就執行###########指令,最後一定要加上End;表示結束。所以If Date<>Date [1] then Begin就表示說如果這根K棒的日期不等於前一根K棒的日期時我們就開始執行下面指令,也就是說只有在每天開盤第1根K棒出現後會執行這個指令,去計算出我們要的3個支撐點與3個壓力點。再來就是我們的進場方式,If Time>Sess1StartTime and Time
最後我們要說明出場方式,當我們持有多單時,多單出場是用Exitlong來表示,所以Exitlong next bar at Lowest(Low,TrailBar) Stop;就表示如果價格低於前4根K棒的最低點時,多單出場。Lowest(Price,N)這個函數是表示N根K棒中價格(Price)的最低值。同理,當我們持有空單部位,空單出場是用ExitShort來表示,所以Exitshort next bar at Highest(High,TrailBar) Stop;
就表示如果價格高於前4根K棒的最高點時,空單出場。因為我們是寫當沖策略,所以在收盤前一定要出場,所以你必須自己加上收盤前的出場時間才可以,而加上SetExitOnClose;這個指令是確保你在作回測時,如果有部位,收盤前一定會出場。
當然這支程式其實是一支很簡單的程式,通常一支程式寫出來可能比這個複雜很多,但是如果是新手就要一步一步慢慢來,畢竟要把自己的想法完全用程式語言寫出來,其實也沒那麼容易的,必須要多寫多想多參考其他人的寫法才是。
0 意見:
張貼留言