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

Re: [amibroker] Methods for speeding up AFL code



PureBytes Links

Trading Reference Links

Tomasz,

Thank you for the helpful suggestions.
My replies below are for everyones benefit.

You have done a great job in making the AFL fast.
Unfortunately, I still need to speed up my stuff more.  I don't need  
to recompute ALL the historical bar related
stuff for every second, just some simple stuff related to the last  
bars (1 min) real time price until the next bar opens.

On May 11, 2007, at 10:30 AM, Tomasz Janeczko wrote:

> Hello,
>
> You really need to take a look at the following and I guess you  
> will be able to rewrite
> your formulas to run 10 times faster.
>
> 1. Use Tools->preferences->Misc "Display chart timing" to find out  
> which formula takes
> the most time to execute

Most of the "generic" AFL runs in <.1 sec with my compute intensive  
functions turned off
With my main function turned on (called 3 times for different Ehlers  
adaptive moving averages),
it goes up by .25 sec per 1000 bars.  I previously rewrote some of  
this function that I downloaded
to speed it up by a factor of 5-10.

I have another function that computes a result in 10 different  
settings to look for the best result.
This of course takes a lot of time, and I have to limit the history  
in the AFL to keep it under a second.
This is of course where all the time goes.  Computing things in  
multiple settings (related to multiple time frames).

Once the Total time goes over 1 sec, the UI does not respond well  
since the quotes come quicker than that.

> 2. Use AFL editor "Check" function to find out how many past bars  
> given formula requires

It reports 100,000 because that was put into the SetBarsRequired  
(SBR) to turn off fast AFL
Fast AFL was causing problems with indicator lines not displaying  
intermittently previously.
When I remove the SBR function, everything speeds up by 2x.

I tried adding a ParamToggle to switch SBR from 100,000 to 0.   
However, once the SBR has
been set to 100,000, it can not be turned back off from AFL.  I have  
to recompile to reset it.
Is there a way to reset the chart and SBR function while the AFL is  
running?

> 3. To minimize number of charts required:
>   a) avoid Cum() function, instead use BarIndex() where possible

I do not use this function.

>   b) use SetBarsRequired at the end of formula to force smaller  
> number of bars to be used (may affect some indicator values)

Did not make a difference.

>   c) use VARIABLES as much as you can. If you need the same  
> function twice - call it ONCE and assign the result to variable
>    and use variable later instead of calling the same function over  
> and over

My normal practice --never calculate the same thing twice.

>   d) investigate what you are doing inside loops. When you put very  
> time consuming stuff inside loop it will take N-times more
>  than the same stuff outside loop. Remove array functions from  
> inside the loops. For max speed loops should operate on array
> ELEMENTS only.

My normal practice --never calculate something in a loop that can be  
pre-computed outside the loop.

I am a speed demon.
I was programming real time machine control applications in machine  
language before the first microprocessor came out.

Thank you for any further help you can suggest.

Dennis

>
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: "Dennis Brown" <see3d@xxxxxxxxxxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Friday, May 11, 2007 4:18 PM
> Subject: [amibroker] Methods for speeding up AFL code
>
>
>> Hello,
>>
>> I have run out of processing speed on my 2GHz core duo trading
>> machine.  I do a lot of indicator computing and have bogged down AB
>> to the point where it will no longer respond to the UI functions like
>> cross hairs or switching timeframes when I click the buttons --or
>> even being able to edit the AFL --and I still want to do 10 times as
>> much as I am doing now.  The real time processing speed is inhibiting
>> my creativity.
>>
>> So far I have put in a parameter that limits the number of bars that
>> my most intensive calculations use.  This helped, but not enough.
>>
>> My next idea is to only compute some functions that do not change
>> often only once per bar complete.
>>
>> However, I still need to compute everything if I change a parameter,
>> or switch stocks.  To do this, I thought I might have to keep a copy
>> of every parameter and compare each one to the value when it was last
>> computed --and set a "needs updating" flag if any have changed.
>>
>> Has anyone else used this approach?
>> Any hints about what I need to watch out for?
>> Is there an easier way?
>>
>> Thanks,
>> Dennis



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/