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

[amibroker] Re: Test to see maxlosspercent has been met CBI



PureBytes Links

Trading Reference Links

The way it is it shows MaxLossPercentStop string but the value is not 
correct. I also don't understand why all buys have zero as reason and 
sells have one as reason except for MaxLossPercentStop. Also variable 
CashBal is not calculated correctly.

--- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@xxx> 
wrote:
>
> Tried your code using my current ASX100 list and it showed your
> MaxLossPercentStop string as the reason for a few of the exits, 
which
> corresponded with trades with losses greater than 15%, so it seems 
to
> work.
> 
> One thing I don't understand though is why all the other exits have
> reason code one, which is supposed to be max loss, when they are 
just
> normal exits. According to the help information, they should have
> reason code zero.
> 
> Regards,
> GP
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "tipequity" <l3456@> wrote:
> >
> > GP, you are right, one problem had to you with OpenPos returning 
null 
> > so I changed the code to the following:
> > if (OpenPos AND OpenPos.GetPercentProfit()<=-15)
> > However, it seems that the above code only returns zero. If you 
run 
> > this code you will notice that I have written a rawtextoutput 
that 
> > prints OpenPos.GetPercentProfit() and all the return values are 
zero. 
> > I have a feeling that I am mixing apples and oranges in my code.
> > 
> > Regards
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" <gp.investment@> 
> > wrote:
> > >
> > > Probably because OpenPos is returning Null when there's no open
> > > position for that stock. Any time you call a function to get an
> > > object, you need to test that the object returned is not Null.
> > > 
> > > Technically this should be done with a statement like:
> > > 
> > > if (!IsNull(OpenPos))
> > > 
> > > but the following also works due to the nature of Null:
> > > 
> > > if (OpenPos)
> > > 
> > > Regards,
> > > GP
> > > 
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "tipequity" <l3456@> wrote:
> > > >
> > > > 
> > > > if (OpenPos.GetPercentProfit()>15)
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "gp_sydney" 
<gp.investment@> 
> > > > wrote:
> > > > >
> > > > > On which line? And what is the error message?
> > > > > 
> > > > > Regards,
> > > > > GP
> > > > > 
> > > > > 
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "tipequity" <l3456@> 
wrote:
> > > > > >
> > > > > > 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 amibroker@xxxxxxxxxxxxxxx, "gp_sydney" 
> > <gp.investment@> 
> > > > > > 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 amibroker@xxxxxxxxxxxxxxx, "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));
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>




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/