Tomasz Janeczko wrote:
Hello,
You need to call ProcessTradeSignals.
BTW: it is easier to just define custom commission table (AA->Settings
"Commission table: Define...")
that includes slippage than wresting with code.
Best regards,
Tomasz Janeczko
amibroker.com
Hello Tomasz,
I would deeply appreciate if you provided an example on how to adjust
Exits in CBT in order to account for spread and slippage.
For FX scalping systems backtesting (takeProfit = 2-3 pips. ) , I think
it is crucial to be able to do this since all depends on spread and
slippage (if commissions ==0).
Unfortunately, the code I have come up with is not quite working :
|// EURUSD example
||// ||price = (bid+ask)/2
||*if* ( Status( "action" ) == *actionPortfolio* )
{
bo = GetBacktesterObject();
bo.PreProcess();
*for* ( bar = 0; bar < *BarCount*; bar++ )
{
*for* ( sig = bo.GetFirstSignal( bar ); sig; sig =
bo.GetNextSignal( bar ) )
{
symbol = sig.symbol;
hi = Foreign( symbol, "High" );
lo = Foreign( symbol, "Low" );
||||
slippage = ||0.0001||;
spread = 2 * 0.0001;
|||||
|
*if* ( sig.IsExit() )
{
*if* ( sig.isLong ) // Exit Long
{
TrueExit = sig.price - slippage;
*if* ( TrueExit >= lo[bar] - 0.5*spread && TrueExit
<= hi[bar] - 0.5*spread ) ||// bid pricebound check|
| {
sig.price = TrueExit;
// bo.ExitTrade( BAR, sig.Symbol, sig.Price );
}
*else*
sig.price = -1;
}
*else* // Exit short
{
TrueExit = sig.price + slippage;
*if* ( TrueExit >= lo[bar] + 0.5*spread && TrueExit
<= hi[bar] + 0.5*spread ) ||// ask ||pricebound check|
| {
sig.price = TrueExit;
//bo.ExitTrade( BAR, sig.Symbol, sig.Price );
}
*else*
sig.price = -1;
}
}
}
bo.ProcessTradeSignals( bar );
bo.handlestops( bar );
}
*for* ( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade() )
{
trade.addcustommetric( "numPips", ( trade.exitprice -
trade.entryprice ) / trade.ticksize );
}
bo.PostProcess();
}|