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