回測無法產出結果

  •   30 
  • 最後發表   Remus  2021 十一月 30
Remus 發文於   2021/11/27

input: OpenGapRatioLow(2, "開盤漲跌幅低 (%)"), OpenGapRatioHigh(3, "開盤漲跌幅高 (%)");

input: RaiseRatioLow(5, "嘎空漲跌幅低 (%)"), RaiseRatioHigh(7, "嘎空漲跌幅高 (%)");

input: RaiseRatioTimeStart(093000, "開始時間"), RaiseRatioTimeFinish(100000, "結束時間");

 

// 開高

condition1 = GetField("Open", "D") > GetField("RefPrice", "D");

 

// 股價介於 2 ~ 3%

variable: PriceChangeRatio(0);

PriceChangeRatio = ((close - GetField("RefPrice", "D"))/GetField("RefPrice", "D")) * 100;

condition2 = OpenGapRatioLow <= PriceChangeRatio and priceChangeRatio <= OpenGapRatioHigh;

 

if condition1 and condition2 then begin

// 時間介於 0930 ~ 1000

condition3 = RaiseRatioTimeStart < time and time < RaiseRatioTimeFinish;

while condition3 begin

// 更新當前最新漲跌幅

PriceChangeRatio = ((close - GetField("RefPrice", "D"))/GetField("RefPrice", "D")) * 100;

condition4 = RaiseRatioLow <= PriceChangeRatio and priceChangeRatio <= RaiseRatioHigh;

if condition4 then begin

ret = 1;

break;

end;

end;

end;

 

將警示進行回測時,發現回測都跑不出結果來,不確定是沒有符合策略的情境還是說語法表示錯誤

還請大大們幫忙 review

XQ小幫手 發文於   2021/11/30

Hello Remus,

 

您的while只要condition4不是True的話,就會是無窮迴圈。

您需要定義結束或是改用for迴圈指定迴圈次數。

另外您迴圈內也全都是相同的判斷,這樣的話不需要用迴圈。

還有condition2有要求股價要介於 2~3% ,condition4又要介於 5~7%,這樣無法同時達成。

推測您應該是指開盤開高2~3%。

附上修改後的警示腳本供您參考。

附加文件

  • 按讚來自於
  • remuswu1019
發表回覆
Close