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

Re: [amibroker] Adventures in improving Ami Backtest speed



PureBytes Links

Trading Reference Links

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

__,_._,___