有關判斷部位大於0才執行的問題

  •   164 
  • 最後發表   無情卻慈悲  2022 十月 04
無情卻慈悲 發文於   2022/09/23

你好,如下圖,

我程式有判斷if position > 0才會執行出場,

但下圖的下方的記錄區,仍是會紀錄到一直在執行出場動作,

請問我這可能是什麼原因嗎?

甚至也讓整個策略,經過一日一夜都沒進行下單。

log檔在此 :

https://drive.google.com/file/d/1gwcLrt5NX7Zz30EPo-JuhUOKZ9LbGDoI/view?usp=sharing

 

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/09/28

Hello 無情卻慈悲,

 

看執行時間,這感覺上像是在進入即時洗價前運算時印出的資訊。

此時您有部位但是在歷史資料上運算,所以不會執行setposition。

造成 position 會一直維持在大於0的狀況下,故會一直進入 if 的判斷式裡。

這部分可能跟您的策略設定有關。

 

至於讓整個策略一日一夜都沒有下單,小幫手想到的可能性是您的腳本中有一個 setposition 持續在執行,導致其他的setposition無法執行。

因為當腳本中有複數個setposition執行時,只會執行第一個執行到的 setposition 指令。

這部分的話則可能與腳本有關。

 

小幫手會先請相關人員確認您的log,看是否能確認問題如上述。

感謝。

無情卻慈悲 發文於   2022/09/28

你好,

我程式有判斷if position > 0才會執行出場,

但是當下我程式是沒有任何的部位的,也就是當下position = 0,

既然=0就不應一直反覆判斷啊,不是嗎?

XQ小幫手 發文於   2022/09/28

Hello 無情卻慈悲,

 

您的條件是:

if position > 0 and (j < k) or (close < sarValue) then begin

這種寫法會是 position > 0 and (j < k) 或是 (close < sarValue) 這兩種任一達成就會觸發。

所以有可能是 close < sarValue 符合條件所以print出來。

推測您想要的應該是 if position > 0 and ((j < k) or (close < sarValue)) 這樣才對。

position > 0 and (j < k) 或是 position > 0 and (close < sarValue)。

 

另外就您的log來看,您是在10:46:28啟動策略,運行在15分鐘頻率非逐筆上,所以 101500 和 103000 這兩根Bar是過去資料。

除非您有開啟策略部位計算起點,不然這段時間是不會交易的,若有交易的話,執行紀錄上也會有顯示相關資訊。

無情卻慈悲 發文於   2022/09/28

你好,

我理解您的意思,

(1)

我只要把or 前後加上括號即可,對嗎?

if position > 0   

and  ( 

( j < k ) or ( close < sarValue )

)

then begin.....

(2)

除非您有開啟策略部位計算起點,不然這段時間是不會交易的

→這是指說我必須設置settotalbar嗎,還是指?

 

 

 

XQ小幫手 發文於   2022/10/04

Hello 無情卻慈悲,

 

1.是的,if position > 0 and ((j < k) or (close < sarValue)) 這樣才會是一定要 position > 0 才會執行。

 

2.您可以參考教學區裡面的策略部位計算功能說明

發表回覆
Close