腳本裡的計數器為什麼不管用?

  •   559 
  • 最後發表   小散戶  2021 十一月 03
小散戶 發文於   2021/10/31

小幫手好,

我練習寫了一個腳本去計算漲停板持續的時間,用日線回測看結果

我的想法是:

因為日線的逐筆回測是用一分鐘K去模擬的,那我就加了一個計數器

日K棒的OHLCV會有270次資料的更新

當Close=漲停價時,我計數器就+1

這樣日K就能獲得漲停的時間累積(分鐘)

同理,漲停後若再打開,我再用一個計數器算出炸開的時間(分鐘)

可是寫這一步print出來發現確實漲停後的每分鐘都跳進if流程

如果某一天漲停持續30分鐘,就print結果30次

但是計數器的值卻都一直是1, 無法得到我想要的30

我以為是變數宣告問題,然而intrabarpersist不管加上與否都結果一樣

看了intrbarpersist範例,感覺越看越不懂

在日線回測條件下,time=0, 無法用timediff函數

那我這個計數器問題是什麼原因?

腳本需要改成以分鐘回測嗎?

我想寫一個警示腳本,能計算一天中漲停板的持續時間,還有中途漲停打開的累計時間

還有打開後又封回漲停板的次數累計

特別是一天中開開關關這種漲停板好難寫

 

settotalbar(Length + 3);

 

variable:intraBarPersist utime(0);

 

if date > date [1] then utime=0;

 

if BarFreq = "D" and OpenD(0) < GetField("漲停價", "D") then 

    if Close = GetField("漲停價", "D") then

    begin

utime += 1;

print("Date",date,"time",time,"utime", numtostr(utime,1));

ret=1;

    end;

 

 

 

 

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/11/03

Hello 小散戶,

 

雖然您使用了逐筆,會用1分鐘頻率去模擬日頻率的狀況,但終究還是日頻率。

在 if date > date [1] then utime=0; 這部分date永遠會大於前一根日頻率Bar的date,所以utime會一直被歸0。

您可以跨頻率取用1分鐘頻率的date來作此判斷。

附上警示腳本供您參考。

附加文件

小散戶 發文於   2021/11/03

懂了,謝謝小幫手

發表回覆
Close