(許教授解答用GetField取得原始日資料) 原問題:用CountIf判斷GetField("漲停價"),但觸發次數異常高

  •   290 
  • 最後發表   老狼  2025 三月 21
老狼 發文於   2025/03/20

用CountIf判斷GetField("漲停價")

SetBarFreq("AD"); // 限定還原日
value1 = CountIf(h >= GetField("漲停價"), 252); // 過去1年觸及漲停價
if value1 >= 1 then ret = 1; // 有觸及就符合
outputfield(1, value1, 0, "漲停次數"); // 輸出觸及次數

但觸發次數異常高(附圖),敬請小編指正,謝謝!

附加文件

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/03/20

漲停價並沒有還原價格,都是原始價格。幾檔漲停次數高的股票,例如2025、3115都是因為減資,價格大幅調高,因此次數很高。

老狼 發文於   2025/03/21

感謝許教授專業解說,我曾採用UpLimit(CloseD(1))計算
結果很可怕,每檔1年期間都是252次以上(附圖)
而GetField("漲停價")又不能使用還原價
造成2種方案的結果都有缺點,請教許教授都是如何解決呢?

SetBarFreq("D"); // 限定非還原日
value1 = CountIf(h >= UpLimit(CloseD(1)), 252); // 過去1年觸及漲停價
if value1 >= 1 then ret = 1; // 有觸及就符合
outputfield(1, value1, 0, "漲停次數"); // 輸出觸及次數
outputfield(2, h, 2, "最高價"); // 輸出最高價
outputfield(3, UpLimit(CloseD(1)), 2, "漲停價"); // 輸出漲停價

 

附加文件

虎科大許教授 發文於   2025/03/21

(1)抓漲停價盡量不要用UpLimit及CloseD這種函數,函數運算會根據主頻率運算,容易出現邏輯錯誤。最好直接用GetField抓資料庫的數據。

(2)你的情況由於使用漲停價,不能使用還原日資料,改成原始日資料才行。

發表回覆
Close