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

[amibroker] Limiting Sell to Open Position in CBI



PureBytes Links

Trading Reference Links

Below is a code I am playing with. The final objective is to have 
backtest report that keeps ledger of buys and sells similar to 
quicken. The buy side of the trades seems to work fine. On the sell 
side it is selling with no open position. How can I limit the sell to 
closing open positins. Many thanks in advance for you help and 
comments.

/*====================================================================
==========
	Global Settings
======================================================================
========*/
SetFormulaName("Testing a Creation of Trade Ledger"); /* name it for 
backtest report identification */
SetBarsRequired(1000000,0); /* this ensures that the charts include 
all bars AND NOT just those on screen */
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("AllowPositionShrinking", True);
SetOption("MinShares", 100);
SetOption("AccountMargin", 100); 
RoundLotSize = 1 ;
PositionSize = - 10; /* trade size will be 10% of available equity */

TradeDate = DateTime(); 

SetCustomBacktestProc(""); 

MaxBuys = 3; // Set no more than 4 buys per day

if( Status("action") == actionPortfolio )
{ 
	bo = GetBacktesterObject(); 
	bo.PreProcess(); 
   for( i = 0; i < BarCount; i++ ) 
	{ 
		Symbol = " ";
		TransType = "";
		Rank = 0;
		Shares = 0;
		TransAmount = 0;
		Reason = 0;
		Price = 0;
		cntBuys = 0; 
		Balance = bo.Equity;
    // look at new signals and exclude signals if they exceed maxBuys 
		for( sig = bo.GetFirstSignal(i); sig; sig = 
bo.GetNextSignal(i) )
		{ 
    // check for entry signal
			if( sig.IsEntry() ) 
			{ 
				if( cntBuys > MaxBuys )
				{   
					sig.PosSize = 0; 
				} 
				else 
				{ 
					cntBuys = cntBuys + 1;
					Symbol = sig.Symbol;
					TransType = "Buy";
					Rank = sig.PosScore;
					Shares = round((bo.Equity / -
sig.PosSize)/sig.Price);
					Price = sig.Price;
					TransAmount = Shares * Price;
					Balance = Balance - 
TransAmount;					
					Reason = sig.Reason;
					

					bo.RawTextOutput(
								
				Symbol +
								
		"\t" + TransType +
								
		"\t" + DateTimeToStr(TradeDate[ i ]) +
								
		"\t" + Price +
								
		"\t" + Rank +
								
		"\t" + "Shares " + Shares +
								
		"\t" + "Amount " + TransAmount +
								
		"\t" + "Balance " + Balance +
								
		"\t" + "Reason " + Reason 
								
		);
				} 
			} 
			else if (sig.IsExit() AND sig.Type == 2 )
			{
				// scan through open positions
				for( openpos = bo.GetFirstOpenPos(); 
openpos; openpos = bo.GetNextOpenPos() ) { 
				// check for entry signal and long 
signal 
					if( openpos.IsOpen AND 
openpos.IsLong )
					{
					Symbol = sig.Symbol;
					TransType = "Sell";
					Rank = sig.PosScore;
					Price = sig.Price;
					TransAmount = Shares * Price;
					Balance = Balance + 
TransAmount;					
					Reason = sig.Reason;

					bo.RawTextOutput(
								
				Symbol +
								
		"\t" + TransType +
								
		"\t" + DateTimeToStr(TradeDate[ i ]) +
								
		"\t" + Price +
								
		"\t" + Rank +
								
		"\t" + "Shares " + Shares +
								
		"\t" + "Amount " + TransAmount +
								
		"\t" + "Balance " + Balance +
								
		"\t" + "Reason " + Reason 
								
		);
				}
					}
			}
		} 
   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/