【單元7】流程控制If…Then….
所謂寫程式換一種講法就是下指令給電腦,下指令終極語言結構就是:如果符合什麼條件就去做什麼動作。「If…Then…」稱為「流程控制」,可以很簡單,比如一個指標讀數條件,符合了就執行一個下單動作,快速完成;也可以很複雜,在程式腳本中不斷地作條件判斷、一層一層地執行動作,必要時還要做例外排除,最後才達到我們要的結果。本文將為讀者介紹各種「流程控制」語法,並示範其運用範例,學會了流程控制,我們算是正式有能力寫程式腳本了。
>>讀完本文您可以學到什麼?
1. 學會各種「流程控制」語法
2. 基本型If…Then…
3. 基本型If…Then Begin…End
「If…Then…」如果符合條件就去執行A動作
這是最基本的,我們在前面單元的範例已經有用過。其中條件可以有多個(用and或or 連結不同條件),但執行動作只能有一個。
範例1:如果5MA向上交叉20MA,下根K棒就市價買進。
If average(close,5) cross over average(close,20) then buy next bar at market;
這邊附帶一提,在【單元6】認識變數(Variable)與參數(Input)中我們介紹了PowerLanguage中內建的邏輯類型的變數Condition0~Condition99,可不用宣告直接使用,因此上例也可以改寫成:
Condition1=average(close,5) cross over average(close,20);
if Condition1 then buy next bar at market;
如果該判斷條件會被重複引用,則可以用上述以變數方式來撰寫程式,可以讓整個程式腳本更簡潔易讀。
範例2:如果 KD指標的K值在低檔黃金交叉D值,下根K棒就買進。
variables: fast_K( 0 ), fast_D( 0 ), slow_K( 0 ), slow_D( 0 ) ;
Value1 = Stochastic( H, L, C, 14, 3, 3, 1, fast_K, fast_D, slow_K, slow_D) ;
If slow_K cross over slow_D and slow_K <30 then buy next bar at market;
說明:運用Stochastic這個函式可以算出K值與D值,這邊的流程控制是必須同時符合K值與低值黃金交叉且K值必須在30以下(以此定義所謂的低檔)才進場做多。
「If…Then…Else…」如果符合條件就去執行A動作,不符合就執行B動作
這個語法最常運用到控制指標的顏色(不同條件下,指標以不同顏色呈現),例如:如果收盤價在20MA以上,均線(編號Plot1)顏色為紅色,反之,為綠色,語法如下:
if Close > Average(Close, 20) then
SetPlotColor(1, Red)
Else
SetPlotColor(1, Green);
說明:這邊要特別留意只有在最後的動作B該行腳本末才有分號作為結束。上面的語法也可以用一行表達,如下,但是閱讀上恐容易搞混,不建議這麼做。
if Close > Average(Close, 20) then SetPlotColor(1, Red) Else SetPlotColor(1, Green);
3. 「If…Then Begin…End」如果符合條件就依序執行A、B、C…等動作
與上面「If…Then…」、「If…Then…Else…」最大的差別就是,前兩者的執行動作只能有一個,但加了begin後,執行動作可以複數個。
範例1:如果收盤價在20MA以上,執行動作A均線(編號Plot1)顏色設為紅色,並執行動作B發出警示。
if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);
Alert;
End;
說明:這邊一樣要留意那些句子最後有用分號作為結束,基本上begin跟end中間的每一個動作都要有分號作為結尾,然後最後的end也是要分號結尾。
範例2:同時丟出停損停利單也常用到。
If marketposition=-1 then begin
Buy next bar at entryprice+100 limit;
Buy next bar at entryprice-50 stop;
End;
說明:這個寫法就是同時丟出停損停利委託,執行時會類似OCO(一邊成交,另一遍自行取消)。
4. 「If…Then Begin…End Else Begin…End(如果符合條件就去執行A、B、C…等動作,不符合就去執行D、E、F…等動作)
範例:如果收盤價在20MA以上,動作A,均線(編號Plot1)顏色設為紅色,動作B,發出警示;反之收盤價沒有在20MA以上,則動作C,均線(編號Plot1)顏色設為律色,動作D,發出警示。
if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);
Alert("Close Above Average");
End
Else begin
SetPlotColor(1, Green);
Alert(“Close Below Average”);
end;
說明:這個與法用法又更複雜,常見錯誤就是在結尾分號沒有下對。
結論與歸納
以上幾種控制流程的語法運用,簡單歸納以下要點:
1.條件都可以是複數個,用「and」或是「or」串起來。
2.要執行多個動作用If…Then Begin…End,而只執行單一動作用If…Then…。
3.注意哪些地方要用分號”;”結尾,哪些不用。
控制流程語法另外還有Switch...Case與While…Begin(迴圈) 等,運用較少,後面如有運用到,在於範例說明,或請讀者先參考MultiCharts官網說明。
【警語】:
- 本文所舉之語法範例為教學之用,非提供交易策略,請讀者警慎運用。
- 自動交易如遇系統異常或斷線等問題,可能暴露更高的風險,交易人仍應檢查電腦系統或網路之狀態,特別要隨時注意部位變化,以降低相關風險。
點我,看更多程式交易教學→https://www.pfcf.com.tw/eventweb/multicharts/
/統一期貨相關連結/