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

[amibroker] Re: "Pimping" my code


  • Date: Tue, 02 Feb 2010 02:28:10 -0000
  • From: "Mike" <sfclimbers@xxxxxxxxx>
  • Subject: [amibroker] Re: "Pimping" my code

PureBytes Links

Trading Reference Links

No chance for what?

The primary issues with your original code were:

1. Redundant calls to the same function. You have called each of Fast_EMA and Slow_EMA twice. It would have been better instead to call each once and hold the result

e.g.
fast = Fast_EMA(period1);
slow = Slow_EMA(period2);
Buy = Cum(1)>=25 AND Cross(fast, slow) AND period1 < period2;
Sell= Cross(slow, fast);

2. You have two functions with identical logic. The only difference is the global variable in which the result is stored. There is a cost for AmiBroker to have to parse each function. It would have been better to instead have a single function that returned the result generically, rather than writing directly to a global variable.

e.g.
function My_EMA(period) {
  local result;
  ...
  return result;
}

3. It is wasteful to have to check an "if" condition at every iteration of the loop. Set the 0th element of the array first, then loop from 1 to BarCount - 1 without the unnecessary if.

e.g.
result[0] = ...;
for (bar = 1; bar < BarCount; bar++) {
  ...
}

And, of course, any time you can combine multiple calculations within a single loop (as opposed to looping through all bars for each calculation), that will be the fastest.

Aron's solution addressed all those issues. I don't see how adding to composite would help you.

Mike

--- In amibroker@xxxxxxxxxxxxxxx, "Markus Witzler" <funnybiz@xxx> wrote:
>
> So, there seems to be no chance...
> 
> Thanks though, Aron!
> 
> Markus
> 
>   ----- Original Message ----- 
>   From: Aron 
>   To: amibroker@xxxxxxxxxxxxxxx 
>   Sent: Monday, February 01, 2010 2:46 PM
>   Subject: Re: [amibroker] "Pimping" my code
> 
> 
>     
>   You would still have to use Foreign() .
> 
>   As far as I know for best execution times you need to use:
>    
>    No Incudes
>    No user functions/procedures
>    No loops
>    No Foreign()
> 
> 
> 
>   On 2/1/2010 2:33 PM, Markus Witzler wrote: 
> 
>     Hello Aron,
> 
>     right, I was thinking too complicated.    ;-)
> 
>     Still, would storing the results of the loop into an addtocomposite ticker make sense that my code could access every time it checked for a MY crossover instead of running the loop?
> 
>     Thanks for your clue!
> 
>     Markus
>       ----- Original Message ----- 
>       From: Aron 
>       To: amibroker@xxxxxxxxxxxxxxx 
>       Sent: Monday, February 01, 2010 1:52 PM
>       Subject: Re: [amibroker] "Pimping" my code
> 
> 
>         
>       period1 =  Optimize("period1", 25, 10, 50, 5); 
>       period2= Optimize("period2", 840, 800, 900, 10); 
> 
>       fast [0] = C[0]; 
>       slow [0] = C[0]; 
>       for( bar = 1; bar < BarCount; bar++ ) 
>       { 
>          fast[ bar ] =fast[bar-1]+(Close[bar]-fast[bar-1])*2/(period1+1); 
>          slow[ bar ] =slow[bar-1]+(Close[bar]-slow[bar-1])*2/(period2+1); 
>       } 
> 
>       Plot(fast, "" ,colorGreen); 
>       Plot(slow, "", colorRed); 
>       Buy = Cross(fast, slow); 
>       Sell = Cross(slow,fast); 
> 
> 
> 
>       On 2/1/2010 1:26 PM, Markus Witzler wrote: 
> 
>         Hello,
> 
>         I have loops built into my code and thus suppose that it´s running too slow.
> 
>         I use a EMA crossover system (long side only at this point):
> 
>         Buy= Cum(1)>=25 AND Cross(Fast_EMA(period1), Slow_EMA(period2))AND period1 < period2; 
> 
>         Sell= Cross(Slow_EMA(period2), Fast_EMA(period1));
> 
>         I coded Fast_EMA and Slow_EMA instead of using AB´s built-in EMA function to be able to use my own seed values.
> 
>         Anyways, the code for both follows further below.
> 
>         Would the rode run faster, if I stored the values for fast_MA and slow_EMA in a separate composite and then used these in the buy and sell rules?
> 
>         Or is there another way to make my code faster? Are there some clues how to "pimp" my code when I "have" to use loops (for instance when coding proprietary stops instead of applystop etc.)???
> 
>         Some other general guidelines what to look out for when trying to keep the code as fast as possible (or better: the execution thereof)??
> 
>         Thanks 
> 
>         Markus
> 
>         function Fast_EMA( period1 ) 
> 
>         { local bar; 
> 
>         for( bar = 0; bar < BarCount; bar++ ) 
> 
>         { if (bar < 1)
> 
>         EMA_fast[ bar ] = Close[ 0 ];
> 
>         else
> 
>         EMA_fast[ bar ] =EMA_fast[bar-1]+(Close[bar]-EMA_fast[bar-1])*2/(period1+1); 
> 
>         } 
> 
>         return EMA_fast; 
> 
>         } 
> 
>         period1 = Optimize("period1", 25, 10, 50, 5);
> 
>         Exp_MA_fast = Fast_EMA ( Period1 );
> 
>          
> 
>         function Slow_EMA( period2 ) 
> 
>         { local bar;
> 
>         for( bar = 0; bar < BarCount; bar++ ) 
> 
>         { if (bar < 1)
> 
>         EMA_slow[ bar ] = Close[ 0 ];
> 
>         else
> 
>         EMA_slow[ bar ] =EMA_slow[bar-1]+(Close[bar]-EMA_slow[bar-1])*2/(period2+1); 
> 
>         } 
> 
>         return EMA_slow; 
> 
>         } 
> 
>         period2 = Optimize("period2", 840, 800, 900, 10);
> 
>         Exp_MA_slow = Fast_EMA ( Period2 );
> 
>          
> 
> 
> 
>         __________ Information from ESET Smart Security, version of virus signature database 4668 (20091207) __________
> 
>         The message was checked by ESET Smart Security.
> 
>         http://www.eset.com
> 
> 
> 
> 
> 
>       __________ Information from ESET Smart Security, version of virus signature database 4668 (20091207) __________
> 
>       The message was checked by ESET Smart Security.
> 
>       http://www.eset.com
> 
> 
> 
>     __________ Information from ESET Smart Security, version of virus signature database 4668 (20091207) __________
> 
>     The message was checked by ESET Smart Security.
> 
>     http://www.eset.com
> 
> 
> 
> 
>   
> 
>   __________ Information from ESET Smart Security, version of virus signature database 4668 (20091207) __________
> 
>   The message was checked by ESET Smart Security.
> 
>   http://www.eset.com
> 
> 
> 
> 
> __________ Information from ESET Smart Security, version of virus signature database 4668 (20091207) __________
> 
> The message was checked by ESET Smart Security.
> 
> http://www.eset.com
>




------------------------------------

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

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:
    amibroker-digest@xxxxxxxxxxxxxxx 
    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/