你好 : 想請教簡單寫了盤中創N日新高的策略雷達警示如下:
input: y(500, "創過去幾日新高");
condition1 = Highest(high, 1) >= simpleHighest(High, y);
If condition1 then ret=1;
但會發現K棒不足500日的會造成錯誤 , 請問有辦法讓K棒不足500日的也抓出創新高的嗎,而不要略過,不然有些較新上市的也創新高的會沒抓出來,非常感謝。
你好 : 想請教簡單寫了盤中創N日新高的策略雷達警示如下:
input: y(500, "創過去幾日新高");
condition1 = Highest(high, 1) >= simpleHighest(High, y);
If condition1 then ret=1;
但會發現K棒不足500日的會造成錯誤 , 請問有辦法讓K棒不足500日的也抓出創新高的嗎,而不要略過,不然有些較新上市的也創新高的會沒抓出來,非常感謝。
input: y(500, "創過去幾日新高");
value1=GetFieldStartOffset("收盤價","D"); //抓第一筆資料距離現在有幾天
if value1>=y and GetField("最高價","D")>=simpleHighest(GetField("最高價","D")[1], y)
then ret=1;
感謝教授!
不過這樣跑回測沒有出現任何交易紀錄耶!
GetFieldStartOffset這個函數,目前只支援選股腳本。你把上述程式寫成選股腳本回測就沒問題。
若要在警示腳本使用,程式要修改如下:
input: y(500, "創過去幾日新高");
value1=GetFirstBarDate; //抓第一筆資料的日期
value2=getbarOffset(value1);
if value2>=y and GetField("最高價","D")>=simpleHighest(GetField("最高價","D")[1], y)
then ret=1;
了解了 可以成功了 謝謝教授!!!!
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;
這樣就會讓資料不夠長的商品只判斷有資料的部分。
感謝 虎科大許教授 的熱心回覆。
5 評論