分支(Branch)#
if-else 和 switch 分支語法,讓程式可以決定執行方向: 當滿足某些條件時,執行某些指令,否則執行其他指令。
使用分支語法分成兩個步驟:
- 將要判斷的條件,利用
and、or等邏輯運算子(Logical Operator)組成邏輯陳述句(Logical Expression)。 - 將邏輯陳述句搭配 if-else 或 switch 語法,決定要執行的方向。
邏輯運算子(Logical Operator)#
PowerLanguage 提供了以下的邏輯運算子來組成邏輯陳述句:
| 邏輯運算子 | 意義 |
|---|---|
and | 且 |
or | 或 |
not | 否定 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
= | 等於 |
<> | 不等於 |
cross above / cross over | 向上穿越,兩者可替換 |
cross below / cross under | 向下穿越,兩者可替換 |
除了 cross above 和 cross below 外,其他邏輯運算子的意義都和數學的邏輯意義相同。
A cross above B (A 向上穿越 B)的定義:
- 在當根K棒,A 的值大於 B 的值,且在前一根K棒,A 的值小於 B 的值。
- 在當根K棒,A 的值大於 B 的值,但前一根或多根K棒 A 的值等於 B 的值,則在這些等於的K棒之前,A 的值需小於 B 的值。
A cross below B (A 向下穿越 B)的定義:
- 在當根K棒,A 的值小於 B 的值,且在前一根K棒,A 的值大於 B 的值。
- 在當根K棒,A 的值小於 B 的值,但前一根或多根K棒 A 的值等於 B 的值,則在這些等於的K棒之前,A 的值需大於 B 的值。
邏輯陳述句(Logical Expression)#
邏輯陳述句是回傳值為真假值型別的陳述句。範例:
5 < 3: 5 小於 3,回傳值為false。8 <> 9: 8 不等於 9,回傳值為true。8 <> 9 and 5 < 3: 8 不等於 9 且 5 小於 3,回傳值為false(因為5 < 3為false)。
if-else#
if-else 讓程式可以根據邏輯陳述句的結果,選擇要執行哪一條路。如果邏輯陳述句的結果為 true,執行 True_Instruction; 如果是 false,執行 False_Instruction。
if-else 分成單行指令語法和多行指令語法。
單行指令語法#
True_Instruction 或 False_Instruction 只能有一行,不用加 begin/end。
[] 表示可省略,else 條件如果不需要,可以刪除。
| |
多行指令語法#
True_Instruction 或 False_Instruction 可以是一行也可以是多行,必須用 begin/end 包起來。
[] 表示可省略,else 條件如果不需要,可以刪除。
最後一個
end需要加分號(;),其餘的end不需要加分號。
| |
else if 語法#
if-else 除了決定 true 或 false 的兩路語法,還可以搭配 else if 判斷多個邏輯陳述句,實現多路分支。
[] 表示可省略,else 條件如果不需要,可以刪除。
最後一個
end需要加分號(;),其餘的end不需要加分號。
| |
範例#
單行語法: 如果 UpTrend 為 False,在下一根K棒市價單賣出。
| |
多行語法: 如果 UpTrend 為 True,在下一根K棒市價單買進; 否則在下一根K棒市價單賣空。
| |
else if 語法: 宣告變數 EMA 計算 20 日指數移動平均線,根據收盤價與 EMA 的關係,印出不同訊息。
| |
switch#
switch 透過運算式(Expression)的回傳值來決定要執行的指令,運算式的回傳值可以是數值、字串或真假值型別。
語法#
當程式執行到 switch 時,會執行以下動作:
- 將
Expression的回傳值和每一個Case_Expression比對,如果滿足條件,則執行對應的Case_Instructions。 - 如果所有的
Case_Expression都沒有滿足,則執行default的Default_Instructions。
[] 表示可省略,default 如果不需要,可以刪除。
PowerLanguage 與其他程式語言不同,不需要額外加
break來跳出switch。程式在執行完Case_Instructions後,會自動跳到end;結束switch。
| |
Case_Expression#
Case_Expression 的型別必須和 Expression 回傳值的型別一致。
Case_Expression 可以是:
| 用法 | 範例 |
|---|---|
| 一個值 | case 1: |
| 多個值 | case 1, 2, 3: |
| 一個範圍 | case 4 to 8: |
| 搭配邏輯運算子 | case is > 40: (is 是 skip word,可省略) |
| 混合使用 | case 9 to 15, 20: |
範例#
數值型別: var1 的值為 8(5+3),滿足 Case 4 to 8,因此執行 Print("if 4 to 8")。
| |
字串型別: str1 的值為 "I",滿足 Case "H", is >= "I",因此執行 Print("if H, is >= I")。
| |
Reference#
https://www.multicharts.com/trading-software/index.php?title=Category:Comparisons_and_Loops
https://www.multicharts.com/trading-software/index.php?title=Above
https://www.multicharts.com/trading-software/index.php?title=Below
https://www.multicharts.com/trading-software/index.php?title=If
https://www.multicharts.com/trading-software/index.php?title=Switch