腳本內可以直接使用Condition變數,不需要預先宣告,但是程式編寫與執行時的疑惑

  •   58 
  • 最後發表   塞繆爾  2026 一月 30
塞繆爾 發文於   2026/01/30

腳本內可以直接使用Condition變數,不需要預先宣告,但是程式編寫及執行時的疑惑:

1. XS程式若在各個Condition執行前,未事先寫入 ConditionX=False; 在後面行號直接寫入  if ..... then ConditionX=True;
這樣子程式執行會有問題嗎?

2. if ..... then ConditionX=True; 與 ConditionX=.......;  這兩種寫法,完全一樣嗎?
若以 ConditionX=.......; 方式編寫,就不必事先寫入  ConditionX=False; 嗎?

3. 若程式中有 Condition1 及 Condition2,而且  Condition1 行號在 Condition2 之前,若有下列情形:
Condition1= ..... and/or Condition2 .....; (也就是 Condition1內有 Condition2 )
程式執行到 Condition1 時會將 Condition2 也併入考量嗎?
編譯時會主動出現錯誤訊息嗎?
是否需要將 Condition2 行號位置,移到 Condition1 之前?

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/01/30

(1)不需要宣告的變數condition1~condition999,預設值為False。

(2)兩者雖然看起來一樣,其實有差異,例如if c cross over highest(h[1],3) then condition1=True; 與condition1=crossover(c, highest(h[1],3)); 在突破當下,兩種寫法結果相同,但若之前曾突破,目前沒突破,則第一種寫法的condition1會一直是True,而第二種寫法的condition1卻是False。

(3)condition2會保留更早之前的數值或預設值,編譯不會出錯,但可能會有邏輯錯誤。

塞繆爾 發文於   2026/01/30

謝謝教授,

(2)兩者雖然看起來一樣,其實有差異,例如if c cross over highest(h[1],3) then condition1=True; 與condition1=crossover(c, highest(h[1],3)); 在突破當下,兩種寫法結果相同,但若之前曾突破,目前沒突破,則第一種寫法的condition1會一直是True,而第二種寫法的condition1卻是False。

以盤後選股程式而言,兩種寫法應該沒有差別,至於:
第一種寫法的condition1會一直是True,而第二種寫法的condition1卻是False]
我尚無法理解,是否跟我沒購買的 [ 策略雷達盤中監視模組 ] 可以重複地即時運作程式有關?尚請教授解惑

虎科大許教授 發文於   2026/01/30

(1)選股或警示程式也是一樣。只要有跑前面的K棒讓condition1為True,除非後面的K棒有機制讓它變False,不然它會一直保留True。

(2)這與模組無關。

塞繆爾 發文於   2026/01/30

謝謝教授

GammaCEO 發文於   2026/01/30

幫忙補充一下

1."ConditionX="是邏輯值,只要"="後面的條件全成立了就是True,反之為False。

2.Condition邏輯值搭配intrabarpersist標籤可以成為布林值,取代條件式後的ConditionX=True; ,寫出更多層的邏輯判斷選項。

3.Condition內或外的and、or等同值或附帶值最好用括號區隔,才不會如同教授說的出現邏輯錯誤。

 

發表回覆
Close