請問各位賢達~
在期貨商品交易中,
如何撰寫程式,可以避免在同一根K棒內反覆觸發呢? (單根K棒內只觸發一次)
謝謝大家無私回覆
應該是這樣吧,沒有測試過,有問題再說。
//環境設定:僅適用分鐘頻率(也可用於逐筆交易)
var:intraBarPersist bar_once_ret(0), //警示次數,0=尚未觸發警示,1=已觸發警示過一次
_time(0); //記錄K棒時間給下次跑腳本使用
//在第一根K棒的時候,開始允許進入判斷
if issessionFirstBar then begin bar_once_ret = 0;_time=time;end;
//換K棒的時候,才可以進行if判斷
if time<>_time then bar_once_ret = 0;
//觸發警示條件判斷(自行增加條件)
if bar_once_ret = 0
then begin
bar_once_ret= 1; //只要觸發1次警示,下次就不進入判斷
ret=1;
end;
Hello XUKG,
您可以使用intrabarpersist宣告的變數,來記錄觸發當下Bar的序號。
一個序號只能觸發一次即可。
舉例來說:
var: intrabarpersist _oncePerBar(0);
condition1 = ...觸發條件...;
if condiiton1 and _oncePerBar <> currentbar then begin
...觸發動作...
_oncePerBar = currentbar;
end;
這樣1根bar就只會執行一次觸發動作。
感謝 musashi 的熱心回覆。
感謝您的分享!! 非常有幫助!~ 謝謝!
小幫手總是不會讓人失望! 謝謝您~
只是這段有點看不太懂...這段是要放在策略什麼位置呢?
_oncePerBar = currentbar;
end;
Hello XUKG,
這是放在您希望1根Bar只想觸發1次地部分。
舉例來說,假設您是用策略雷達,然後條件是收盤價向上跨越10期均線的話:
var: intrabarpersist _oncePerBar(0);
condition1 = close cross over average(close, 10);
if condition1 and _oncePerBar <> currentbar then begin
ret = 1; //警示
_oncePerBar = currentbar; //更新 _oncePerBar 的數值
end;
這樣1根Bar只會警示1次收盤價向上跨越10期均線。
5 評論