[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

Hello,

Then my advice is to use AddToComposite for computing intensive task.

lasttimenum = StaticVarGet("lasttimenum"); // if you want it chart-specific you may add GetChartID() prefix/suffix

if( ( Now( 4 ) - lasttimenum ) > 100 ) 
{
  // one minute passed sincce last recalc
 
  .... // do computing intesive stuff here
  result = .. .put your result array here

  AddToComposite( result, "~myresult", "x", atcFlagEnableInIndicator | atcDefaults );
}

// regular part that is executed all the time
result = Foreign("~myresult", "c" ); // this will retrieve values of computing-intensive part calculated last time 


Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "Dennis Brown" <see3d@xxxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Friday, May 11, 2007 6:52 PM
Subject: Re: [amibroker] Methods for speeding up AFL code


> 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
> 
> 
> 
> 
>


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/