i believe you are supposed to do this with the
custom backtester. I never managed to use this on any useful level but maybe
this code will get you ahead. It looks at all bars and finds the
signals for each bar and removes excess signals before the signals are
processed. I did not include a ranking of the signals though ..
(see http://www.amibroker.com/guide/a_custombacktest.html
for details .... ).
SetCustomBacktestProc("");
MaxBuys =
3;
if( Status("action") == actionPortfolio ) {
bo = GetBacktesterObject();
bo.PreProcess();
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) ) {
// check for entry signal and long
signal
if( sig.IsEntry()
) {
if( cntBuys > MaxBuys ) {
sig.PosSize
= 0;
}
else {
cntBuys
= cntBuys + 1;
}
}
}
bo.ProcessTradeSignals( i );
}
bo.PostProcess();
fclose( fh );
}
-----
Original Message -----
Sent:
Tuesday, March 20, 2007 8:12 PM
Subject:
[amibroker] MaxBuys per bar in backtesting
I would like to set a
maximum buys per bar.
I know about:
MaxOpen = 10;
SetOption("MaxOpenPositions", MaxOpen);
But is there any way to write the
'equivalent' of:
MaxBuys =
3;
SetOption("MaxBuys",
MaxBuys);
TIA.
-- Keith