找出一段漲幅中最大的回檔

  •   167 
  • 最後發表   阿白  2021 七月 21
阿白 發文於   2021/07/19

小幫手您好:

我想找出一年當中最大振幅中的最大回檔,顯示在選股結果的一個欄位中,我只要做數值運算,實際上沒有要篩選任何股票,但是我結果跑不出來,能不能幫我看看是哪裡出了問題呢?

以下是我的code:

settotalbar(500);
DataAlign(1);

//設定日期區間
value1=CurrentDate;                                                    //現在日期
value7=getbaroffset(EncodeDate(year(value1),01,02));                   //年初K棒位置
value2=lowestbar(getfield("low","D"),value7);                          //期間最低點位置
value4=extremes(getfield("low","D"),value7,-1,value5,value6);

var:Count(0);
var:temp(0);
var:temp_high_bar(0);
var:temp_high_exbar(0);
var:temp_high(0);
var:highrange(0);
var:temp_highrange(0);
var:i(0);

temp_high_exbar = value2;

For i = 1 to value2 Begin
    if getfield("low","D")[i] = lowest(getfield("low","D")[i-3],7) then begin 
        Count = Count + 1;
        temp = getfield("low","D")[i];
        temp_high_exbar = temp_high_bar;
        temp_high_bar = i;
        temp_high = highest(getfield("high","D")[i],temp_high_exbar - i);
        temp_highrange = (temp_high-temp)/value5*100;
        if temp_highrange > highrange then highrange = temp_highrange;
        end;
    End;

ret = 1;

outputfield1(highrange);

XQ小幫手 發文於   2021/07/21

Hello 阿白,

 

您的錯誤發生在第22行:

if getfield("low","D")[i] = lowest(getfield("low","D")[i-3],7) then begin

由於for迴圈是從1開始起算,所以[i-3]會發生負數的情況,進而造成錯誤。

建議您讓for迴圈從3開始起算,或是使用 maxlist 函數將

getfield("low","D")[i-3] 修改成 getfield("low","D")[maxlist(i-3, 0)]即可。

發表回覆
Close