Jeff- will this work for looking back over only x number of trades at each new 
trade, or will it tally the sqn for all previous closed trades each time? Thanks

--- In [email protected], "Mike" <sfclimb...@...> wrote:
>
> SetForeign has no impact on user defined arrays (e.g. MyRisk). It only 
> affects the arrays of the current symbol (e.g. Buy, Sell, BuyPrice, 
> SellPrice, etc.).
> 
> So, take whatever code you used to calculate MyRisk and move it directly into 
> the custom backtester between the SetForeign and RestorePriceArrays.
> 
> In other words, calculate MyRisk on the fly. You cannot access it after the 
> fact.
> 
> Alternatively, you could write to composite symbols or static arrays. But, 
> it's probably easier to do it in the custom backtest code.
> 
> Mike
> 
> --- In [email protected], "jeffarcherjr" <jeffarcherjr@> wrote:
> >
> > 
> > 
> > Mike:
> > 
> > Thanks for your reply.  I've had a go at implementing that, but there's a 
> > devil in the details somewhere.  
> > 
> > I defined a variable MyRisk, which shows up correctly when I run an 
> > Exploration, however custombacktestproc appears unable to find it when I do 
> > a Backtest. 
> > 
> > The custommetrics involving MyRisk all result in zero, everything else 
> > about the code below appears to give correct results, including MyClose 
> > giving me the correct close price for the symbol/date which I put in there 
> > in case I had made a syntax error, and my trade count giving the correct 
> > number of trades.
> > 
> > Any suggestions would be much appreciated!
> > 
> > Jeff
> > 
> > Code:
> > 
> > 
> > //custom backtest indicators to measure system performance
> > SetOption("UseCustomBacktestProc", True );
> > SetCustomBacktestProc("",True);
> > if( Status("action") == actionPortfolio )   // point to correct iteration 
> > of backtest engine
> >     { 
> >     //initialize custom backtest engine
> >     backtestobject = GetBacktesterObject();         
> > 
> >     // run the standard backtest
> >     backtestobject.Backtest(1);     
> > 
> >     // pointers to find specific trades
> >     bars = BarIndex();
> >     dates = DateTime();     
> > 
> >     // intialize variables for SQN Calculations
> >     SumR = 0;
> >     SumR2 = 0;
> >     Trades = 0;
> >     expectancyR = 0;
> >     stdDevR = 0;
> >     SQN = 0;
> >     R = 0;
> > 
> >     //add data to trade list, starting with closed trades
> >     for( trade = backtestobject.GetFirstTrade(); trade; trade = 
> > backtestobject.GetNextTrade() ) 
> >             { 
> >                     SetForeign( trade.Symbol, True, True );
> >                     entryBar = LastValue( ValueWhen( trade.EntryDateTime == 
> > dates, bars ) );
> >                     R       = MyRisk[entryBar];
> >                     trade.addcustommetric("MyRisk",R);
> >                     trade.addcustommetric("MyClose",Close[entrybar]);
> >             sumR += R;
> >                     sumR2 += R^2;
> >                     Trades++;
> >             RestorePriceArrays(True);
> >             }
> > 
> >    //add data for trades still open at end of process
> >    for( trade = backtestobject.GetFirstOpenPos(); trade; trade = 
> > backtestobject.GetNextOpenPos() )
> >             {
> >                     SetForeign( trade.Symbol, True, True );
> >                     entryBar = LastValue( ValueWhen( trade.EntryDateTime == 
> > dates, bars ) );
> >                     R       = MyRisk[entryBar];
> >                     trade.addcustommetric("MyRisk",R);
> >                     trade.addcustommetric("MyClose",Close[entrybar]);
> >             sumR += R;
> >                     sumR2 += R^2;
> >                     Trades++;
> >             RestorePriceArrays(True);
> >             } 
> > 
> >     //SQN calculations
> >     if (Trades > 0) 
> >             {
> >                     testcalc = Trades * 2;
> >                     expectancyR = sumR / Trades;
> >                     stdDevR = sqrt((sumR2 - (sumR^2 / Trades)) / (Trades - 
> > 1));
> >                     SQN = ((expectancyR / stdDevR) * sqrt(Min(100, 
> > Trades)));
> >             } 
> > 
> >     //display results 
> >     backtestobject.AddCustomMetric("TestCalc", testcalc);           
> >     backtestobject.AddCustomMetric("Trades", Trades);
> >     backtestobject.AddCustomMetric("sumR", SumR);
> >     backtestobject.AddCustomMetric("sumR2", SumR2);
> >     backtestobject.AddCustomMetric("ExpectancyR ($)", expectancyR);
> >     backtestobject.AddCustomMetric("StdDevR", stdDevR);
> >     backtestobject.AddCustomMetric("SQN", SQN);
> >     backtestobject.ListTrades();
> > 
> >     }
> >
>


Reply via email to