資料欄位為空

  •   129 
  • 最後發表   Sherlock  2022 四月 19
Sherlock 發文於   2022/04/01

XQ您好, 

近期更新之後發現原本寫的交易模組回測異常了

 

部分代碼如下:

MA_60 = average(day_close, 60);

condition3 = close[1] < close[2]*1.09; //前一日漲停不追

condition4 = close > MA_60 and MA_60 > MA_60[1];

 

if getfielddate("大戶持股比例", "W",param:=400) <> date then 

value1 = getfield("大戶持股比例", "W")[1] 

else 

value1 = getfield("大戶持股比例", "W");

 

if getfielddate("散戶持股比例", "W",param:=100) <> date then 

value2 = getfield("散戶持股比例", "W")[1] 

else 

value2 = getfield("散戶持股比例", "W");

 

 

請問是怎麼樣的問題?

附加文件

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/04/07

Hello Sherlock,

 

小幫手這邊簡單的測試了一下,沒有發生您所說的狀況。(參考附圖)

需要麻煩您提供 腳本、回測的設定(回測報表或截圖皆可) 以及 XQ Log 來檢驗。

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

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

感謝。

附加文件

Sherlock 發文於   2022/04/12

input:r1(2);//本週大戶增加比例

input:r2(1);//本週散戶減少比例

input:r3(3);//本月大戶增加比例

input:r4(2);//本月散戶減少比例

 

var: MA_60(0), day_close(0), day_high(0);

 

day_close = getField("收盤價", "D");

day_high = getField("最高價", "D");

 

MA_60 = average(day_close, 60);

condition3 = (close / close[1] -1) > 0.05;

condition4 = close > MA_60 and MA_60 > MA_60[1];

condition5 = close > NthHighest(1, close, 20)*0.97;// or (close/NthHighest(1, close, 20) -1) < 0.05;

 

if getfielddate("大戶持股比例", "W",param:=400) <> date then 

value1 = getfield("大戶持股比例", "W")[1] 

else 

value1 = getfield("大戶持股比例", "W");

 

if getfielddate("散戶持股比例", "W",param:=100) <> date then 

value2 = getfield("散戶持股比例", "W")[1] 

else 

value2 = getfield("散戶持股比例", "W");

 

condition1 = (value1 - value1[1] > r1 or  value1 - value1[3] > r3) and (value2[3] - value2 > r4 or value2[1] - value2 > r2);

 

condition2 = volume > 1000;

 

if condition1 and condition2 

and condition3 and condition4 and condition5 

and close > average(close, 5)

and average(close, 5) > average(close, 5)[1]

and volume > 1000

and position = 0 then

begin

 

if close[1] > 10 and close[1] < 20 then setposition(10);

if close[1] > 20 and close[1] < 30 then setposition(6);

if close[1] > 30 and close[1] < 40 then setposition(5);

if close[1] > 40 and close[1] < 80 then setposition(4);

if close[1] > 90 and close[1] < 120 then setposition(2);

if close[1] > 120 and close[1] < 200 then setposition(1);

end;

 

condition7 = volume > average(volume, 5) and (close/close[1] - 1) < -0.05;

if position > 0 then

begin

if close < average(GetField("收盤價", "D"), 5) and average(close, 5) < average(close, 5)[1] and condition7 then //可以減碼的部位

begin

 

setPosition(0);

end;

 

if close < average(close, 10) then setPosition(0);

end;

 

 

XQ小幫手 發文於   2022/04/19

Hello Sherlock,

 

小幫手認為應該是因為時間對位所導致的錯誤,您可以實際把日期print出來確認。

print(date, getfielddate("大戶持股比例", "W",param:=400), getfielddate("大戶持股比例", "W",param:=400)[1]); 

由於XQ的時間日期是以該資料開始的時間記錄,所以週的資料會標在星期一,所以回測到星期一時 getfielddate("大戶持股比例", "W",param:=400) 就會等於 date,但實際上該週的大戶持股比例還未更新。(要週末才會更新)

小幫手會建議您直接使用 value1 = getfield("大戶持股比例", "W")[1]; 比較符合實際狀況,回測也不會失敗。

發表回覆
Close