SetPosition後的下一根K,Position沒有改變

  •   169 
  • 最後發表   phsu  2022 十月 13
phsu 發文於   2022/10/10

想請教小幫手:

我使用KD的黃金及死亡交叉,來決定台指期的Position
並且一次最多會交易到6口,頻率為一分鐘
但回測時發現,常常在SetPostion(3, Market)後,下根K棒Print出來的Position值仍為舊值(-3)
請問可能的原因?

先前寫的策略最多交易2口 ,沒有遇到這種問題過

程式碼如下,
回測期間為 2022-04-01 - 2022-04-30,
頻率為一分鐘(非逐筆)

回測在04-06 16:59, 04-08 04:35 等多個時段,
都會發生SetPosition之後一根的Position值未改變的問題

 

input: Length(9, "計算期數"), RSVt(3, "RSVt權數"), Kt(3, "Kt權數");

variable: _rsv(0), _k(0), _d(0);

variable: targetPosition(0);

SetTotalBar(9 * 3);

Stochastic(Length, RSVt, Kt, _rsv, _k, _d);

timeStamp = Text(CurrentDate, "-", CurrentTime);

Print(timeStamp, "Position=", Position, ";", "Filled=", Filled);

 

If _k cross over _d Then

    Begin

        SetPosition(3, Market);

        Print(timeStamp, "_k cross over _d => SetPosition(3)");

    End

Else If _k cross under _d Then

    Begin

        SetPosition(-3, Market);

        Print(timeStamp, "_k cross under _d => SetPosition(-3)");

    End;

 

謝謝幫忙

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

 Hello phsu,

 

您遇到的狀況是該根Bar的成交量為0,所以交易指令 SetPosition 不會執行。

04-06 16:58 這實際上是對應到 4/1 165800 這根Bar (成交量0)。

04-08 04:35 對應到 4/8 043500 這根Bar (成交量0)。

需注意夜盤是算在隔日,所以 4/1 的夜盤在日期上會標示為 4/6。

建議您可以將成交量一併print出來即可得知。

  • 按讚來自於
  • vigorox
phsu 發文於   2022/10/12

謝謝小幫手的回應

但我的理解是,非逐筆洗價之下,SetPosition應該是"該根K棒"跑完後才執行

這樣跟"該根K棒"的成交量,好像應該無關才對?

而且SetPosition(3, Market) 就算因為實際交易量不足,無法成交。在下一支K棒,Position應該還是要變成3,而Filled仍為舊值。

不知這樣是否理解有誤?

 

另外,如果我希望在有KD穿越後SetPosition,並在掛單直到Filled = Position 為止

那我要怎麼寫才能做到?

謝謝

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

 Hello phsu,

 

如同小幫手所說,如果該根Bar沒有成交量的話,那麼就不會下出 SetPosition 指令,不論條件是否有觸發。

之所以會這樣是因為 XQ 在實際執行是要有洗價交易,腳本才會運算。

該根Bar沒有成交量的話,腳本是不會運算的。

您今天遇到的狀況是回測時就算該根Bar沒有成交量 (4/1 165800, 4/8 043500),腳本還是有運算且符合條件,所以print執行了。

但因為沒有成交量,所以 SetPosition 沒有執行。

 

如果您要KD穿越後就持續掛單的話,可以用這種寫法:

if _k cross over _d then begin

    condition1 = true;

    condition2 = false;

    end;

else if _k cross under _d then begin

    condition1 = false;

    condiiton2 = true;

    end;

 

這樣只要K有向上穿越過D的話condition1就會一直是 True,K向下穿越D的話condition2就會一直是True。

  • 按讚來自於
  • vigorox
發表回覆
Close