Print的數值比對

  •   227 
  • 最後發表   風期會  2023 八月 01
風期會 發文於   2023/07/22

小幫手請教

在回測時候,腳本觸發了停利訊號,而由於是12:45-13:45的收盤觸發,所以我設立了下午盤開盤停利,如下腳本粗體部份。

但圖片中的print數值,紀錄前K收價17085沒有問題,停利點=17185,卻不會在15:00出場,不知道是我邏輯哪邊不完善呢?在煩請指教,感謝。

//==============================================================
//檢查出場條件:停利
//==============================================================
//多停利
if position>0 and filled>0 and C>filledAvgPrice then
  begin
    if maxList(C-stop_point,simpleLowest(L,stop_length)) > bout then bout = maxList(C-stop_point,simpleLowest(L,stop_length));

    if time = 150000 and C[1] < bout[1] then setposition(0,market,label:="做多停利");
    if C < bout then setposition(0,market,label:="做多停利");
    _stop_profit = bout - filledAvgPrice;

    print(file("f:\Users\USER\Desktop\平台型態\台期程式交易\"),text("日期",dateToString(date), "時間",timeToString(time),
    "。前根收價:",NumToStr(C[1],0),"。停利出場點:",NumToStr(bout,0),"。停利總點數:",NumToStr(_stop_profit,0)));
  end;

//空停利
if position<0 and filled<0 and C<filledAvgPrice then
  begin
    if minList(C+stop_point,simplehighest(H,stop_length)) < sout then sout = minList(C+stop_point,simplehighest(H,stop_length));

    if time = 150000 and C[1] > sout[1] then setposition(0,market,label:="做空停利");
    if C > sout then setposition(0,market,label:="做空停利");
    _stop_profit = sout - filledAvgPrice;

    print(file("f:\Users\USER\Desktop\平台型態\台期程式交易\"),text("日期",dateToString(date), "時間",timeToString(time),
    "。前根收價:",NumToStr(C[1],0),"。停利出場點:",NumToStr(sout,0),"。停利總點數:",NumToStr(_stop_profit,0)));
  end;

排序方式: 標準 | 最新
iker 發文於   2023/07/22

實盤跟回測不同,XQ回測是真的當成全日盤,但實際跑自動交易時,日盤結束會暫停腳本,直到夜盤才會重新啟動,導致無法用早盤最後收盤那根K棒觸發的進出場訊號,實際在夜盤第一根K進場。

跑全日盤要在夜盤第一根K能觸發下單只能用 這個討論串 小幫手提到的方式

XQ小幫手 發文於   2023/07/25

Hello 風期會,

 

您指的是if time = 150000 and C[1] < bout[1] then setposition(0,market,label:="做多停利"); 這一段,在150000時印出的 c[1] 和 b[1] 分別是 17085 和 17185嗎?

如果條件符合但卻沒有交易的話,可能是其他的交易指令同時觸發,且該交易指令在停利前面。

若腳本同時有複數交易指令觸發,則只會執行第一個運作到的,細節可以參考 setposition 裡的說明。

 

如果還是有問題的話,要麻煩您提供 交易腳本、回測設定 (截圖亦可) 並告知回測問題發生的日期時間讓小幫手確認。

 

 

Hello iker,

 

日盤到夜盤間如果沒有手動中斷策略的話,策略本身是不會停止的 (腳本不會運算是因為沒有洗價),而之前的日盤的變數等相關資訊也會持續存在。

之所以在日/夜盤最後一根Bar無法成交,是因為在洗價運算時 (除非是逐筆洗價) 該根Bar已經結束 (也就是市場已經收盤),故系統不會下單。

 

風期會 發文於   2023/07/25

小幫手

設定及腳本如附件,在麻煩你檢驗,感謝.

附加文件

XQ小幫手 發文於   2023/07/27

Hello 風期會,

 

小幫手將回測區間的的 close 和 bout 回測印出,並沒有在 2023/07/11 10:45 ~ 2023/07/13 16:00 之間看到停利點17185的數值。

另外其出場在是在7/16 16:00 是因為在 7/16 130000 這根 Bar運算時為True出場,所以會成交在下根Bar。

 

附加文件

風期會 發文於   2023/07/27

小幫手請問

台期日盤,我理解應該為124500這根bar運算式為true出場;

但是你提到130000這根運算為true時出場,

意思是否可以理解為是因為下午盤為150000開始,所以就必須往前看整點130000部份。

若是如此,那請問是否有什麼條件方法,當其條件出場觸發在124500,然後可以在下午150000開盤就出場呢?

iker 發文於   2023/07/29

Hi 小幫手

3.10.04 版本執行跨日夜盤的期貨自動交易腳本時,滿常發生日盤結束後、夜盤開始時,有洗價也不會執行,但手動重新啟動策略後,腳本能夠正常運作,這點可能要麻煩你們確認一下,更新到該版本後幾乎每次有跨日夜盤都會遇到。但該策略有用到「依策略計算起點」,不確定是不是跟這個有關(這題有另一個問題先前已經回報給你們,目前得到的回應是只能暫時不使用「依策略計算起點」的功能)。

我確認這個問題的方式是每根K棒收K後log一段持倉資訊(按收盤價預估損益之類的),但在夜盤只要不手動重啟腳本,該腳本最後一筆log就會停留在日盤最後一根K

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

Hello 風期會,

 

回測要交易是經過 腳本運算 => 下委託 => 判斷是否成交。

所以在 150000 運算後下出委託,會到150100才成交。

如果您要在 150000開盤就下單成交的話,只有使用1分鐘逐筆洗價,且勾選觸發即判斷成交,這樣才能夠讓腳本在 150000 開盤價時運算並送出委託,然後當下成交。

可參考 iker 回覆中提到的問題連結。

 

 

Hello iker,

 

是有可能是設定了依策略此問題所造成,但要確認問題原因還是要麻煩您提供 XQ Log 並告知問題發生的日期時間,讓相關人員確認。

小幫手這邊簡單測試下設了部位計算起點與沒設部位計算起點,看起來都可以正常執行。

但還是有可能因為操作設定或腳本運算導致有不同狀況。

發表回覆
Close