intrabarpersist限制啓動後只觸發一次

  •   469 
  • 最後發表   生生  2022 五月 10
生生 發文於   2022/05/05

如果我希望我的脚本print可以和系統一樣執行後只觸發一次的話,我需要怎麽改我的Intrabarpesist,下面附上我的脚本

 

var: intrabarpersist oncePerBar(0);

variable: tr(0);

 

tr= ( (close-GetField("最高價","D"))/GetField("最高價","D") )*100;

if tr<=-2 and GetInfo("IsRealTime") = 1 and oncePerBar<> currentbar then begin

    ret=1;

    print(file("C:\print\print.log"),date,symbol,close); 

    oncePerBar= currentbar;  //若當根Bar已經執行過,limit就會記錄當根Bar的編號避免再度執行。

    end;

排序方式: 標準 | 最新
貓老大 發文於   2022/05/05

試試看改成這樣:

if oncePerBar<> currentbar then begin

  if tr<=-2 and GetInfo("IsRealTime") = 1 then begin
    ret=1;
    print(file("C:\print\print.log"),date,symbol,close); 
    end;

  end;

oncePerBar= currentbar;  //若當根Bar已經執行過,limit就會記錄當根Bar的編號避免再度執行。

 

生生 發文於   2022/05/06

我跟著你的方法改了,可是print的時候還是會每根bar都洗一次,并沒有只處罰一次

var: intrabarpersist oncePerBar(0);

variable: tr(0);



tr= ( (close-GetField("最高價","D"))/GetField("最高價","D") )*100;
if oncePerBar<> currentbar then begin

    if tr<=-2 and GetInfo("IsRealTime") = 1 then begin

        ret=1;

        Print(file("C:\print\print.log"),FormatDate("yyyy/MM/dd", currentDate),FormatTime("HH:mm:ss", currentTime),symbol,symbolName);

        end;
    end;

oncePerBar= currentbar;

GaryChiang 發文於   2022/05/06

把19行, 移到15行的位置應該就可以了!

生生 發文於   2022/05/06

還是沒辦法欸,我系統設定一分鐘,啓動後只觸發一次,然後勾選逐筆洗價,系統確實都只是觸發一次,可是print出卻是每一根bar都會洗一次

XQ小幫手 發文於   2022/05/10

Hello 生生,

 

您用 oncePerBar<> currentbar 這種方式來限制,會變成每根Bar都觸發一次。

如果是要啟動後只能觸發一次的話,應該是要 oncePerBar = 0 才對。

舉例來說:

var: intrabarpersist oncePerBar(0);

variable: tr(0);

 

tr= ( (close-GetField("最高價","D"))/GetField("最高價","D") )*100;

if tr<=-2 and GetInfo("IsRealTime") = 1 and oncePerBar = 0 then begin

    ret=1;

    print(file("C:\print\print.log"),date,symbol,close); 

    oncePerBar = 1;

    end;

 

感謝 貓老大 和 GaryChiang 的熱心回覆。 

發表回覆
Close