指定區間最高價與最低價異常

  •   156 
  • 最後發表   小彬  2021 十月 20
小彬 發文於   2021/10/18

小幫手您好~

參照討論區所討論範例,我想指定區間(除息日與上一個除息日間)跑出最高價與最低價,問題如下:

1.照for...downto...照語法應該是value1=今年除息日 value3=去年除息日才會跑出最高價出來,為何使value1=去年除息日 ,value3=今年除息日,如下語法才能跑出最高價.

2.照程式邏輯為何跑不出最低價出來?

程式碼如下:

var:i(0);
ret=1;
value1 = GetBarOffset(GetField("除息日期")[1]); 
value3 = GetBarOffset(GetField("除息日期")); 

for i=value1 downto value3 
begin 
if close[i] > value4 and date >GetField("除息日期")[1] and date < GetField("除息日期") then 
value4=close[i];

if close[i] < value5 and date > GetField("除息日期")[1] and date < GetField("除息日期") then 
value5=close[i];
end;

outputfield1(value4,"最高價");
outputfield2(value5,"最低價");

XQ小幫手 發文於   2021/10/20

Hello 小彬,

 

GetBarOffset是取得當下的日期與指定日期間的相對位置。

所以間隔越久,回傳的數字就會越大,value1會大於value3。

這樣的話for迴圈就要使用 down to ,因為您是把 value1 放在前面。

您可以實際print出來就可得知。

 

另外最低價之所以跑不出來是因為 value4 與 value5 預設的值會是0。

應該是沒有價格會比0低,那麼value5就不會更新。

小幫手建議您可以在for迴圈前加上:

value4 = 0;               //最高價預設0

value5 = 99999999999;     //最低價預設99999999999

這樣兩個數字就一定會更新,即可跑出最高最低價。

發表回覆
Close