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

Re: [amibroker] New Variable Class



PureBytes Links

Trading Reference Links

Hello,

'Global' variable does not mean that it is "static" (in C++ naming convention)
or "persistent". Global/local is about visibility inside/outside of functions.
It is not about persistency.

What you say is not correct. No variable 'persists' in portfolio backtest.
Portfolio backtest is not different than scan/exploration/...
in terms of initialization. The variables are initialized at the entry of each symbol.

The only set of persistent variables (ranks/signals/etc) is managed internally by AB
to perform portfolio calculations but you have no control over it.

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "Dave Merrill" <dmerrill@xxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Wednesday, November 05, 2003 5:39 AM
Subject: RE: [amibroker] New Variable Class


> not that this actually solves this problem, but for portfolio backtests,
> only, variables we create and manage ourselves actually aren't reset at the
> start of each new stock. it *appears* that they are, unless your code treats
> them as global to the entire backtest run, which it usually doesn't.
> typically we set everything that needs to be set every time, for every
> stock, erasing anything that might have persisted. to preserve values across
> all the stocks in a test, you have to detect when you're on the first stock,
> and initialize your vars at that time, only, then continue to add to them or
> use them however you want with each stock without resetting them again from
> scratch.
> 
> for instance, say you want to buy and sell based on an indicator applied
> both to the stock itself, and to an overall index. ideally, you don't want
> to recreate the index indicator over and over again for every stock, so you
> could do something like this in the portfolio backtester (not that this is a
> good system):
> 
> ----------------
> period = Optimize("Period", 18, 2, 40, 1);
> 
> if(Status("StockNum") == 0) { // first stock in test
> index_price = Foreign("!COMP", "C");
>   index_EMA = Wilders(index_price, period);
> index_buy = index_price > index_EMA;
> index_sell = index_price < index_EMA;
> }
> 
> stock_EMA = Wilders(c, period);
> stock_buy = c > stock_EMA;
> stock_sell = c < stock_EMA;
> 
> buy = stock_buy and index_buy;
> sell = stock_sell or index_sell;
> short = stock_sell and index_sell;
> cover = stock_buy or index_buy;
> ----------------
> 
> the if statement block runs only once, when the first stock is being
> examined, but the variables it sets stay valid for the whole backtest, so
> you can use them to evaluate each stock without recalculating them.
> 
> 
> there are some unfortunate problems with this approach for doing on-the-fly
> composites; hopefully tomasz will address them at some point in the future:
> 
> - Status("StockNum") seems to be undefined in explorations, as it is in the
> old backtester. this means you can't detect when you're on the first stock,
> to do your initializations. even IsNull(Status("StockNum")) doesn't return
> anything.
>   besides having Status("StockNum") work in explorations, it would be nice
> to have Status("FirstStockInTest") and "LastStockInTest", like we have
> FirstBarInTest etc.
> 
> - you can't find out which tickers are included in the current test, or how
> many there are. this means you can't find out when you're on the last stock,
> or convert the sum of values for each stock to an average, in any way I
> could figure out. you also can't iterate through them all during the first
> stock of a backtest, to, say, find the top N by volume, and use that during
> trading of each stock.
>   I've suggested a new feature, GetCategorySymbols(categoryTypeAutoAnalysis)
> that would return the list of tickers being analyzed; this would make a
> variety of things easier.
> 
> dave
> 
> 
> (btw the index/stock Wilders thing is an example of a distinctly non-robust
> system. backtest it on the NASDAQ 100 from 3/1/98 to 3/31/03, and results
> are decent-ish, not great MDD. then optimize and look at the returns for the
> periods surrounding the default 18. they bite; 18 is a local fluke. try
> other time frames, and again, the generic all-market-types period is about
> the only one that does as well.)
> 
> 
> > Currently, all variables (global and local) reflect information about
> > the current symbol only.
> >
> > To perform calculations against multiple securities, you must use
> > AddToComposite which restricts the user to O,H,L,C,V,OI fields along
> > with their pre-defined constraining formats which preclude the
> > calculation and storage of very large numbers. It also usually
> > requires at least two passes against separate AFL or AFL/IB afl code
> > to work with the results.  There is certainly a need for
> > AddToComposite, but I think there is also a need for a simpler set of
> > composite values.
> >
> > I'd like to see a new variable class within AFL for computations
> > across the entire database or watchlist. For lack of a better word, a
> > "composite variable" whose value is maintained across multiple
> > securities and which the AFL engine does not initialize with each new
> > symbol. Also, a composite variable that can be displayed with
> > AddColumn just like the other variables using Filter = LastBar logic.
> >
> > This would allow the user to put together some quick, one-pass
> > explorations for calculating multiple issue stats and to display those
> > figures in the same afl. No ~Composite files would be created, and
> > very large numbers could be calculated and displayed using more
> > flexable variable type declarations of float (or others).
> >
> > I'm posting this here to see if I am alone in wanting this feature, in
> > which case I won't pass it along to TJ as a suggestion.
> >
> > Comments?
> >
> > Phsst
> >
> >
> > Yahoo! Groups Sponsor
> > ADVERTISEMENT
> >
> >
> >
> >
> > Send BUG REPORTS to bugs@xxxxxxxxxxxxx
> > Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
> > -----------------------------------------
> > Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
> > (Web page: http://groups.yahoo.com/group/amiquote/messages/)
> > --------------------------------------------
> > Check group FAQ at:
> > http://groups.yahoo.com/group/amibroker/files/groupfaq.html
> >
> > Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
> 
> 
> 
> Send BUG REPORTS to bugs@xxxxxxxxxxxxx
> Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
> -----------------------------------------
> Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
> (Web page: http://groups.yahoo.com/group/amiquote/messages/)
> --------------------------------------------
> Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
> 
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 
> 
> 
> 

------------------------ Yahoo! Groups Sponsor ---------------------~-->
Rent DVDs Online - Over 14,500 titles.
No Late Fees & Free Shipping.
Try Netflix for FREE!
http://us.click.yahoo.com/xlw.sC/XP.FAA/3jkFAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/