[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: how to modify MarginDeposit by trade ?



PureBytes Links

Trading Reference Links

Graham,

Thanks for that comment. It highlights a problem in one of my examples
in the CBT document which I'll have to fix.

Is there any info anywhere about the use of external symbols in custom
backtest procedures? I've searched the AmiBroker site and can't come
up with anything.

However, I've also done some experimentation with passing composite
symbols to the CBT and your code here, and from what I've seen,
searching for date and time doesn't seem to be necessary. If in the
main code the data is saved to a composite symbol, and then in the CBT
it is read back with Foreign, directly indexing it gives exactly the
same results as your function (I've played around with this using
DebugView and a couple of symbols where one has many more bars than
the other).

>From what I can see with that function, all it does is search the
DateTime array for the value passed to it from the same DateTime
array, which will always find it at the same index as the value was
originally taken from. This seems completely redundant to me.

In my test example, which passes the 100 day volume EMA to the CBT, I
have the following code:

AddToComposite(EMA(Volume,100), "~evol_"+Name(), "V");

then in the CBT I reference those values with:

evol = Foreign("~evol_"+sig.Symbol, "V");
evi = evol[i];

This seems to work correctly and gives exactly the same result as
including a call to that FindValueAtDateTime function.

Regards,
GP


--- In amibroker@xxxxxxxxxxxxxxx, Graham <kavemanperth@xxx> wrote:
>
> How do you store the values?
> Normal variables do not pass directly from the base AFL to the CBT.
> You need to use either staticvarset or save them to a composite symbol
> and then read these as foreign symbols within the CBT. Of course you
> could always save them to a text file, but this would be slower than
> using compsoites
> Sorry I ahve not read through the CBT document fully that was created
> but you have to remember that the bars used in the loop in CBT is not
> that same barindex values as per the base symbols. The bars counted in
> the loops are based on the backtest bars. So reference to foreign
> symbols needs to be done using datetime values. Tomasz has written a
> function to allow easy referencing for this. This is slightly
> different to the original
> 
> function FindValueAtDateTime( eq, dt, Value )
> {
> 	found = -1;
> 	for( i=0; i<BarCount AND found==-1; i++ )
> 	{
> 		if( dt[i]==Value ) found = i;
> 	}
> 	return IIf( found != -1, eq[found], Null );
> }
> the function is located after SetCustomBacktestProc(""); and before
> if( Status("action") == actionPortfolio )
> ie
> SetCustomBacktestProc("");
> function FindValueAtDateTime( eq, dtm, Value )
> {
> 	found = -1;
> 	for( i=0; i<BarCount AND found==-1; i++ )
> 	{
> 		if( dtm[i]==Value ) found = i;
> 	}
> 	return IIf( found != -1, eq[found], Null );
> }
> if( Status("action") == actionPortfolio )
> {
> ...........................................................
> 
> In this Value is the datetime of the bar you want to reference the
> appropriate foreign symbol
> eq should be the Foreign function where your required data is stored
> 
> Here is an example that is within the open positions part inside the
loop
> 
> dt = DateTime();
> for(bar=1; bar<BarCount; bar++)
> {
> for( OpenPos = bo.GetFirstOpenPos(); OpenPos; OpenPos =
bo.GetNextOpenPos() )
> {
> SellStop[bar] = FindValueAtDateTime(
> Foreign("~Stops_"+OpenPos.Symbol,"O"), dt, dt[bar] );
> 
> 
> 
> 
> -- 
> Cheers
> Graham
> AB-Write >< Professional AFL Writing Service
> Yes, I write AFL code to your requirements
> http://www.aflwriting.com
> 
> 
> On 23/06/07, Grant Noble <gruntus@xxx> wrote:
> > Thx for the reply. I've read your wonderful docs on the CBT but am
struggling with how to get the
> > CBT to use values calculated outside of it's loops. I store the
correct margin value at the time I
> > generate my signals but, at CBT signal level I'm not actually
dealing with a symbol/date paradigm am
> >   I ? Whenever I try to access my array I just get zero values.
Any idea what I can do about this ? G
> >
> > gp_sydney wrote:
> > > I've never used MarginDeposit, but it is a property of the Signal
> > > object in the CBT which means it could be adjusted on a per-trade
> > > basis using the mid-level custom backtester interface.
> > >
> > > GP
> > >
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx, Grant Noble <gruntus@> wrote:
> > >> Anyone using MarginDeposit ??
> > >>
> > >> gruntusnomore wrote:
> > >>> I need to modify MarginDeposit on a trade-by-trade basis as it is
> > >>> calculated using order level & stop points.
> > >>> The backtester always uses the last value of MarginDeposit
calculated
> > >>> for any test range - and will use this value for all trades of the
> > > same
> > >>> symbol.
> > >>> Can anyone advise how I can get around this ? Is it something
that can
> > >>> be done w/ CBT additions ?
> > >>> Regards, GRANT
> > >>> :-)
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> Please note that this group is for discussion between users only.
> > >>>
> > >>> To get support from AmiBroker please send an e-mail directly to
> > >>> SUPPORT {at} amibroker.com
> > >>>
> > >>> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > >>> http://www.amibroker.com/devlog/
> > >>>
> > >>> For other support material please check also:
> > >>> http://www.amibroker.com/support.html
> > >>>
> > >>> Yahoo! Groups Links
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >
> > >
> > >
> > >
> > > Please note that this group is for discussion between users only.
> > >
> > > To get support from AmiBroker please send an e-mail directly to
> > > SUPPORT {at} amibroker.com
> > >
> > > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > > http://www.amibroker.com/devlog/
> > >
> > > For other support material please check also:
> > > http://www.amibroker.com/support.html
> > >
> > > Yahoo! Groups Links
> > >
> > >
> > >
> > >
> > >
> >
> >
> > Please note that this group is for discussion between users only.
> >
> > To get support from AmiBroker please send an e-mail directly to
> > SUPPORT {at} amibroker.com
> >
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroker.com/devlog/
> >
> > For other support material please check also:
> > http://www.amibroker.com/support.html
> >
> > Yahoo! Groups Links
> >
> >
> >
> >
>




Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
 
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/