PureBytes Links
Trading Reference Links
|
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 amibroker@xxxxxxxxxxxxxxx, "tipequity" <l3456@xxx> 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));
>
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/
|