常用的仿超級績效選股腳本突發錯誤"欄位資料不存在"請問要怎麼解?

  •   2.1K 
  • 最後發表   愛用者  2024 十一月 27
愛用者 發文於   2024/10/02

小編好、大家好,以下是我的選股腳本,是仿照超級績效的選股方法,事實上這個腳本我從9月中開始用到昨天都執行得很順利,直到今天2024/10/01號突然崩潰了,錯誤訊息都顯示”欄位資料不存在”

 

!!!腳本摘要:

 

setbarfreq("AD");

 

VAR:MA50(0),MA150(0),MA200(0),HIGH52(0),LOW52(0);

 

MA50=average(close,50);

 

MA150=average(close,150);

 

MA200=average(close,200);

 

HIGH52=simpleHighest(getfield("high", "AD"), 260);

 

LOW52=simplelowest(getfield("Low", "AD"), 260);

 

input: volLimit(400);

 

 

 

condition1=CLOSE>MA50;

 

condition2=MA50>MA150;

 

condition3=MA150>MA200;

 

condition4=CLOSE>=LOW52*1.3;

 

condition5=CLOSE>=HIGH52*0.75;

 

condition6=average(getfield("Volume", "D"),5)>=volLimit;

 

 

 

//套用PR_NW函數(週期單位為week)

 

SetTotalBar(52);

 

input:period(52);

 

VALUE1=PR_NW(period);

 

outputField(1,value1,"PR");

 

         

 

ret = condition1 and

 

      condition2 and

 

      condition3 and

 

          condition4 and

 

          condition6;

 

!!! PR_NW函數腳本,這是用來計算股票在N週內漲幅排行的腳本,用PR值來表示相對強度,就像國中會考的排名一樣PR值99以上代表很強(因為程式碼很長,中間重複性的地方用…略過,完整PR_NW函數腳本請見附件)

 

 

//獲取取所有股票當前還原價格並定義為valueSeriesA數列

 

input:period(Numeric,"RS期別");

 

Array: valueSeriesA[946](0);

 

valueSeriesA[1]=GetSymbolField("1101.TW","收盤價","D",Adjusted:=true);

 

valueSeriesA[2]=GetSymbolField("1102.TW","收盤價","D",Adjusted:=true);

 

valueSeriesA[3]=GetSymbolField("1104.TW","收盤價","D",Adjusted:=true);

 

…..

 

valueSeriesA[945]=GetSymbolField("9960.TW","收盤價","D",Adjusted:=true);

 

valueSeriesA[946]=GetSymbolField("9962.TW","收盤價","D",Adjusted:=true);

 

//獲取取所有股票N週前還原價格並定義為valueSeriesB數列

 

Array: valueSeriesB[946](0);

 

valueSeriesB[1]=GetSymbolField("1101.TW","收盤價","W",Adjusted:=true)[period];

 

valueSeriesB[2]=GetSymbolField("1102.TW","收盤價","W",Adjusted:=true)[period];

 

valueSeriesB[3]=GetSymbolField("1104.TW","收盤價","W",Adjusted:=true)[period];    

 

 

valueSeriesB[945]=GetSymbolField("9960.TW","收盤","W",Adjusted:=true)[period];

 

valueSeriesB[946]=GetSymbolField("9962.TW","收盤","W",Adjusted:=true)[period]; 

 

 

 

 

 

//計算所有股票還原相對強弱值並定義為valueSeriesC數列

 

Array: valueSeriesC[946](0);

 

valueSeriesC[1]=(valueSeriesA[1]-valueSeriesB[1])/ valueSeriesB[1]* 100;

 

valueSeriesC[2]=(valueSeriesA[2]-valueSeriesB[2])/valueSeriesB[2]* 100;

 

 

valueSeriesC[945]=(valueSeriesA[945]-valueSeriesB[945])/valueSeriesB[945]* 100;

 

valueSeriesC[946]=(valueSeriesA[946]-valueSeriesB[946])/valueSeriesB[946]* 100;

 

 

 

 

 

// 獲取對象當前還原收盤價

 

value1=GetField("Close","D",Adjusted:=true);

 

// 獲取對象N週前還原收盤價

 

value2=GetField("Close","W",Adjusted:=true)[period];

 

// 計算對象N週相對強弱

 

value50=(value1-value2)/value2*100;

 

//用計數方式獲取VALUE50的排名

 

variable:count(0);

 

count=1;

 

variable:i(0);

 

i=1;

 

for i =1 to 946

 

begin

 

if value50> valueSeriesC[i] then count=count+1;

 

end;

 

//計算PR值

 

VALUE51=(count-1)/945*100;

 

PR_NW=VALUE51;

 

遇到的問題:

 

1.     已經執行了一陣子都沒有錯誤,頂多程式碼大跑起來較慢而已,今天選股就突然出現錯誤檔數1832,錯誤訊息”欄位資料不存在”

 

2.     經過測試知道錯誤出現在PR_NW函數腳本,但不確切問題出在哪

 

3.     PR_NW函數我也有把它最後加上plot1(VALUE51)寫成作圖的指標腳本,而指標腳本也是從9月中用到現在沒事,但今天就出現錯誤”商品不存在”

 

4.     有試過在函數腳本跟選股腳本一開始加入DataAlign(1),但還是出現相同錯誤

 

5.     有想過是不是有的股票剛好在10月1號下市而造成的錯誤,但不是,因為全部的商品在選股頁面都出現錯誤訊號”欄位資料不存在”

 

請問有沒有人遇到過類似問題,或知道如何解決這個錯誤訊息?非常感謝!

 

 

附加文件

排序方式: 標準 | 最新
XS小編 發文於   2024/10/08

Hello 愛用者,

 

小編認為是因為您使用到已下市的資料。

舉例來說,函數中的1701.TW已經在 113/09/02 時終止上市。

若取用該商品的資料的話會出現資料不存在的錯誤。

Hello 發文於   2024/11/23

請問小編,這種資料不存在的錯誤有什麼例外判斷機制可以略過嗎?

例如程式語言常有exception的例外處理機制,以下是非XS語法的例外處理範例:

try:

if 1/x >0 then print(1/x);

exception:

print(0);

Hello 愛用者,

小編認為是因為您使用到已下市的資料。

舉例來說,函數中的1701.TW已經在 113/09/02 時終止上市。

若取用該商品的資料的話會出現資料不存在的錯誤。

XS小編 發文於   2024/11/27

Hello Hello,

 

沒有。

相關人員有在規劃讓使用者可以自行設定當遇到欄位不存在時直接回傳的預設值,如此應可避免此種狀況發生。

發表回覆
Close