[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Is Custom Backtester "reentrant" safe?



PureBytes Links

Trading Reference Links

Hello,
After new trade entry are stopped, the stored equity is updated with
the current equity (not previous highest equity). Now the equity isn't
below the percentage and new trades are allowed.

The open trades continue. The open positions exit when sell signals
occur normally.

But the idea here is that if market (system) is not performing then
new signals shouldn't occur. In effect the system is paused while the
market is adverse or sideays. If market is improving then new signals
are generated and taken.

To track the equity as if all trades are taken, you will need to
create an equity curve and store in a composite. This is accessed
using foreign and the backtest run. The composite would need continual
updating to remain current / valid for trading.
fe


--- In amibroker@xxxxxxxxxxxxxxx, "tiedemj" <home@xxx> wrote:
>
> 
> Half way there. I think the code below will stop trading when your 
> equity is down by 5%. But how do you resume trading when the equity 
> (of the underlying trading system) goes back up again? What I'm 
> trying to do is first calculate a "shaddow" equity as if all trades 
> are taken regardless of equity situation - and then do the "real" run 
> with stop/resume trading based on the previous calculated equity. 
> 
> Any ideas on how to achieve that?
> 
> (in an ideal situation, gain would remain the same, but dropdown 
> would be less, thereby maximizing CAR/MDD)
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "oceanchimes" <oceanchimes@> 
> wrote:
> >
> > Jens,
> > Hope this helps
> > fe
> > 
> > // MONITOR PORTFOLIO EQUITY ROUTINE
> > 
> > // Equity Level is from Highest Equity since start of backtest
> > // OR from last 'Sell all' Signal
> > 
> > // this statement turns ON custom portfolio backtester procedure 
> > SetOption("UseCustomBacktestProc", True ); 
> > 
> > Perc = 0.95;   //Optimize("Perc",0.925,0.90,0.99,0.005);
> > 
> > if( Status("action") == actionPortfolio ) 
> > {
> >  bo = GetBacktesterObject(); 
> >  bo.PreProcess(); 
> >  StoredEquity[0] = CurrentPortfolioEquity[0] = bo.InitialEquity;
> > 
> >  for( bar = 1; bar < BarCount; bar++ ) 
> >  { 
> >   CurrentPortfolioEquity[bar] = bo.Equity;
> > 
> >   //determine the highest portfolio value
> >   if( CurrentPortfolioEquity[bar] > StoredEquity[bar-1] )
> >   { storedEquity[bar] = CurrentPortfolioEquity[bar]; }
> >   else
> >   { StoredEquity[bar] = StoredEquity[bar-1]; }
> > 
> >   //this is low-level  method to exit trades
> >   //if yesterdays folio open equity is below perc %, ignore all at
> > todays open
> >   if( CurrentPortfolioEquity[bar-1] < StoredEquity[bar-1]*perc ) 
> >   {
> >    StoredEquity[bar] = CurrentPortfolioEquity[bar]; //new equity 
> level
> >   
> > //------------------------------------------------------------------
> ------------
> >    //ignore new buy signals
> >    for ( sig=bo.GetFirstSignal(bar); sig; sig=bo.GetNextSignal
> (bar) ) 
> >    {
> >     if( sig.IsEntry() && sig.Price != -1 ) { sig.Price = -1; }
> >    }
> >   }//if portfolio value
> >   bo.ProcessTradeSignals(bar);
> > 
> >  }//for bar 
> >  bo.PostProcess(); 
> > }//if backtester 
> > 
> > 
> > 
> > 
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "tiedemj" <home@> wrote:
> > >
> > > bump - still found no resolution on this...
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "tiedemj" <home@> wrote:
> > > >
> > > > Hello - trying to stop trading activity when portfolio equity 
> is 
> > > > below maxEquity by some pct, and resume trading when "equity" 
> rises 
> > > > above previous maxEquity (where "equity" is as if trading had 
> not 
> > > > been suspended)
> > > > 
> > > > Using custom backttest as follows:
> > > > 
> > > > // first run to collect when to stop/resume trading
> > > > bo.PreProcess(); 
> > > > for( bar = 0; bar < BarCount; bar++ ) 
> > > > {
> > > > bo.ProcessTradeSignals(bar); 
> > > > ...some algorithm collecting when to stop/start trading
> > > > }
> > > > bo.PostProcess(); 
> > > > 
> > > > // second run to do the actual trading with equity based 
> > > stops/resumes
> > > > bo.PreProcess(); 
> > > > for( bar = 0; bar < BarCount; bar++ ) 
> > > > {
> > > > ...algorithm to scaleout/in of trades according to previous 
> > > collected 
> > > > info
> > > > bo.ProcessTradeSignals(bar); 
> > > > }
> > > > bo.PostProcess(); 
> > > > 
> > > > However, on the second call to bo.ProcessTradeSignals(bar) 
> above, I 
> > > > get "COM method/function failed: Internal application error". 
> Can I 
> > > > use custom backtest in this "reentrant" way? - or is there 
> anothor 
> > > > way to stop/resume trading based on portfolio equity (of the 
> > > > underlying trading algorithm)...?
> > > > 
> > > > best regards
> > > > Jens Tiedemann
> > > >
> > >
> >
>



------------------------------------

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/