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

[amibroker] Re: Custom bactester metrics & Van Tharps per trade r multiple



PureBytes Links

Trading Reference Links

GP...Here's the simple BO test system i'm using, nothing flash, &
backtest entry/exit prices work as expected.

Regards

=========
SetTradeDelays( 0, 0, 0, 0 ); 

SetOption("InitialEquity", 50000 ); 
SetOption("MaxOpenPositions", 10 ); 
SetOption("AllowPositionShrinking", False ); 
SetOption("PriceBoundChecking", True ); 
SetOption("UsePrevBarEquityForPosSizing", False ); 
SetOption("AllowSameBarExit", True );
SetOption("ActivateStopsImmediately", True );
SetOption("CommissionMode", 2 );  // $ Amt
SetOption("CommissionAmount", 20 ); // 
SetChartOptions(0,chartShowArrows|chartShowDates);

CapitalRisk = 0.01;

PlotStyle=Param( "PlotStyle", 3 , 1, 3, 1 );
Pstyle = IIf(PlotStyle==1,1,IIf(PlotStyle==2,64,128) );

Tick = IIf( L <= 0.10, 0.001, IIf(L > 0.50 , 0.01, 0.005));

TriggerTicks = 1; 
BOTicks = TriggerTicks * tick;

// Entry Trigger

UpperChannel= HHV( High , 20 ) ;

LowerChannel = LLV( Low , 20 )  ;
ExitTriggerPrice = Ref(LowerChannel,-1) - BOTicks ;

Buy = Cross( Ref(Close,-1)   , Ref(UpperChannel, -2) )	;
Sell = Cross( Ref(LowerChannel,-2) , Ref(Close,-1)  ) ; 


// Remove Consecutive Triggers
Buy   = ExRem(Buy, Sell);
Sell  = ExRem(Sell, Buy);


TradeRisk = IIf(Buy, BuyPrice - ExitTriggerPrice ,0);  // ie exitprice
= init stop
TradeRiskPcnt = IIf(Buy, TradeRisk / BuyPrice  ,0) ;
Buy=IIf(Buy==1 AND TradeRiskPcnt  > 0.10 , 0 , Buy); // ignore > 10%
trade risk


PositionSize = -(CapitalRisk  *100) *   BuyPrice/TradeRisk; 
Buy=IIf(Buy==1 AND PositionSize < -33 , 0 , Buy);

AddToComposite(TradeRisk, "~trisk" + Name(),"C",atcFlagDefaults |
atcFlagEnableInBacktest );

Equity( 1 ); // evaluates trades and stops 


// Exploration Layout
Filter = 1;

AddColumn(O, "O", 1.4);
AddColumn(H, "H", 1.4);
AddColumn(L, "L", 1.4);
AddColumn(C, "C", 1.4);
AddColumn(V, "V", 1.0);


// Std Tittle
Title =  WriteVal( DateTime(), formatDateTime )  + " " + Name() + 
"\n" +  "O = " + WriteVal(O, 1.4) + " ; H = " + WriteVal(H, 1.4) + " ;
L = " + WriteVal(L, 1.4) + " ; C = " + WriteVal(C, 1.4) 

;

Plot( C, "Close", colorBlack , Pstyle + styleThick   );

Plot( UpperChannel, "UpperChannel", colorBlue , styleLine   );
Plot( LowerChannel , "LowerChannel ", colorBlue , styleLine   );

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);


// =====


SetCustomBacktestProc("");


/* ustom-backtest procedure follows */

if( Status("action") == actionPortfolio )
  {
   _TRACE("Custom BT Start");
   bo = GetBacktesterObject();
   bo.Backtest(1); // run default backtest procedure
   SumProfitPerRisk = 0;
   NumTrades = 0;

// iterate through closed trades first

   for( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade() ) 
		{

//					

   dt = DateTime();
   TradeRisk = 0;
   TradeDate = DateTime();
   Risk = 0;
   TRisk =     Foreign("~trisk_" + trade.Symbol,"C");
	
   for( i = 1; i < BarCount; i++ )
   {
    if (  Trade.EntryDateTime == dt[i] )
       {
//      if (TRisk[i]  > 0)
//			{
        TradeDate = dt[i];
        Risk = TRisk[i];
        _TRACE( "Symbol = " + trade.Symbol + " : dt[" + i + "] = " +
NumToStr( TradeDate , formatDateTime ) + " : TRisk[" + i + "] = " +
TRisk[i]);
        _TRACE( "Symbol = " + trade.Symbol + " : EntryPrice = " +
trade.EntryPrice  + " : ExitPrice = " + trade.ExitPrice );

//      break;			
//      }
       }
    }

_TRACE(" Trade.EntryDateTime = " + NumToStr( Trade.EntryDateTime,
formatDateTime ) + " Risk = " + Risk );

    RMultiple = trade.GetProfit()/Risk ;
    trade.AddCustomMetric("Initial risk $", Risk);
    trade.AddCustomMetric("R-Multiple", RMultiple );
    SumProfitPerRisk = SumProfitPerRisk + RMultiple;
    NumTrades++;
  }

   expectancy3 = SumProfitPerRisk / NumTrades;
   bo.AddCustomMetric( "Expectancy (per risk)", expectancy3 );
   bo.ListTrades();

_TRACE("Custom BT End");
}

====
[2668] Custom BT Start
[2668] Symbol = BHP : dt[84] = 15/06/2000 : TRisk[84] = {EMPTY}
[2668] Symbol = BHP : EntryPrice = 7.96475 : ExitPrice = 7.93425
[2668]  Trade.EntryDateTime = 15/06/2000 Risk = {EMPTY}
[2668] Symbol = BHP : dt[132] = 22/08/2000 : TRisk[132] = {EMPTY}
[2668] Symbol = BHP : EntryPrice = 8.44485 : ExitPrice = 8.04767
=====

===========

--- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@xxx> wrote:
>
> In your calculation of TradeRisk, how are the variables EntryPrice and
> ExitPrice calculated?
> 
> Regards,
> GP
>



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/