barslast

  •   47 
  • 最後發表   rw  2024 二月 21
rw 發文於   2024/02/21

選股腳本如下:
SetBarFreq("W");
input: N(52,"計算新高週數");
//input: T(26, "T週以來");
value1 = highest(high,N);
value2 = barslast(high = highest(high,N));
value3 = highest(high,N)[1]; //上一個52週最高價
value4 = barslast (high = highest(high,N)[1]); //上一個高價=52週最高價週數位置
value5 = barslast(high < highest(high,N));//上一個高價<52週最高價週數位置
value6 = barslast(barslast(high<highest(high,N))<>0);

if value1 = high //and value4 >= T
then ret=1;

outputfield(1,value1,2,"52週最高價");
outputfield(2, value2, 2, "value2");
outputfield(3, value3, 2, "value3");//上一個52週最高價
outputfield(4, value4, 2, "value4");//上一個高價=52週最高價週數位置
outputfield(5, value5, 2, "value5");;//上一個高價<52週最高價週數位置
outputfield(6, value6, 2, "value6");


選擇2023/7/28執行以上選股腳本, 資料讀取選208筆, 指定頻率 週

得到結果有以下問題:

Q1:

#5: 1319東陽, 在2023/7/28時, value3(上一個52週最高價)是57.20(2022/9/16),

value4(上一個高價=52週最高價週數位置)應為44, 結果為何是208?

 Q2:

 #23: 2301光寶科, 在2023/7/28時, value3(上一個52週最高價)應是153.5(2023/7/21), 但結果是146(2023/7/14)?

 value4(上一個高價=52週最高價週數位置)應為1, 結果為何是11?

 我的目的是要選出26(或其他參數)週以來第一次創52週高價的股票?

 請問我應該如何修改我的程式或設定?

XS小編 發文於   2024/02/21

 Hello rw,

 

1. high 會是當週的最高價,highest(high,N)[1] 會是包含上一週開始的N週最高價 (小編會建議您使用 highest(high[1],N) 避免出現錯誤)。

也就是 high 本身不會包含在 highest(high,N)[1] 裡,故若沒有剛好相同的價格是有可能出現比向前比對完卻沒有對應價格的狀況。

這邊應該修改為 value4 = barslast (high[1] = highest(high[1],N));,且由於比對的是前一根Bar,所以 value4 要在加1才會是正確的對應位置。

 

2. 就是小編前面提的可能出現的錯誤,函數後面不適合接[1]來抓取前期值。

若改成 highest(high[1],N) 就會是 153.5 和 1 (參考附圖)。

 

要選出N週以來第一次創52週高價的股票,可以參考countif函數。

舉例來說,近10週內第一次創52週高價可以如此寫:

value1 = highest(high, 52);

condition1 = value1 = high;

if condition1 and countif(condition1, 10) = 1 then ret = 1;

附加文件

發表回覆
Close