Cross Above Error

  •   232 
  • 最後發表   貓老大  2023 二月 06
貓老大 發文於   2023/01/16

小幫手您好,

今日指標腳本在 1分K 處理 3693.TW 時,發生指標無法運算完成的狀況,經過小小測試後,測試腳本如下,發現 Cross Above在 2022/12/16 09:05:00 時無法正確執行完成:

SetBackBar (0);

var: dayOpenBar (0);
if isSessionFirstBar then
 begin
  dayOpenBar = CurrentBar;
 end;

var: BBAND_LENGTH (20), BBAND_BAND (2);
var: BBandLength (BBAND_LENGTH), BBandSD (0);
var: BBandMA (0), BBandUpper (0), BBandLower (0);

BBandLength = IFF (CurrentBar - dayOpenBar < BBAND_LENGTH, CurrentBar - dayOpenBar + 1, BBAND_LENGTH);
BBandMA = Average (Close, BBandLength);
BBandSD =  StandardDev (Close, BBandLength, 1);
BBandUpper = BBandMA + BBAND_BAND * BBandSD;
BBandLower = BBandMA - BBAND_BAND * BBandSD;

 PRINT (File ("[Date][StartTime]_[Symbol]_[StrategyName].log")
 , NumToStr (CurrentBar, 0)
 , DateToString (Date)
 , TimeToString (Time)
 , NumToStr (Open, 2)
 , NumToStr (High, 2)
 , NumToStr (Low, 2)
 , NumToStr (Close, 2)
 , NumToStr (Volume, 0)
 , NumToStr (BBandUpper, 3)
 );

 PRINT (File ("[Date][StartTime]_[Symbol]_[StrategyName].log")
 , NumToStr (CurrentBar, 0)
 , DateToString (Date)
 , TimeToString (Time)
 , "Close Cross Above BBandUpper"
 , Close Cross Above BBandUpper
 );

相關的 PRINT 輸出如下,在 09:05:00 發生錯誤後,下一根K棒的CurrentBar已經重頭變成1了

 

1 2022/12/16 09:00:00 115.00 115.00 115.00 115.00 209 115.000 
1 2022/12/16 09:00:00 Close crosses Above BBandUpper FALSE 
2 2022/12/16 09:01:00 115.00 115.00 115.00 115.00 0 115.000 
2 2022/12/16 09:01:00 Close crosses Above BBandUpper FALSE 
3 2022/12/16 09:02:00 115.00 115.00 115.00 115.00 0 115.000 
3 2022/12/16 09:02:00 Close crosses Above BBandUpper FALSE 
4 2022/12/16 09:03:00 115.00 115.00 115.00 115.00 0 115.000 
4 2022/12/16 09:03:00 Close crosses Above BBandUpper FALSE 
5 2022/12/16 09:04:00 115.00 115.00 115.00 115.00 0 115.000 
5 2022/12/16 09:04:00 Close crosses Above BBandUpper FALSE 
6 2022/12/16 09:05:00 116.00 116.00 116.00 116.00 96 115.912 <=== 錯誤發生在此根K棒
1 2022/12/16 09:06:00 116.00 116.00 116.00 116.00 0 116.000 

請小幫手協助確認,謝謝。

 

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

Hello 貓老大,

 

由您提供的print資訊來看,策略可能有中斷的狀況,因為 currentbar 的數字變回1。

要麻煩您提供策略雷達匯出檔勾選(包含)警示腳本 以及 XQ Log 來確認。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

小幫手這邊也會用您的腳本測試看看會不會發生相同狀況。

 

貓老大 發文於   2023/01/18

小幫手您好

不是策略,是指標,開頭就寫指標腳本,請小幫手測試一下

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

Hello 貓老大,

 

小幫手這邊測試沒有發生相同的狀況。(參考附圖)

可以的話麻煩提供 XQ Log 來檢驗看問題原因為何。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

附加文件

貓老大 發文於   2023/01/19

小幫手您好,

附上log檔

附加文件

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

Hello 貓老大,

 

已經將您提供的Log轉交給相關人員確認。

如果有需要其他資訊或是有進一步消息會再告知。

感謝。

XQ小幫手 發文於   2023/02/02

Hello 貓老大,

 

您遇到的狀況比較特別,會造成currentbar重新開始的原因是 3693.TW 在 12/16 時是5分鐘搓合一盤的處置。

而您在腳本中將 setbackbar 設為0,且沒有勾選不揭示未成交分鐘。

所以在12/16開始計算的時候,每隔五分鐘才會有交易價格,中間則會延續使用前一個成交的交易價格。

 

在這種使用未成交分鐘的價格的前提下,運行到 currentbar=6,也就是12/16 090500 這根 bar 時會踩進去內建腳本 Cross Above (CrossOver) 函數的第19行的邏輯 ( minlist(6, currentbar)的結果會是6 )。

但此時前面的資料並不足6根bar,所以會造成 error 並引起重算, currentbar 重新開始。

 

建議您可以將 setbackbar 的數值調大來避免這樣的狀況。(setbackbar只是抓取資料並不會運算)

 

貓老大 發文於   2023/02/02

小幫手您好,

先謝謝您的深入追蹤系統函數,雖然 CrossOver 函數 #19 行,您說了,我也看了,但我不能理解為何是 6,不過這也不是重點,比六根就是效能差一點而已,但明明 idx 取到 CurrentBar 就是 bug 啊,應該取到 CurrentBar - 1,畢竟 CurrentBar 為六根,取值不是應該 0,1,2,3,4,5 嗎? 取6就直接超出陣列了啊,這點是不是再請小幫手幫忙確認清楚呢?

謝謝

XQ小幫手 發文於   2023/02/06

Hello 貓老大,

 

就小幫手推測,minlist(6, currentbar) 裡的6就是為了避開暫緩交易的狀況,而若修改為 currentbar - 1 的話則會造成在currentbar為1時for迴圈不會執行的錯誤。

小幫手會請相關人員確認看是否有更好的寫法。

 

發表回覆
Close