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

Re: [amibroker] Re: Adventures in improving Ami Backtest speed



PureBytes Links

Trading Reference Links

The default directives for IO are set to err on the side of being conservative in determining when to end a run ... These are of course all under user control.

----- Original Message -----
From: dloyer123
Date: Tuesday, July 15, 2008 3:06 pm
Subject: [amibroker] Re: Adventures in improving Ami Backtest speed
To: amibroker@xxxxxxxxxxxxxxx

> Hey Fred,
>
> Yep. I played with IO. Very cool. I very much liked the
> sensitivity analysis. But, I was never able to get it to
> converge
> for my system without very long run times and large numbers of
> generations. Not sure why.
>
> --- In amibroker@xxxxxxxxxxxxxxx, ftonetti@xxx wrote:
> >
> > My solution was more simplistc:
> >
> > I upgraded from a Core 2 Duo to a dual Core 2 Quad and changed
> IO
> to allow local in addition to remote servers.
> >
> > Result ... Optimizations on Watchlists run 20 times faster ...
> >
> > ----- Original Message -----
> > From: dloyer123
> > Date: Tuesday, July 15, 2008 12:59 pm
> > Subject: [amibroker] Adventures in improving Ami Backtest speed
> > To: amibroker@xxxxxxxxxxxxxxx
> >
> > > Greetings
> > >
> > > I just wanted to share my results in improving AmiBroker
> > > backtest
> > > performance.
> > >
> > > I use 5 min intraday data over a 1,000 symbol database and
> > > Amibroker's new walkforward support. However each
> walkforward
> > > step
> > > takes a long time probably due to the large size of the data
> > > set.
> > >
> > > I have looked into ways to improve the run time performance.
> > > Here
> > > are some of the things I tried:
> > >
> > > 1) Buy new computer. This had the best results. Run time per
> > > pass
> > > dropped greatly. A new core 2 processor with the highest
> clock
> > > rate
> > > I could find was about twice as fast as my old laptop.
> > >
> > > 2) Use "Check AFL" to find functions that are slow and write
> > > them in
> > > C. I found that the DayOfWeek() function is very slow in
> > > comparison
> > > to other operations, so is Prec(). I moved these to C and
> > > reduced my
> > > run time a good bit. My DayOfWeek() function exploits the
> fact
> > > that
> > > each bar of a day is the same day of the week and the first
> bar
> > > of
> > > the day is probably the day after the last. It avoids
> finding
> > > the
> > > actual day on each bar. This saved more time than any of the
> > > other
> > > optimizations.
> > >
> > > 3) Rewrite the whole system in C. Sadly this only saved a
> about
> > > 10%,
> > > not enough to justify the risk of bugs and the trouble of
> > > maintaining
> > > the code. I went to no great lengths to optimize the code,
> but
> > > it
> > > goes to show how little overhead AFL adds and how highly
> > > optimized
> > > the AFL code is already.
> > >
> > > 4) Write a C route to cache results that do not depend on
> the
> > > value
> > > being optimized. Since many of the calculations dont change
> > > with
> > > each optimization step or only depend on a single
> optimization
> > > parameter, they dont need to be recalculated with each
> > > optimization
> > > step. I had high hopes for this approach and spent some time
> on
> > > it.
> > > I was able to get cache hit rates up over 99% on a
> walkforward
> > > test,
> > > but ran into memory management problems. I could overcome
> the
> > > problems, but the results where disappointing. It only saved
> > > about
> > > 20% of the time per run. I suspect that there is enough
> > > overhead in
> > > setting up the stock arrays that avoiding some calculations
> did
> > > not
> > > make much difference. Also, it becomes hard to track what
> each
> > > calculation depends on.
> > >
> > > It was interesting that many of the values could be
> compressed
> > > using
> > > simple repeat coding. 200MB was enough the cache all of the
> > > values
> > > that did not depend on any optimization parm and are re-used
> > > many
> > > times for each optimization pass.
> > >
> > > 5) Improvements to AmiBroker. The new optimizer was a big
> help,
> > > so
> > > was the new support for QuickALF. These required no changes
> to
> > > the
> > > code and had a large improvement and made walkforward
> testing
> > > much
> > > more practical. The new optimizer allowed me to replace my
> own
> > > search code that I had hacked using AFL.
> > >
> > > 6) Multi core support - Sadly I have not found a practical
> way
> > > to put
> > > the other cores on my system to work. To work with the new
> > > optimization framework, it looks like this is best done
> within
> > > the
> > > ami code itself.
> > >
> > > 7) Really exotic stuff - I played with the CUDA api a bit.
> Very
> > > cool
> > > stuff. It allows of the 64 or so cores in the graphics
> > > processor.
> > > These are each able to perform one single precision floating
> > > point
> > > operation per cycle. To work, I would have to preload the
> > > database
> > > into the graphics card memory and find a way to avoid any
> per
> > > symbol
> > > overhead in amibroker. This would just shove the
> > > buy/sell/buyprice,
> > > etc arrays back to ami to process the trade list. If I could
> > > find a
> > > way to avoid any overhead in setting up open/high/low/close
> > > arrays in
> > > amibroker, I would do it.
> > >
> > > Fresh out of other ideas.
> > >
> > >
> > >
> >
>
>
>
__._,_.___

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




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___