MAMA.mq4
//+------------------------------------------------------------------+
//| #MAMA.mq4 |
//| |
//| http://forex.kbpauk.ru/ |
//+------------------------------------------------------------------+
#property link "http://forex.kbpauk.ru/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Chocolate
//---- input parameters
extern double FastLimit=0.5;
extern 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="#MAMA";
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,Smooth,Detrender,Q1,I1,I2,Q2;
double Re,Im,SmoothPeriod,Period_,Phase,MAMA,FAMA;
//----
if(Bars<=5) return(0);
//----
i=(Bars-counted_bars)+50;
while(i>=0)
{
Price=((High+Low)/2); Price=((High+Low)/2);
Price=((High+Low)/2); Price=((High+Low)/2);
Smooth = (4*Price + 3*Price + 2*Price + Price) / 10;
Detrender = (0.0962*Smooth + 0.5769*Smooth - 0.5769*Smooth - 0.0962*Smooth)*(0.075*Period_ + 0.54);
// {Compute InPhase and Quadrature components}
Q1 = (0.0962*Detrender + 0.5769*Detrender - 0.5769*Detrender - 0.0962*Detrender)*(0.075*Period_ + 0.54);
I1 = Detrender;
// {Advance the phase of I1 and Q1 by 90 degrees}
jI = (0.0962*I1 + 0.5769*I1 - 0.5769*I1 - 0.0962*I1)*(0.075*Period_ + 0.54);
jQ = (0.0962*Q1 + 0.5769*Q1 - 0.5769*Q1 - 0.0962*Q1)*(0.075*Period_ + 0.54);
// {Phasor addition for 3 bar averaging)}
I2 = I1 - jQ;
Q2 = Q1 + jI;
// {Smooth the I and Q components before applying the discriminator}
I2 = 0.2*I2 + 0.8*I2;
Q2 = 0.2*Q2 + 0.8*Q2;
// {Homodyne Discriminator}
Re = I2*I2 + Q2*Q2;
Im = I2*Q2 - Q2*I2;
Re = 0.2*Re + 0.8*Re;
Im = 0.2*Im + 0.8*Im;
if (Im!=0 && Re!=0) Period_ = 360/MathArctan(Im/Re);
if (Period_>1.5*Period_) Period_ = 1.5*Period_;
if (Period_<0.67*Period_)Period_ = 0.67*Period_;
if (Period_<6) Period_ = 6;
if (Period_>50) Period_ = 50;
Period_ = 0.2*Period_ + 0.8*Period_;
SmoothPeriod =0.33*Period_ + 0.67*SmoothPeriod;
if (I1 != 0) Phase = (MathArctan(Q1 / I1));
DeltaPhase = Phase - Phase;
if (DeltaPhase < 1) DeltaPhase = 1;
alpha = FastLimit / DeltaPhase;
if (alpha < SlowLimit)alpha = SlowLimit;
MAMA = alpha*Price + (1 - alpha)*MAMA;
FAMA = 0.5*alpha*MAMA + (1 - 0.5*alpha)*FAMA;
FABuffer=MAMA;
MABuffer=FAMA;
Smooth=Smooth;Smooth=Smooth;Smooth=Smooth;Smooth=Smooth;Smooth=Smooth;Smooth=Smooth;
Detrender=Detrender;Detrender=Detrender;Detrender=Detrender;Detrender=Detrender;Detrender=Detrender;Detrender=Detrender;
Q1=Q1;Q1=Q1;Q1=Q1;Q1=Q1;Q1=Q1;Q1=Q1;
I1=I1;I1=I1;I1=I1;I1=I1;I1=I1;I1=I1;
Q2=Q2;
I2=I2;
Re=Re;
Im=Im;
SmoothPeriod=SmoothPeriod;
Phase=Phase;
Period_=Period_;
MAMA=MAMA;
FAMA=FAMA;
i--;
}
return(0);
}
//+------------------------------------------------------------------+
过来看看的 LZ说的很不错 学习了,不错 帮你顶下哈!! 学习了,不错 谢谢楼主分享 谢谢楼主分享 支持下 支持下
页:
[1]
2