Intraday drawdown circuit breaker?

Questions about MultiCharts and user contributed studies.
User avatar
ZaphodB
Posts: 64
Joined: 12 Feb 2019
Has thanked: 20 times
Been thanked: 2 times

Intraday drawdown circuit breaker?

Postby ZaphodB » 19 Mar 2020

Good afternoon,

I'm working on a strategy that day trades only one instrument. Several trades per day. I want the strategy to stop trading for the day if a certain drawdown is reached and I want to be able to backtest it. I'm familiar with MaxIDdrawdown, however, that doesn't reset each day. If one day trips the circuit breaker then the breaker is forever tripped and the strategy will no longer trade, negating my backtest results. I don't want to re-invent the wheel but my search for a solution has been fruitless. Does a good/simple solution already exist for this? Thank you

Zaphod

User avatar
Svetlana MultiCharts
Posts: 645
Joined: 19 Oct 2017
Has thanked: 3 times
Been thanked: 163 times

Re: Intraday drawdown circuit breaker?

Postby Svetlana MultiCharts » 01 May 2020

Hello Zaphod,

Here is a code example as an option for you:

Code: Select all

once cleardebug; [IntrabarOrderGeneration = true] Input: drowdown(500);// positive value inputs: LECondition( C > O ) ; inputs: SECondition( C < O ) ; var: intrabarpersist trade_on(true); var: intrabarpersist maxEQ(0); var: intrabarpersist DD(0); var: intrabarpersist EQ(0); var: intrabarpersist maxDD(0); var: intrabarpersist sbremain(0); once EQ = i_OpenEquity; once maxEQ = EQ; EQ = i_OpenEquity; if (maxEQ < EQ) then begin maxEQ = EQ; end; DD = maxEQ - EQ; if (maxDD < DD) then begin maxDD = DD; end; //GVSetNamedDouble("drow_down", maxDD); if (maxDD >= drowdown) then begin trade_on = false; maxEQ = EQ; maxDD = 0; sell (" close drow down (sell) ") next bar at market; buytocover (" close drow down (buy) ") next bar at market; sbremain = 1; end; if sbremain > 0 and sessionlastbar = true and barstatus(1) = 2 then begin sbremain = sbremain - 1; if (sbremain = 0) then begin trade_on = true; end; end; if trade_on then begin if LECondition then begin Buy ( "LE" ) next bar at market; end; if SECondition then begin Sell Short ( "SE" ) next bar at market ; end; end; if sessionlastbar and barstatus(1) = 2 then begin maxEQ = EQ; maxDD = 0; end;

User avatar
ZaphodB
Posts: 64
Joined: 12 Feb 2019
Has thanked: 20 times
Been thanked: 2 times

Re: Intraday drawdown circuit breaker?

Postby ZaphodB » 22 May 2020

Hello Zaphod,

Here is a code example as an option for you:

Code: Select all

once cleardebug; [IntrabarOrderGeneration = true] Input: drowdown(500);// positive value inputs: LECondition( C > O ) ; inputs: SECondition( C < O ) ; var: intrabarpersist trade_on(true); var: intrabarpersist maxEQ(0); var: intrabarpersist DD(0); var: intrabarpersist EQ(0); var: intrabarpersist maxDD(0); var: intrabarpersist sbremain(0); once EQ = i_OpenEquity; once maxEQ = EQ; EQ = i_OpenEquity; if (maxEQ < EQ) then begin maxEQ = EQ; end; DD = maxEQ - EQ; if (maxDD < DD) then begin maxDD = DD; end; //GVSetNamedDouble("drow_down", maxDD); if (maxDD >= drowdown) then begin trade_on = false; maxEQ = EQ; maxDD = 0; sell (" close drow down (sell) ") next bar at market; buytocover (" close drow down (buy) ") next bar at market; sbremain = 1; end; if sbremain > 0 and sessionlastbar = true and barstatus(1) = 2 then begin sbremain = sbremain - 1; if (sbremain = 0) then begin trade_on = true; end; end; if trade_on then begin if LECondition then begin Buy ( "LE" ) next bar at market; end; if SECondition then begin Sell Short ( "SE" ) next bar at market ; end; end; if sessionlastbar and barstatus(1) = 2 then begin maxEQ = EQ; maxDD = 0; end;
Thank you for that, I hadn't checked back here in a while, it looked like I wasn't going to get an answer to this.. but thank you. Will this code work if intrabar order generation is turned off? I think IBOG would mess with the rest of my code..


Return to “MultiCharts”