盤中創N日新高

  •   552 
  • 最後發表   fgh  2024 九月 24
fgh 發文於   2024/09/16

你好 :  想請教簡單寫了盤中創N日新高的策略雷達警示如下:

 

input: y(500, "創過去幾日新高");

condition1 = Highest(high, 1) >= simpleHighest(High, y);

If condition1 then ret=1;

但會發現K棒不足500日的會造成錯誤 , 請問有辦法讓K棒不足500日的也抓出創新高的嗎,而不要略過,不然有些較新上市的也創新高的會沒抓出來,非常感謝。

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/09/17

input: y(500, "創過去幾日新高");

value1=GetFieldStartOffset("收盤價","D"); //抓第一筆資料距離現在有幾天

if value1>=y and GetField("最高價","D")>=simpleHighest(GetField("最高價","D")[1], y)

then ret=1;

fgh 發文於   2024/09/17

感謝教授! 

不過這樣跑回測沒有出現任何交易紀錄耶!

虎科大許教授 發文於   2024/09/17

GetFieldStartOffset這個函數,目前只支援選股腳本。你把上述程式寫成選股腳本回測就沒問題。

若要在警示腳本使用,程式要修改如下:

input: y(500, "創過去幾日新高");

value1=GetFirstBarDate; //抓第一筆資料的日期

value2=getbarOffset(value1);

if value2>=y and GetField("最高價","D")>=simpleHighest(GetField("最高價","D")[1], y)

 

then ret=1;

fgh 發文於   2024/09/17

了解了 可以成功了  謝謝教授!!!!

XS小編 發文於   2024/09/24

Hello fgh,

 

小編補充,如果使用選股腳本的話,可以直接用 GetFieldStartOffset 來取得該商品有幾筆資料,並以此判斷要抓多長。

舉例來說:

 

value1=GetFieldStartOffset("收盤價","D");

 

if value1 <= 500 then begin

    condition1 = high > simplehighest(high[1], value1-1);

    end

else begin

    condition1 = high > simplehighest(high[1], 500);

    end;

 

if condition1 then ret = 1;

 

這樣就會讓資料不夠長的商品只判斷有資料的部分。

 

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close