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" <[EMAIL PROTECTED]> 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