如何讀取觸發後的下一筆成交價高於觸發價時進場?

  •   133 
  • 最後發表   XQYi  2023 十二月 01
XQYi 發文於   2023/11/24

如何讀取觸發後的下一筆成交價高於觸發價時進場?

例如 B訊號11:00觸發價為60,當下一筆成交資料高於60時才買進

以下的語法 一直沒執行交易

If  value3 > 0 then

begin

value31=close;//當下

if close > value31 then setposition(1,close);//下一筆成交價 > value31

if filled=1 and close >= filledAvgPrice *1.01 then setposition(0,close);

end;

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

Hello xqyi,

 

您可以參考 intrabarpersist 的說明。

且您的寫法順序會導致 value31 先被更新為當次洗價的價格才判斷close是否有大於value31。

建議可以多加上條件來判斷,舉例來說:

var: intrabarpersist _price(0);

 

if value3 > 0 then begin

    //如果_price為0則記錄成交價,如果_price不為0的話則用當下的成交價與其相比,若比較高則進場,相同或低於該數值的話則歸0

    if _price = 0 and position = 0 and filled = 0 then _price = close

    else if _price <> 0 and close > _price and position = 0 and filled = 0 then setposition(1,close) 

    else if _price <> 0 then _price = 0;    

    if filled=1 and close >= filledAvgPrice *1.01 then setposition(0,close);

    end;

 

您可以將相關數值印出,即可知道策略運作的狀況。

XQYi 發文於   2023/11/28

 感恩!

 若使用 q_last 表示下一筆可否?

 

XQ小幫手 發文於   2023/12/01

Hello xqyi,

 

您可以參考 q_last 的說明。

 

q_last 會和 close 相同,都是回傳最新的成交價。

所以不論使用哪一個都會遇到相同的情況。

另外XQ裡面無法取得未來的資料,所以是無法取得下一筆的資料,但您可以使用 getfield("Close", "Tick")[1] 來取得上一筆Tick的價格 (並不一定會等於上一次洗價的價格)。

發表回覆
Close