you can try it out by putting the code in a file (for instance:
findNumberOfLongAndShortPositions_cbi.afl) and then call this file in your
main program like:
SetCustomBacktestProc( "C:\\Amibroker Programs\\myAFL\\CustomBacktest\\loop
through trades\\findNumberOfLongAndShortPositions_cbi.afl" );
Then do a backtest as you normally do and you can chart the results using for
instance:
SetChartOptions(0, chartShowDates);
GraphXSpace = 0;
ltrades = Foreign("~longTrades","C");
strades = Foreign("~shortTrades","C");
Plot(strades,"Short Trades",colorRed,styleLine);
Plot(ltrades,"Long Trades",colorBrightGreen,styleLine);
PlotOHLC( ltrades, ltrades, 0, 0, "", colorBrightGreen, styleCloud );
PlotOHLC( strades, strades, 0, 0, "", colorRed, styleCloud );
I assume that you are doing a portfolio type backtest,
rgds, Ed
----- Original Message -----
From: Ara Kaloustian
To: [email protected]
Sent: Wednesday, September 03, 2008 8:39 PM
Subject: Re: [amibroker] Backtest - Number of positions
Thanks Ed,
I have not got to CBT yet ... but on my list
Ara
----- Original Message -----
From: Edward Pottasch
To: [email protected]
Sent: Wednesday, September 03, 2008 11:00 AM
Subject: Re: [amibroker] Backtest - Number of positions
Ara,
I did this a while back. I extracted this information by looping through
the trades using the CBT. Then I saved the info in a composite. Added code
below. You just need to call this code inside your main program using
SetCustomBacktestProc( ) but I think you know the drill:
rgds, Ed
SetCustomBacktestProc("");
if( Status("action") == actionPortfolio ) {
bo = GetBacktesterObject();
// perform default portfolio backtest
bo.Backtest();
// initialisations
longTrades = 0;
shortTrades = 0;
// store the DateTime() in a STRING array.
fdatetime = DateTime();
// loop through trades
for( trade = bo.GetFirstTrade(); trade ; trade = bo.GetNextTrade() ) {
// find the entry datetime of the trade
entry_datetime = trade.EntryDateTime;
// find the exit datetime of the trade
exit_datetime = trade.ExitDateTime;
// locate the array index at entry
index_entry = IIF(entry_datetime == fdatetime, 1, 0);
// locate the array index at exit
index_exit = IIF(exit_datetime == fdatetime, 1, 0);
// indicate bars where the trade occurs
index_trade = flip(index_entry,index_exit);
// accumulate long and short trades
if (trade.IsLong) {
longTrades = longTrades + index_trade;
//} else if (!trade.IsLong) {
} else {
shortTrades = shortTrades + index_trade;
}
}
// loop through open positions
for( Openpos = bo.GetFirstOpenPos(); Openpos ; Openpos =
bo.GetNextOpenPos() ) {
// find the entry datetime of the trade
entry_datetime = Openpos.EntryDateTime;
// find the exit datetime of the trade
exit_datetime = Openpos.ExitDateTime;
// locate the array index at entry
index_entry = IIF(entry_datetime == fdatetime, 1, 0);
// locate the array index at exit
index_exit = IIF(exit_datetime == fdatetime, 1, 0);
// indicate bars where the trade occurs
index_trade = flip(index_entry,index_exit);
// accumulate long and short trades
if (Openpos.IsLong) {
longTrades = longTrades + index_trade;
//} else if (!Openpos.IsLong) {
} else {
shortTrades = shortTrades + index_trade;
}
}
AddToComposite(longTrades,"~longTrades","C",atcFlagDeleteValues |
atcFlagEnableInPortfolio );
AddToComposite(shortTrades,"~shortTrades","C",atcFlagDeleteValues |
atcFlagEnableInPortfolio);
}
----- Original Message -----
From: Ara Kaloustian
To: AB-Main
Sent: Wednesday, September 03, 2008 7:39 PM
Subject: [amibroker] Backtest - Number of positions
Is there a way to determine (get a chart) of the number of positions over
time
Tx
Ara