Thanks GP for pointing that out. I been fooling around with the code 
all weekend long and inadvertantly posted the wrong one. The problem 
is that it produces error on that line.


--- In [email protected], "gp_sydney" <[EMAIL PROTECTED]> 
wrote:
>
> I've only had a quick glance through your code, but it looks like
> you're testing for the profit being greater than 15%, not the loss.
> 
> I think the sell signal generated by ApplyStop should include reason
> code 1 for maximum loss. Try checking that.
> 
> Regards,
> GP
> 
> 
> --- In [email protected], "tipequity" <l3456@> wrote:
> >
> > How can test to see of max loss percent has been met (using CBI)? 
> > Below is my feeble attempt. 
> > Thanks in advance
> > 
> 
> /*==================================================================
==
> > ==========
> >     Global Settings
> > 
======================================================================
> > ========*/
> > SetBarsRequired(1000000,0); /* this ensures that the charts 
include 
> > all bars AND NOT just those on screen */
> > SetFormulaName("System Four with Stochastics-6"); /* name it for 
> > backtest report identification */
> > SetOption("InitialEquity", 100000); /* starting capital */
> > SetOption("CommissionAmount",8); /* commissions AND cost */
> > SetOption("CommissionMode", 2); /* set commissions AND costs as $ 
per 
> > trade */
> > SetTradeDelays( 1, 1, 1, 1);
> > SetOption("PriceBoundChecking", 1); /* trade only within the 
chart 
> > bar's price range */
> > SetOption("UsePrevBarEquityForPosSizing", 1); /* set the use of 
last 
> > bars equity for trade size */
> > /* SetOption("MinPosValue", ); */
> > SetOption("AllowPositionShrinking", True);
> > SetOption("MinShares", 100);
> > SetOption("AccountMargin", 100); 
> > SetOption("HoldMinBars",2 ); /* Set Minimun Holding Days to 2 
Days*/
> > RoundLotSize = 1 ;
> > PositionSize = - 10; /* trade size will be 10% of available 
equity */
> > MaxLossPercentStop = 15 ;
> > ApplyStop(0, 1, MaxLossPercentStop, 0, False, 0);
> > 
> > SetBacktestMode( backtestRegularRaw ); 
> > 
> 
> /*==================================================================
==
> > ==========
> >  
> > 
======================================================================
> > ========*/
> > 
> > TradeDate = DateTime(); 
> > 
> > SetCustomBacktestProc(""); 
> > 
> > MaxBuys = 3; // Set no more than 4 buys per day
> > 
> > if( Status("action") == actionPortfolio )
> > { 
> >     bo = GetBacktesterObject(); 
> >     bo.PreProcess();
> >  
> >             Symbol = " ";
> >             TransType = "";
> >             CommissionAmount = 8;
> >             SEC_Fee = 0;
> >             Rank = 0;
> >             TradeSize = 0;
> >             Shares = 0;
> >             TransAmount = 0;
> >             Reason = 0;
> >             Price = 0;
> >             CashBal = bo.InitialEquity;
> >             EquityBal = bo.Equity;
> >             ProfitPercent = 0;
> > 
> >    for( i = 0; i < BarCount; i++ ) 
> >     {
> >             cntBuys = 0; 
> >     // look at new signals and exclude signals if they exceed 
maxBuys 
> >             for( sig = bo.GetFirstSignal(i); sig; sig = 
> > bo.GetNextSignal(i) )
> >             { 
> >                     EquityBal = bo.Equity;
> >                 // check for Sell signal
> >                     if (sig.IsExit() AND sig.Type == 2 )
> >                     {
> >                             // scan through open positions
> >                             OpenPos = bo.FindOpenPos( 
> > sig.Symbol );
> >                             // check for entry signal and long 
> > signal 
> > 
> >                             if (OpenPos.GetPercentProfit()>15)
> >                             {
> >                             Symbol = sig.Symbol;
> >                             TransType = "Sold";
> >                             Shares = OpenPos.Shares;
> >                             Price = sig.Price;
> >                             SEC_Fee = round((OpenPos.Shares * 
> > Price)*(1530/1000000))/100;
> >                             CommissionAmount = 8 + SEC_Fee;
> >                             TransAmount = (OpenPos.Shares * 
> > Price)- CommissionAmount;
> >                             CashBal = CashBal + TransAmount;
> >                                     
> >                             ProfitPercent = 
> > OpenPos.GetPercentProfit();
> >                             Reason = "MaxLossPercentStop";
> >                             Rank = "";
> > 
> >                             bo.RawTextOutput(
> >                                                             
> >                     Symbol +
> >                                                             
> >     "\t" + cntBuys +
> >                                                             
> >     "\t" + TransType +
> >                                                             
> >     "\t" + DateTimeToStr(TradeDate[ i ]) +
> >                                                             
> >     "\t" + Price +
> >                                                             
> >     "\t" + "Shares " + Shares +
> >                                                             
> >     "\t" + "Commission " + CommissionAmount + 
> >                                                             
> >     "\t" + "Amount " + TransAmount +
> >                                                             
> >     "\t" + "PosSize " + TradeSize +
> >                                                             
> >     "\t" + "CashBal " + CashBal +
> >                                                             
> >     "\t" + "Cash " + bo.Cash +
> >                                                             
> >     "\t" + "EquityBal " + EquityBal +
> >                                                             
> >     "\t" + "Reason " + Reason +
> >                                                             
> >     "\t" + "Profit% " + ProfitPercent +
> >                                                             
> >     "\t" + Rank
> >                                                             
> >     );
> >                             }
> >                             else if( openpos AND openpos.IsLong )
> >                             {
> >                             Symbol = sig.Symbol;
> >                             TransType = "Sold";
> >                             Shares = OpenPos.Shares;
> >                             Price = sig.Price;
> >                             SEC_Fee = round((OpenPos.Shares * 
> > Price)*(1530/1000000))/100;
> >                             CommissionAmount = 8 + SEC_Fee;
> >                             TransAmount = (OpenPos.Shares * 
> > Price)- CommissionAmount;
> >                             CashBal = CashBal + TransAmount;
> >                                     
> >                             Reason = sig.Reason;
> >                             Rank = "";
> > 
> >                             bo.RawTextOutput(
> >                                                             
> >                     Symbol +
> >                                                             
> >     "\t" + cntBuys +
> >                                                             
> >     "\t" + TransType +
> >                                                             
> >     "\t" + DateTimeToStr(TradeDate[ i ]) +
> >                                                             
> >     "\t" + Price +
> >                                                             
> >     "\t" + "Shares " + Shares +
> >                                                             
> >     "\t" + "Commission " + CommissionAmount + 
> >                                                             
> >     "\t" + "Amount " + TransAmount +
> >                                                             
> >     "\t" + "PosSize " + TradeSize +
> >                                                             
> >     "\t" + "CashBal " + CashBal +
> >                                                             
> >     "\t" + "Cash " + bo.Cash +
> >                                                             
> >     "\t" + "EquityBal " + EquityBal +
> >                                                             
> >     "\t" + "Reason " + Reason +
> >                                                             
> >     "\t" + "Profit% " + ProfitPercent +
> >                                                             
> >     "\t" + Rank
> >                                                             
> >     );
> >                             }
> >                     }
> >                 // check for entry signal
> >             }
> >             bContinue = True;
> >             for( sig = bo.GetFirstSignal(i); sig; sig = 
> > bo.GetNextSignal(i) )
> >             { 
> >                     if( sig.IsEntry() ) 
> >                     { 
> >                             Symbol = sig.Symbol;
> >                             TradeSize = (bo.Equity / -
> > sig.PosSize);
> >                             Shares = round(TradeSize/sig.Price);
> >                             Price = sig.Price;
> >                             if( cntBuys > MaxBuys  )
> >                             {   
> >                                     sig.PosSize = 0; 
> >                                     TransType = "Rejected";
> >                                     Reason = "Exceed Max No. 
> > Trades per Day";
> >                                     bo.RawTextOutput(
> >                                                             
> >                             Symbol +
> >                                                             
> >             "\t" + cntBuys +
> >                                                             
> >             "\t" + TransType +
> >                                                             
> >             "\t" + DateTimeToStr(TradeDate[ i ]) +
> >                                                             
> >             "\t" + Price +
> >                                                             
> >             "\t" + "Shares " + Shares +
> >                                                             
> >             "\t" + "Commission " + CommissionAmount +
> >                                                             
> >             "\t" + "Amount " + TransAmount +
> >                                                             
> >             "\t" + "PosSize " + TradeSize +
> >                                                             
> >             "\t" + "CashBal " + CashBal +
> >                                                             
> >             "\t" + "Cash " + bo.Cash +
> >                                                             
> >             "\t" + "EquityBal " + EquityBal +
> >                                                             
> >             "\t" + "Reason " + Reason  +
> >                                                             
> >             "\t" + "Profit% " +
> >                                                             
> >             "\t" + Rank
> >                                                             
> >             );
> >                             } 
> >                             else 
> >                             { 
> >                                     TransType = "Bought";
> >                                     cntBuys = cntBuys + 1;
> >                                     TransAmount = -(Shares * 
> > Price)-CommissionAmount;
> >                                     CashBal = CashBal + 
> > TransAmount;
> >                                     Reason = sig.Reason;
> >                                     Rank = sig.PosScore;
> > 
> >                                     bo.RawTextOutput(
> >                                                             
> >                             Symbol +
> >                                                             
> >             "\t" + cntBuys +
> >                                                             
> >             "\t" + TransType +
> >                                                             
> >             "\t" + DateTimeToStr(TradeDate[ i ]) +
> >                                                             
> >             "\t" + Price +
> >                                                             
> >             "\t" + "Shares " + Shares +
> >                                                             
> >             "\t" + "Commission " + CommissionAmount +
> >                                                             
> >             "\t" + "Amount " + TransAmount +
> >                                                             
> >             "\t" + "PosSize " + TradeSize +
> >                                                             
> >             "\t" + "CashBal " + CashBal +
> >                                                             
> >             "\t" + "Cash " + bo.Cash +
> >                                                             
> >             "\t" + "EquityBal " + EquityBal +
> >                                                             
> >             "\t" + "Reason " + Reason  +
> >                                                             
> >             "\t" + "Profit% " +
> >                                                             
> >             "\t" + Rank
> >                                                             
> >             );
> >                             } 
> >                     }
> >             } 
> >    bo.ProcessTradeSignals( i ); 
> >     } 
> >    bo.PostProcess(); 
> > }
> > 
> > 
> > //fast = Optimize("fast", 12, 5, 20, 1 ); 
> > //slow = Optimize("slow", 26, 10, 25, 1 ); 
> > Buy=Cross(MACD(12,26),Signal(12,26)); 
> > Sell=Cross(Signal(12,26),MACD(12,26));
> >
>


Reply via email to