Time: 2012-07-12 | Download file:JJMA_(2).MQ4
/* Для работы индикатора следует положить файлы JJMASeries.mqh и PriceSeries.mqh в папку (директорию): MetaTrader\experts\include\ Heiken Ashi#.mq4 в папку (директорию): MetaTrader\indicators\ */ //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ //| JJMA.mq4 | //| JMA code: Copyright © 2005, Weld, Jurik Research | //| http://weld.torguem.net | //| MQL4+J2JMA: Copyright © 2006, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ #property copyright "Nikolay Kositsin" #property link "farria@mail.redcom.ru" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- количество индикаторных буфферов #property indicator_buffers 1 //---- цвет индикатора #property indicator_color1 Red //---- ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююжж+ extern int Length = 5; // глубина первого сглаживания extern int Phase = 100; // параметр первого сглаживания, изменяющийся в пределах -100 ... +100, влияет на качество переходного процесса; extern int Shift = 0; // cдвиг индикатора вдоль оси времени extern int Input_Price_Customs = 0;//Выбор цен, по которым производится расчёт индикатора //(0-CLOSE, 1-OPEN, 2-HIGH, 3-LOW, 4-MEDIAN, 5-TYPICAL, 6-WEIGHTED, 7-Heiken Ashi Close, 8-SIMPL, 9-TRENDFOLLOW, 10-0.5*TRENDFOLLOW, //11-Heiken Ashi Low, 12-Heiken Ashi High, 13-Heiken Ashi Open, 14-Heiken Ashi Close.) //---- жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ //---- индикаторные буфферы double JJMA[]; //---- переменные с плавающей точкой double Temp_Series,Resalt; //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ //| JJMA indicator initialization function | //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ int init() { //---- определение стиля исполнения графика SetIndexStyle (0,DRAW_LINE); //---- 1 индикаторный буффер использован для счёта SetIndexBuffer(0,JJMA); //---- горизонтальный сдвиг индикаторной линии SetIndexShift (0, Shift); //---- установка значений индикатора, которые не будут видимы на графике SetIndexEmptyValue(0,0.0); //---- имя для окон данных и лэйба для субъокон. IndicatorShortName ("JJMA( Length="+Length+", Phase="+Phase+", Shift="+Shift+")"); SetIndexLabel (0, "JJMA"); //---- IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); //---- установка алертов на недопустимые значения входных параметров ==============================================================+ if(Phase<-100){Alert("Параметр Phase должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase+ " будет использовано -100");} if(Phase> 100){Alert("Параметр Phase должен быть от -100 до +100" + " Вы ввели недопустимое " +Phase+ " будет использовано 100");} if(Length< 1){Alert("Параметр Length должен быть не менее 1" + " Вы ввели недопустимое " +Length+ " будет использовано 1" );} PriceSeriesAlert(Input_Price_Customs); //+================================================================================================================================+ //---- завершение инициализации return(0); } //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ //| J2JMA iteration function | //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ int start() { //----+ Введение целых переменных и получение уже подсчитанных баров //---- блокирование пересчёта всех подсчитанных и отрисованных баров при подключении к интернету int reset,MaxBar,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1); //---- проверка на возможные ошибки if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);} //---- последний подсчитанный бар должен быть пересчитан if (counted_bars>0) counted_bars--; //----+ Введение и инициализация внутренних переменных функции JJMASeries, nJMAnumber=1(Одно обращение к функции) if (counted_bars==0)JJMASeriesReset(1); //---- определение номера самого старого бара, начиная с которого будет произедён пересчёт новых баров MaxBar=Bars-1; int limit=MaxBar-counted_bars; //----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА for(int bar=limit;bar>=0;bar--) { //----+ Обращение к функции PriceSeries для получения входной цены Series Temp_Series=PriceSeries(Input_Price_Customs, bar); //----+ Обращение к функции JJMASeries за номерам 0. Параметры nJMAPhase и nJMALength не меняются на каждом баре (nJMAdin=0) Resalt=JJMASeries(0,0,MaxBar,limit,Phase,Length,Temp_Series,bar,reset); //----+ проверка на отсутствие ошибки в предыдущей операции if(reset!=0){INDICATOR_COUNTED(-1);return(-1);} JJMA[bar]=Resalt; } //---- завершение вычислений значений индикатора return(0); } //+---------------------------------------------------------------------------------------------------------------------------+ //----+ Введение функции JJMASeries (файл JJMASeries.mqh следует положить в папку (директорию): MetaTrader\experts\include) //----+ Введение функции JJMASeriesReset (дополнительная функция файла JJMASeries.mqh) //----+ Введение функции INDICATOR_COUNTED(дополнительная функция файла JJMASeries.mqh) #include//+---------------------------------------------------------------------------------------------------------------------------+ //----+ Введение функции PriceSeries, файл PriceSeries.mqh следует положить в папку (директорию): MetaTrader\experts\include //----+ Введение функции PriceSeriesAlert (дополнительная функция файла PriceSeries.mqh) #include //+---------------------------------------------------------------------------------------------------------------------------+