請問有關訊號暫停功能的程式邏輯寫法

  •   139 
  • 最後發表   hansen  2022 三月 09
hansen 發文於   2022/03/09

小幫手您好,我想寫一個使用連續觸發+逐筆洗價的訊號,但是希望訊號觸發後能夠暫停一段時間不再觸發,所以寫了一段程式想達成"暫停一段時間不觸發"的功能,但是測試後發現訊號會在單根bar內連續觸發,問題應該是在"無法檔單根bar內連續觸發",以下是我的程式碼(為了簡化,排除了觸發條件部分程式碼),想請問小幫手為何我寫的邏輯無法順利運行? 應該怎麼寫才能達到這個功能? 謝謝

使用頻率 : 1分K

變數說明 :

is_ret : 用來擋連續觸發,因為是逐筆洗價,所以加上intrabarpersist,防止單跟bar內連續觸發

buffer_count : 用來記數暫停的時間(bar數)

buffer_lengh : 訊號暫停的時間(bar數)

 

程式碼 :

var : intrabarpersist is_ret(false), buffer_count(0), buffer_lengh(30);

// ---訊號暫停部分程式碼---

if is_ret = true then

begin

buffer_count = buffer_count + 1;  // 累加暫停bar數

if buffer_count > buffer_lengh then  // 暫停結束

begin

is_ret = false;  // 關閉暫停flag 繼續偵測

buffer_count = 0;

end

else return;  // 暫停bar數條件未達,繼續暫停偵測

end;

// ---訊號觸發部分程式碼---

condition1 = 觸發條件;

if condition1 then 

begin

is_ret = true;  // 訊號觸發,開啟暫停流程

ret = 1;

end;

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

Hello hansen,

 

這是因為您的buffer_count並不是intrabarpersist,所以若在當根Bar buffer_count > buffer_lengh 符合的話,要到該根Bar結束的時候 buffer_count 才會變為0。

所以只要該根Bar觸發條件有多次達成的話,一樣還是還是會警示。

小幫手建議您最簡單的辦法是將雷達的設定更改為K棒內單次觸發,這樣同一根Bar就不會連續觸發。

另外一種方法是用intrabarpersist的變數紀錄時間,然後使用 timeadd 判斷在過了一段時間後才可以再度觸發。

  • 按讚來自於
  • hansheng08
hansen 發文於   2022/03/09

原來如此,謝謝小幫手! 

發表回覆
Close