小編好、大家好,以下是我的選股腳本,是仿照超級績效的選股方法,事實上這個腳本我從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號下市而造成的錯誤,但不是,因為全部的商品在選股頁面都出現錯誤訊號”欄位資料不存在”
請問有沒有人遇到過類似問題,或知道如何解決這個錯誤訊息?非常感謝!
3 評論