//+------------------------------------------------------------------+ //| MAMA_True.mq5 | //| MQL5 Code: Copyright © 2010, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ //--- авторство индикатора #property copyright "Copyright © 2010, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //--- номер версии индикатора #property version "1.10" //--- отрисовка индикатора в основном окне #property indicator_chart_window //--- для расчета и отрисовки индикатора использовано два буфера #property indicator_buffers 2 //--- использовано два графических построения #property indicator_plots 2 //+----------------------------------------------+ //| Параметры отрисовки индикатора FAMA | //+----------------------------------------------+ //--- отрисовка индикатора 1 в виде линии #property indicator_type1 DRAW_LINE //--- в качестве цвета бычей линии индикатора использован зеленый цвет #property indicator_color1 Lime //--- линия индикатора 1 - непрерывная кривая #property indicator_style1 STYLE_SOLID //--- толщина линии индикатора 1 равна 1 #property indicator_width1 1 //--- отображение бычей метки индикатора #property indicator_label1 "MAMA" //+----------------------------------------------+ //| Параметры отрисовки индикатора MAMA | //+----------------------------------------------+ //--- отрисовка индикатора 2 в виде линии #property indicator_type2 DRAW_LINE //--- в качестве цвета медвежьей линии индикатора использован красный цвет #property indicator_color2 Red //--- линия индикатора 2 - непрерывная кривая #property indicator_style2 STYLE_SOLID //--- толщина линии индикатора 2 равна 1 #property indicator_width2 1 //--- отображение медвежьей метки индикатора #property indicator_label2 "FAMA" //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input double FastLimit = 0.5; input double SlowLimit = 0.05; //+----------------------------------------------+ //--- объявление динамических массивов, которые в дальнейшем //--- будут использованы в качестве индикаторных буферов double MAMABuffer[]; double FAMABuffer[]; //--- объявление целочисленных переменных начала отсчета данных int StartBar; //+------------------------------------------------------------------+ //| CountVelue() function | //+------------------------------------------------------------------+ double CountVelue(double &Array1[],double &Array2[]) { //--- double Resalt= (0.0962*Array1[0] +0.5769*Array1[2] -0.5769*Array1[4] -0.0962*Array1[6]) *(0.075*Array2[1]+0.54); //--- return(Resalt); } //+------------------------------------------------------------------+ //| ReCountArray() function | //+------------------------------------------------------------------+ void ReCountArray(double &Array[]) { //--- Array[6]=Array[5]; Array[5]=Array[4]; Array[4]=Array[3]; Array[3]=Array[2]; Array[2]=Array[1]; Array[1]=Array[0]; //--- return; } //+------------------------------------------------------------------+ //| SmoothVelue() function | //+------------------------------------------------------------------+ double SmoothVelue(double &Array[]) { //--- return(0.2*Array[0]+0.8*Array[1]); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- инициализация констант StartBar=7+1; //--- превращение динамического массива MAMABuffer в индикаторный буфер SetIndexBuffer(0,MAMABuffer,INDICATOR_DATA); //--- создание метки для отображения в DataWindow PlotIndexSetString(0,PLOT_LABEL,"MAMA"); //--- осуществление сдвига начала отсчета отрисовки индикатора PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBar); //--- превращение динамического массива FAMABuffer в индикаторный буфер SetIndexBuffer(1,FAMABuffer,INDICATOR_DATA); //--- создание метки для отображения в DataWindow PlotIndexSetString(1,PLOT_LABEL,"FAMA"); //--- осуществление сдвига начала отсчета отрисовки индикатора PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBar+1); //--- инициализации переменной для короткого имени индикатора string shortname; StringConcatenate(shortname,"The MESA Adaptive Moving Average(",FastLimit,", ",SlowLimit,")"); //--- создание имени для отображения в отдельном подокне и во всплывающей подсказке IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //--- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // количество истории в барах на текущем тике const int prev_calculated,// количество истории в барах на предыдущем тике const int begin, // номер начала достоверного отсчета баров const double &price[]) // ценовой массив для расчета индикатора { //--- проверка количества баров на достаточность для расчета if(rates_total1.50*period[1]) period[0]=1.50*period[1]; if(period[0]<0.67*period[1]) period[0]=0.67*period[1]; if(period[0]<6.00) period[0]=6.00; if(period[0]>50.0) period[0]=50.0; //--- period[0]=0.2*period[0]+0.8*period[1]; //--- if(I1[0]) Phase[0]=57.27272987*MathArctan(Q1[0]/I1[0]); else Phase[0]=57.27272987; //--- DeltaPhase=Phase[1]-Phase[0]; if(DeltaPhase<1) DeltaPhase=1.0; //--- alpha=FastLimit/DeltaPhase; if(alpha