漲停價或參考價資料為空

  •   292 
  • 最後發表   charlie1234  2023 三月 29
charlie1234 發文於   2023/03/16

小幫手好

在交易使用getfield取參考價或漲停價做比較時,有些個股會出現資料為空的錯誤

程式碼在下方,說明如下,

使用上市普通股、日頻率回測近一年

只有condition2的時候,回測一切正常

但只要一加入成交量限制(condition5),就會有些股票出現資料為空的訊息

有嘗試加其他條件,像是價格限制,都沒有問題,但只要一加了成交量,就會出問題

這些條件不是應該獨立不會互相影響的嗎? 感覺很怪

煩請協助了解,謝謝

 

//漲停判斷
input:tickcount(3, "距離幾個tick漲停");

if close>=0 and close<10 then condition2=(close+0.01*tickcount) > GetField("漲停價","D");   //價格在0~10的股票
if close>=10 and close<50 then condition2=(close+0.05*tickcount) > GetField("漲停價","D");  //價格在10~50的股票
if close>=50 and close<100 then condition2=(close+0.1*tickcount) > GetField("漲停價","D");  //價格在50~100的股票
if close>=100 and close<500 then condition2=(close+0.5*tickcount) > GetField("漲停價","D"); //價格在100~500的股票
if close>=500 and close<1000 then condition2=(close+1*tickcount) > GetField("漲停價","D");  //價格在500~1000的股票

//成交量限制
input:minV(500,"最小成交量");
condition5 = getfield("volume","D")[1]>minV;

//綜合判斷
condition99 = condition2 and condition5;

//進場
if Position = 0 and filled=0 and condition99 then begin       
 SetPosition(1,Market);       
end; 



if Position = 0 and filled=0 and condition2 then setposition(1); 

If position>0 and filled>0 and (close > filledavgprice*1.08 or close< filledavgprice*0.92) then setposition(0);

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

Hello charlie1234,

 

小幫手這邊用您出現錯誤的商品作測試沒有發生您文章中的狀況。(參考附圖)

如果可以的話麻煩您提供回測使用的參數 (截圖或回測報告儲存檔皆可) 以及 XQ Log 來確認。

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

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

感謝。

 

如果要小幫手猜測的話,這幾檔商品上市的日期都不久,所以若資料讀取筆數設得過長的話會壓縮到回測可進場的區間。

若是大於這區間 (1年) 的話會出現資料筆數不足的狀況。

您可以試著將資料讀取筆數縮短看能否正常回測。

附加文件

charlie1234 發文於   2023/03/23

我的還是會出錯

不過應該就像您說的,都是些新上市股才會發生問題

Log檔在這

https://drive.google.com/file/d/119MCvZFg5lLmC9Zuq95J16cQYFzoQPeq/view?usp=sharing

XQ小幫手 發文於   2023/03/29

Hello charlie1234,

 

相關人員測試沒有發生 漲停價 欄位資料為空的狀況,只有發生資料不足的狀況。

 

資料不足的狀況則是因為若該商品資料長度不足,資料讀取筆數會壓縮到回測可執行的區間。

若讀取筆數比該商品歷史資料還長,就會發生回測區間沒有資料,資料都被用在資料讀取區間運算的狀況。

 

小幫手簡單舉個例子:

A商品總共只有100筆資料,而回測區間為過去300根Bar。

如果讀取筆數設為50筆的話,最後的資料分配就會是 50 筆當作讀取筆數,50筆當作回測區間。

但如果讀取筆數設為100筆以上的話,最後所有資料就會分配到讀取筆數那邊,導致回測區間沒有資料。

 

所以就如同小幫手上面的建議,將資料讀取筆數縮短和縮小回測範圍,避免回測可執行區間沒有資料的狀況。

發表回覆
Close