PureBytes Links
Trading Reference Links
|
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@xxxxxxxxxxx>:
> 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@xxx> 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/
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/
|