Dukascopy
 
 
Wiki JStore Search Login

NonLagAMA mq4 converter runtime issue
 Post subject: NonLagAMA mq4 converter runtime issue Post rating: 0   New post Posted: Wed 23 Jan, 2013, 18:14 
User avatar

User rating: 98
Joined: Mon 23 Jul, 2012, 02:02
Posts: 656
Location: United States, Durham, NC
Here is an indicator which converts. However, my client reports significant inefficiencies at runtime. He has tried both calculation on BAR and calculation on TICK. I don't have more information than this claim, that when used on several charts simultaneously (simple BAR charts), that it loads CPU excessively.

This originated from the following link:

https://codebase.mql4.com/4968

Would you mind giving this a test, and reporting guidelines as to how connector settings should be used so that it is efficient? This is our first experience with the Converter.

Personally I haven't seen cpu issues when calculating each bar, but there are some drawing artifacts shown on attached screenshot file.

Thanks !!

#property copyright "Copyright  2008, MetaQuotes Software Corp."
#property link     "https://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_width1 2
#property indicator_color2 RoyalBlue
#property indicator_width2 2
#property indicator_color3 Red
#property indicator_width3 2
//---- input parameters
extern int     Price         =0;
extern int     Length        =25;
extern int     Displace      =0;
extern int     Filter        =0;
extern int     Color         =1;
extern int     ColorBarBack  =2;
extern double  Deviation     =0;
//----
double Cycle= 4;
//---- indicator buffers
double MABuffer[];
double UpBuffer[];
double DnBuffer[];
double price[];
double trend[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
  int init()
  {
   int ft=0;
   string short_name;
//---- indicator line
   IndicatorBuffers(5);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MABuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,DnBuffer);
   SetIndexBuffer(3,price);
   SetIndexBuffer(4,trend);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexArrow(2,159);
   SetIndexArrow(3,159);
//---- name for DataWindow and indicator subwindow label
   short_name="NonLagAma("+Length+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"NLD");
   SetIndexLabel(1,"Up");
   SetIndexLabel(2,"Dn");
//----
   SetIndexShift(0,Displace);
   SetIndexShift(1,Displace);
   SetIndexShift(2,Displace);

   SetIndexDrawBegin(0,Length*Cycle+Length);
   SetIndexDrawBegin(1,Length*Cycle+Length);
   SetIndexDrawBegin(2,Length*Cycle+Length);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| NonLagMA_v4                                                      |
//+------------------------------------------------------------------+
int start()
  {
   int    i,shift, counted_bars=IndicatorCounted(),limit;
   double alfa, beta, t, Sum, Weight, step,g;
   double pi=3.1415926535;
//----
   double Coeff= 3*pi;
   int Phase=Length-1;
   double Len=Length*Cycle + Phase;
//----
   if(counted_bars > 0) limit=Bars-counted_bars;
   if(counted_bars < 0) return(0);
   if(counted_bars ==0) limit=Bars-Len-1;
   if(counted_bars < 1)
      for(i=1;i<Length*Cycle+Length;i++)
        {
         MABuffer[Bars-i]=0;
         UpBuffer[Bars-i]=0;
         DnBuffer[Bars-i]=0;
        }
   for(shift=limit;shift>=0;shift--)
     {
      Weight=0; Sum=0; t=0;
      for(i=0;i<=Len-1;i++)
        {
         g=1.0/(Coeff*t+1);
         if (t<=0.5)g=1;
         beta=MathCos(pi*t);
         alfa=g * beta;
         price[i]=iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);
         Sum+=alfa*price[i];
         Weight+=alfa;
         if(t < 1)t+=1.0/(Phase-1);
         else if(t < Len-1) t+=(2*Cycle-1)/(Cycle*Length-1);
        }
      if (Weight > 0) MABuffer[shift]=(1.0+Deviation/100)*Sum/Weight;
      if (Filter>0)
        {
         if(MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter*Point)MABuffer[shift]=MABuffer[shift+1];
        }
      if (Color>0)
        {
         trend[shift]=trend[shift+1];
         if (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) trend[shift]= 1;
         if (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1;
         if (trend[shift]>0)
           {
            UpBuffer[shift]=MABuffer[shift];
            if (trend[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
            DnBuffer[shift]=EMPTY_VALUE;
           }
         if (trend[shift]<0)
           {
            DnBuffer[shift]=MABuffer[shift];
            if (trend[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
            UpBuffer[shift]=EMPTY_VALUE;
           }
        }
     }
   return(0);
  }



Attachments:
File comment: Drawing artifact shown
DrawingArtifact.png [136.65 KiB]
Downloaded 330 times
NonLagAMA.mq4 [4.54 KiB]
Downloaded 322 times
DISCLAIMER: Dukascopy Bank SA's waiver of responsability - Documents, data or information available on this webpage may be posted by third parties without Dukascopy Bank SA being obliged to make any control on their content. Anyone accessing this webpage and downloading or otherwise making use of any document, data or information found on this webpage shall do it on his/her own risks without any recourse against Dukascopy Bank SA in relation thereto or for any consequences arising to him/her or any third party from the use and/or reliance on any document, data or information found on this webpage.
 
 Post subject: Re: NonLagAMA mq4 converter runtime issue Post rating: 0   New post Posted: Wed 23 Jan, 2013, 19:47 
User avatar

User rating: 98
Joined: Mon 23 Jul, 2012, 02:02
Posts: 656
Location: United States, Durham, NC
Client reports improvement his Connector Lookback was ZERO, so he has set it to a positive value and he reports CPU usage is fine now.

Where are guidelines for the Connector Settings documented?

Thanks !!


 

Jump to:  

cron
  © 1998-2025 Dukascopy® Bank SA
On-line Currency forex trading with Swiss Forex Broker - ECN Forex Brokerage,
Managed Forex Accounts, introducing forex brokers, Currency Forex Data Feed and News
Currency Forex Trading Platform provided on-line by Dukascopy.com