klod Posted March 25, 2011 Report Share Posted March 25, 2011 (edited) I post the source of an indicator (MQL4) which is a modification from an other. I expect this will be usefull. I use it with the code manew=iCustom(NULL,PERIOD_M15,"#MAMAnew",0,0); it is usefull to determine when the indicator change of signs. When the value is negative, the ask/bid is going down, ... //+------------------------------------------------------------------+ //| MAMAnew.mq4 | //+------------------------------------------------------------------+ //Mesa Adaptive Moving Average", Stocks and Commodities Magazine, August 2001. // //Ehlers, Rocket sciences for trader, John Wiley & sons, 2001, p177... //modification: klod (claudeh5) //==================================================================== #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Aqua #property indicator_color2 Chocolate //---- input parameters double FastLimit=0.5; double SlowLimit=0.05; //---- buffers double FABuffer[]; //double MABuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicator line SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(0,FABuffer); // SetIndexBuffer(1,MABuffer); //---- name for DataWindow and indicator subwindow label short_name="#MAMAnew"; IndicatorShortName(short_name); SetIndexLabel(0,"#FAMA"); // SetIndexLabel(1,"#MAMA"); //---- SetIndexDrawBegin(0,50); // SetIndexDrawBegin(1,50); //---- return(0); } //+------------------------------------------------------------------+ //| #MAMA | //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); double jI, jQ, DeltaPhase, alpha, ttime; double Price[5],Smooth[8],Detrender[8],Q1[8],I1[8],I2[3],Q2[3]; double Re[3],Im[3],SmoothPeriod[3],Period_[3],Phase[3],MAMA[3],FAMA[3]; //---- if(Bars<=5) return(0); //---- i=(Bars-counted_bars)+15; while(i>=0) { Price[1]=((High+Low)/2); Price[2]=((High[i+1]+Low[i+1])/2); Price[3]=((High[i+2]+Low[i+2])/2); Price[4]=((High[i+3]+Low[i+3])/2); Smooth[1] = (4*Price[1] + 3*Price[2] + 2*Price[3] + Price[4]) / 10; Detrender[1] = (0.0962*Smooth[1] + 0.5769*Smooth[3] - 0.5769*Smooth[5] - 0.0962*Smooth[7])*(0.075*Period_[2] + 0.54); // {Compute InPhase and Quadrature components} Q1[1] = (0.0962*Detrender[1] + 0.5769*Detrender[3] - 0.5769*Detrender[5] - 0.0962*Detrender[7])*(0.075*Period_[2] + 0.54); I1[1] = Detrender[4]; // {Advance the phase of I1 and Q1 by 90 degrees} jI = (0.0962*I1[1] + 0.5769*I1[3] - 0.5769*I1[5] - 0.0962*I1[7])*(0.075*Period_[2] + 0.54); jQ = (0.0962*Q1[1] + 0.5769*Q1[3] - 0.5769*Q1[5] - 0.0962*Q1[7])*(0.075*Period_[2] + 0.54); // {Phasor addition for 3 bar averaging)} I2[1] = I1[1] - jQ; Q2[1] = Q1[1] + jI; // {Smooth the I and Q components before applying the discriminator} I2[1] = 0.2*I2[1] + 0.8*I2[2]; Q2[1] = 0.2*Q2[1] + 0.8*Q2[2]; // {Homodyne Discriminator} Re[1] = I2[1]*I2[2] + Q2[1]*Q2[2]; Im[1] = I2[1]*Q2[2] - Q2[1]*I2[2]; Re[1] = 0.2*Re[1] + 0.8*Re[2]; Im[1] = 0.2*Im[1] + 0.8*Im[2]; if (Im[1]!=0 && Re[1]!=0) Period_ [1]= 360/MathArctan(Im[1]/Re[1]); if (Period_[1]>1.5*Period_[2]) Period_[1] = 1.5*Period_[2]; if (Period_[1]<0.67*Period_[2])Period_[1] = 0.67*Period_[2]; if (Period_[1]<6) Period_[1] = 6; if (Period_[1]>50) Period_[1] = 50; Period_[1] = 0.2*Period_[1] + 0.8*Period_[2]; SmoothPeriod[1] =0.33*Period_[1] + 0.67*SmoothPeriod[2]; if (I1[1] != 0) Phase[1] = (MathArctan(Q1[1] / I1[1])); DeltaPhase = Phase[2] - Phase[1]; if (DeltaPhase < 1) DeltaPhase = 1; alpha = FastLimit / DeltaPhase; if (alpha < SlowLimit) alpha = SlowLimit; MAMA[1] = alpha*Price[1] + (1 - alpha)*MAMA[2]; FAMA[1] = 0.5*alpha*MAMA[1] + (1 - 0.5*alpha)*FAMA[2]; FABuffer=1000*(MAMA[1]-FAMA[1]); Smooth[7]=Smooth[6]; Smooth[6]=Smooth[5]; Smooth[5]=Smooth[4]; Smooth[4]=Smooth[3]; Smooth[3]=Smooth[2]; Smooth[2]=Smooth[1]; Detrender[7]=Detrender[6]; Detrender[6]=Detrender[5]; Detrender[5]=Detrender[4]; Detrender[4]=Detrender[3]; Detrender[3]=Detrender[2]; Detrender[2]=Detrender[1]; Q1[7]=Q1[6]; Q1[6]=Q1[5]; Q1[5]=Q1[4]; Q1[4]=Q1[3]; Q1[3]=Q1[2]; Q1[2]=Q1[1]; I1[7]=I1[6];I1[6]=I1[5];I1[5]=I1[4];I1[4]=I1[3];I1[3]=I1[2];I1[2]=I1[1]; Q2[2]=Q2[1]; I2[2]=I2[1]; Re[2]=Re[1]; Im[2]=Im[1]; SmoothPeriod[2]=SmoothPeriod[1]; Phase[2]=Phase[1]; Period_[2]=Period_[1]; MAMA[2]=MAMA[1]; FAMA[2]=FAMA[1]; i--; } return(0); } //+------------------------------------------------------------------+ Edited March 25, 2011 by klod indication of modification Quote Link to comment Share on other sites More sharing options...
hermes Posted March 26, 2011 Report Share Posted March 26, 2011 Could you compile it and put it here as finished? Thanks Hermes Quote Link to comment Share on other sites More sharing options...
john1368 Posted March 26, 2011 Report Share Posted March 26, 2011 Second that, a completed one would be great. Thanks John. Quote Link to comment Share on other sites More sharing options...
klod Posted March 26, 2011 Author Report Share Posted March 26, 2011 (edited) http://www.mediafire.com/?kws7qd9tfpfkvcz put it in metatrader\experts\indicators to load, open (from metatrader) navigator (ctrl-N) and choose #MAMAnew to drag in an opened window (EURUSD for example). You see a new sub-window in EURUSD: this is your new indicator remark: you can compile the source code by the metaexperts editor (F4) Edited March 26, 2011 by klod freddy 1 Quote Link to comment Share on other sites More sharing options...
freddy Posted March 26, 2011 Report Share Posted March 26, 2011 Hi, Just a little simple trick! the fastest way to get the mq4 file for any source code of an indicator, you can simply open your notepad. copy and paste the source file in it, ( here from //+---- to } ) save your file with the name you want ( here: MAMAnew ) then just change .txt in .mq4 ( here MAMAnew.txt in MAMAnew.mq4) et voilà! you can of course also use Metaeditor. hope it helps freddy Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.