小幫手好,
嘗試寫個選股腳本,想了解前一次除權息後30天內的最高點為何?
程式碼如下,但找出來的高點幾乎都不是除權息後30天內的最高點,對的只有1104的環泥
settotalBar(300);
input:periodcheck(30,"除權息後幾日");
var: i(0);
if date<>date[1] then begin
ret=1;
if getfield("除權息日期")>=date then i=1 else i=0; //只要已發生的除權息
value1=getfield("除權息日期")[i]; //前一次的除權息日
value2=getfield("除權息值")[i];
value3=getbarOffset(getfield("除權息日期")[i]); //現在距除權息日多少天
value4=closeD(value3+1); //除權息前一日收盤價
value5=highest(high,periodcheck)[value3-periodcheck]; //除權息N天內最高點
end;
outputfield1(value1,"除權息日");
outputfield2(value2,"除權息值");
outputfield3(value3,"距除權息多少日");
outputfield4(value4,"前一日收盤價");
outputfield5(value5,"N日最高價");

為了驗證寫法是否為錯誤,我將裡面的[i]全部改為0,出來的最高價就是正確的 (見下方),
而且經比較兩個結果,除了N日最高價的值不同外,其他值都是一樣的,表示寫法應該是對的
問題1: 為何會上面寫法出來的值就不對? 問題在哪? 要如何修改?
我的i變數要保留,因為會需要取更早之前的除權息資料
settotalBar(300);
input:periodcheck(30,"除權息後幾日");
var: i(0);
if date<>date[1] then begin
ret=1;
//if getfield("除權息日期")>=date then i=1 else i=0;
value1=getfield("除權息日期")[0]; //前一次的除權息日
value2=getfield("除權息值")[0];
value3=getbarOffset(getfield("除權息日期")[0]); //現在距除權息日多少天
value4=closeD(value3+1); //除權息前一日收盤價
value5=highest(high,periodcheck)[value3-periodcheck]; //除權息N天內最高點
end;
outputfield1(value1,"除權息日");
outputfield2(value2,"除權息值");
outputfield3(value3,"距除權息多少日");
outputfield4(value4,"前一日收盤價");
outputfield5(value5,"N日最高價");

問題2: 雖然寫法2有抓到高點,但在核對過程中發現,5520立泰卻還是沒有抓到最高點,不知道是何原因,煩請小幫手了解下

1 評論