PureBytes Links
Trading Reference Links
|
Graham, thanks for that example.
I modified the example to try to solve my slippage problem. From every way I look at it, I now appear to have all the correct controls. Yet it still has no effect! Note that I can't use GetPrice on Closed trades, according to the reference guide.
I really hate looking like a coding klutz, but do you, or anyone see what I am still doing wrong?!
if ( Status( "action" ) == actionPortfolio )
{
bo = GetBacktesterObject();
bo.PreProcess(); // Initialize backtester
for ( bar = 0; bar < BarCount-1; bar++ )
{
bo.ProcessTradeSignals( bar );
for ( Trade = bo.GetFirstTrade(); Trade; Trade = bo.GetNextTrade() )
{
if ( NOT Trade.IsOpen() )
{
if ( Trade.IsLong() ) // Exit Long
{
ExitTrue = Trade.ExitPrice - Slippage;
Trade.ExitPrice = ExitTrue;
}
else // Exit Short
{
ExitTrue = Trade.ExitPrice + Slippage;
Trade.ExitPrice = ExitTrue;
}
}
}
}
bo.PostProcess(); // Finalize backtester
}
--- In amibroker@xxxxxxxxxxxxxxx, Graham <kavemanperth@xxx> wrote: > > You have not included all the required control functions and method > for getting the signals, here is example from knowledge base, you can > see what is missing. This example does a different actual change to > the trades, but the whole process is the same. > > if( Status("action") == actionPortfolio ) > { > bo = GetBacktesterObject(); > > bo.PreProcess(); // Initialize backtester > <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > > for(bar=0; bar < BarCount; bar++) > //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > bo.ProcessTradeSignals( bar ); > //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > > CurEquity = bo.Equity; > > for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() ) > { > posval = pos.GetPositionValue(); > > diff = posval - 0.01 * EachPosPercent * CurEquity; > price = pos.GetPrice( bar, "O" ); > > // rebalance only if difference between desired and > // current position value is greater than 0.5% of equity > // and greater than price of single share > if( diff != 0 AND > abs( diff ) > 0.005 * CurEquity AND > abs( diff ) > price ) > { > bo.ScaleTrade( bar, pos.Symbol, diff < 0, price, abs( diff ) ); > } > } > } //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > bo.PostProcess(); // Finalize backtester > //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > } > > 2009/3/19 ozzyapeman zoopfree@xxx: > > The custom commission table unfortunately doesn't allow me to do what I > > want, which is to slip exits by an amount that varies according to market > > time. The example I am pasting here is simplified. I'm trying to model based > > on what I am seeing in live trades. > > > > Thanks on ProcessTradeSignals. But I still must be doing something wrong, > > because no effect: > > > > > > if ( Status( "action" ) == actionPortfolio ) > > { > > bo = GetBacktesterObject(); > > > > for > > ( sig = bo.GetFirstSignal(); sig; sig = bo.GetNextSignal() ) > > { > > > > sig.ProcessTradeSignals(); > > > > if( sig.IsExit() ) > > { > > if ( sig.IsLong() ) // Exit Long > > { > > ExitTrue = sig.Price - Slippage; > > sig.Price = ExitTrue; > > } > > > > > > else // Exit Short > > { > > ExitTrue = sig.Price + Slippage; > > sig.Price = ExitTrue; > > } > > } > > } > > } > > > > > > > > > > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" groups@ 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 > >> ----- Original Message ----- > >> From: ozzyapeman > >> To: amibroker@xxxxxxxxxxxxxxx > >> Sent: Thursday, March 19, 2009 2:31 AM > >> Subject: [amibroker] Re: Simple slippage implemented in CBT generates COM > >> error > >> > >> > >> Okay on #1, I realize that the COM error was due to the bit of legacy > >> code: SetCustomBacktestProc( "" ); > >> > >> However, the slippage code seems to have no effect whatsoever on the > >> backtest trade report. > >> > >> What might I be doing wrong? > >> > >> > >> > >> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@ wrote: > >> > > >> > Hello, hoping someone can help on this. I am using ApplyStop, which does > >> > not have a slippage factor. I'm trying to avoid using a BarCount loop to > >> > implement slippage on exits and instead am trying to modify the signal > >> > list of the CBT to implement slippage, before the backtester engine > >> > processes the trades. > >> > > >> > But I am running into two problems, namely: > >> > > >> > > >> > 1. Get error COM method/function 'GetFirstSignal' call failed, on the > >> > for loop line, even though that line and prior ones were copied and > >> > pasted direct from the reference guide. > >> > > >> > > >> > 2. More of a question at this point: What if my calculation of ExitTrue > >> > price is below the Low, or above the High of the bar? Will the > >> > backtester engine simply ignore that signal? Or is there some way I can > >> > filter out that possibility directly in the code below? > >> > > >> > > >> > > >> > In this example, Slippage = 0.0002 elsewhere in my code, backtesting on > >> > Forex: > >> > > >> > > >> > SetCustomBacktestProc( "" ); > >> > > >> > if ( Status( "action" ) == actionPortfolio ) > >> > { > >> > bo = GetBacktesterObject(); > >> > > >> > for( sig = bo.GetFirstSignal(); sig; sig = bo.GetNextSignal() ) > >> > { > >> > if( sig.IsExit() ) > >> > { > >> > if ( sig.IsLong() ) // Exit Long > >> > { > >> > ExitTrue = sig.Price - Slippage; > >> > sig.Price = ExitTrue; > >> > } > >> > > >> > else // Exit Short > >> > { > >> > ExitTrue = sig.Price + Slippage; > >> > sig.Price = ExitTrue; > >> > } > >> > > >> > } > >> > } > >> > } > >> > > >> > > > > > > > > > > -- > Cheers > Graham Kav > AFL Writing Service > http://www.aflwriting.com >
__._,_.___
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
__,_._,___
|