FilledAtBroker 取值問題

  •   404 
  • 最後發表   GaryChiang  2024 五月 22
GaryChiang 發文於   2024/05/16

資料如下:

請問 FilledAtBroker 變數是否在第一次程式執行之後就不動了! 

或是 FilledAtBroker 這是一支函數, 我用[1]去取前一根的值, 所以取不到? 必需先存在 value1 的變數之中, 再做運算?

謝謝~~

 

交易程式, 1分K, 逐筆

if isfirstcall("RealTime") and FilledAtBroker<>0 then alert(FilledAtBroker, filledAvgPrice);

if filledAtBroker <> FilledAtBroker[1] then
    alert(FilledAtBroker);

實單委託情況

自動交易資料

排序方式: 標準 | 最新
GaryChiang 發文於   2024/05/17

今天又測一次, 使用如下程式碼, 程式啟動之後, 還是取不到值!

value1 = filledAtBroker;


if isfirstcall("RealTime") and FilledAtBroker<>0 then alert(FilledAtBroker, filledAvgPrice);

if isfirstCall("bar") and value1 <> value1[1] then
    alert(FilledAtBroker, filledAvgPrice);

 

XS小編 發文於   2024/05/22

Hello GaryChiang,

 

就上圖來看,在 5/16 09:24 時有一張現股賣出,如果您原本的庫存是0的話,那麼在 09:56 策略執行時印出的 FilledAtBroker 為 -1 就是正確的。

FilledAvgPrice 是 策略庫存的未平倉成本,既然策略庫存為0,那麼該數字就會是0。

另外 FilledAtBroker 是回傳當下的實際庫存,只會有最新的數值 (不會有前期值),可以用變數來保存。

小編這邊簡單測試看起來也沒有問題 (參考附圖)。

 

您的問題應該是出在於 isfirstCall("bar"),因為當根Bar第一次洗價時 value1[1] 會是前一根Bar最後的結果,value1 則是當根Bar當下的結果。

所以除非您的交易剛好發生是當根Bar的第一次洗價,不然兩者會是相同的。

您可以實際print出來確認,舉例來說:

value1 = filledAtBroker;

if isfirstCall("bar") then begin

    print(date, time, filled, filledAtBroker, filledAtBroker[1], value1, value1[1]);

    if value1 <> value1[1] then print(date, time, value1, value1[1]);

    end;

會比較容易理解。

附加文件

發表回覆
Close