XS資料讀取範圍與腳本執行的關係問題

  •   270 
  • 最後發表   azlkk6318  2021 六月 17
azlkk6318 發文於   2021/06/12

hi,

如下列程式碼:

print(file("C:\print\策略1.txt"), "========================================================");

print(file("C:\print\策略1.txt"), "GetBarBack", GetBarBack, "currentbar", currentBar);

print(file("C:\print\策略1.txt"), "Datetime", dateTime, "Date", date, "currentdate", currentDate, "currentTime", currentTime, "close:", getfield("收盤價", "D", Adjusted:=true));

print(file("C:\print\策略1.txt"), "前高", simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100), "dateTime", datetime[100]);

value1 = simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100);

在交易回測一年時是可以print 出東西來的

 

但回測兩年時則print不出任何東西 ------------------> 這是本次遇到的問題

主要設定如下:

執行頻率:日 (原始)

開始日期:2020/6/11 結束日期2021/6/11 預先執行筆數200

商品: 2401

 

看起來我的預先執行筆數應該是夠用的,因為我只拿了100天前的收盤價,且XS應該會自動幫我設定適合的最大引數

但當我拿掉 value1 = simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100); 這行後發現code就能work了

可以print出東西

而且其實我的GetBarBack是有一直在增加的,當它增加到100時

print(file("C:\print\策略1.txt"), "前高", simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100), "dateTime", datetime[100]); 這行就可以print的出來

如下部分 output:

======================================================== 

GetBarBack 97.000000 currentbar 1.000000 

Datetime 20191205000000.000000 Date 20191205.000000 currentdate 20200930.000000 currentTime 0.000000 close: 12.780000 

======================================================== 

GetBarBack 98.000000 currentbar 1.000000 

Datetime 20191206000000.000000 Date 20191206.000000 currentdate 20201005.000000 currentTime 0.000000 close: 12.780000 

======================================================== 

GetBarBack 99.000000 currentbar 1.000000 

Datetime 20191209000000.000000 Date 20191209.000000 currentdate 20201006.000000 currentTime 0.000000 close: 13.070000 

======================================================== 

GetBarBack 100.000000 currentbar 1.000000 

Datetime 20191210000000.000000 Date 20191210.000000 currentdate 20201007.000000 currentTime 0.000000 close: 12.930000 

前高 14.490000 dateTime 0.000000 

======================================================== 

GetBarBack 100.000000 currentbar 2.000000 

Datetime 20191211000000.000000 Date 20191211.000000 currentdate 20201007.000000 currentTime 0.000000 close: 12.830000 

前高 14.490000 dateTime 0.000000 

======================================================== 

GetBarBack 100.000000 currentbar 3.000000 

Datetime 20191212000000.000000 Date 20191212.000000 currentdate 20201007.000000 currentTime 0.000000 close: 12.880000 

前高 14.490000 dateTime 0.000000 

======================================================== 

GetBarBack 100.000000 currentbar 4.000000 

Datetime 20191213000000.000000 Date 20191213.000000 currentdate 20201007.000000 currentTime 0.000000 close: 12.680000 

前高 14.490000 dateTime 0.000000 

======================================================== 

 

所以不知道為甚麼

print(file("C:\print\策略1.txt"), "========================================================");

print(file("C:\print\策略1.txt"), "GetBarBack", GetBarBack, "currentbar", currentBar);

print(file("C:\print\策略1.txt"), "Datetime", dateTime, "Date", date, "currentdate", currentDate, "currentTime", currentTime, "close:", getfield("收盤價", "D", Adjusted:=true));

print(file("C:\print\策略1.txt"), "前高", simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100), "dateTime", datetime[100]);

value1 = simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100);

一年回測可以執行,但兩年回測卻不能執行

/////////////////////////////////////////////////////////////////////////////////////////////////////

print(file("C:\print\策略1.txt"), "========================================================");

print(file("C:\print\策略1.txt"), "GetBarBack", GetBarBack, "currentbar", currentBar);

print(file("C:\print\策略1.txt"), "Datetime", dateTime, "Date", date, "currentdate", currentDate, "currentTime", currentTime, "close:", getfield("收盤價", "D", Adjusted:=true));

print(file("C:\print\策略1.txt"), "前高", simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100), "dateTime", datetime[100]);

value1 = simpleHighest(getfield("最高價", "D", Adjusted:=true)[1], 100);

一年回測可以執行,兩年回測也可以執行

 

感謝您

排序方式: 標準 | 最新
azlkk6318 發文於   2021/06/12

更正:

兩年主要設定如下:

執行頻率:日 (原始)

開始日期:2020/6/11 結束日期2021/6/11 預先執行筆數200

開始日期:2019/6/10 結束日期2021/6/10 預先執行筆數200

商品: 2401

 

 

感謝

XQ小幫手 發文於   2021/06/16

Hello azlkk6318,

 

小幫手用警示腳本作回測是正常的,用交易腳本作回測也可以運作。(參考附圖附檔)

猜測您應該是用交易腳本作回測,需要麻煩您提供 XQ Log、交易腳本、回測的設定截圖、回測報告以及有交易中心匯出檔更好,來檢視問題原因。

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

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

感謝。

 

附加文件

XQ小幫手 發文於   2021/06/17

Hello azlkk6318,

 

您二年回測不是沒有買進,而是因為運算過久逾時。

建議您可以將資料預讀筆數縮短為101筆。

或是將 simplehighest 改用 highest 節省效能。

小幫手測過是可以運行的。

發表回覆
Close