//+------------------------------------------------------------------+ //| MurreyMathFixPeriod.mq5 | //| Copyright © 2018, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ /* -------------------------------------------------------------------------------------------- * Линии 8/8 и 0/8 (Окончательное сопротивление). * Эти линии самые сильные и оказывают сильнейшие сопротивления и поддержку. -------------------------------------------------------------------------------------------- * Линия 7/8 (Слабая, место для остановки и разворота). Weak, Stall and Reverse * Эта линия слаба. Если цена зашла слишком далеко и слишком быстро и если она остановилась около этой линии, * значит она развернется быстро вниз. Если цена не остановилась около этой линии, она продолжит движение вверх к 8/8. -------------------------------------------------------------------------------------------- * Линия 1/8 (Слабая, место для остановки и разворота). Weak, Stall and Reverse * Эта линия слаба. Если цена зашла слишком далеко и слишком быстро и если она остановилась около этой линии, * значит она развернется быстро вверх. Если цена не остановилась около этой линии, она продолжит движение вниз к 0/8. -------------------------------------------------------------------------------------------- * Линии 6/8 и 2/8 (Вращение, разворот). Pivot, Reverse * Эти две линии уступают в своей силе только 4/8 в своей способности полностью развернуть ценовое движение. -------------------------------------------------------------------------------------------- * Линия 5/8 (Верх торгового диапазона). Top of Trading Range * Цены всех рынков тратят 40% времени, на движение между 5/8 и 3/8 линиями. * Если цена двигается около линии 5/8 и остается около нее в течении 10-12 дней, рынок сказал что следует * продавать в этой «премиальной зоне», что и делают некоторые люди, но если цена сохраняет тенденцию оставаться * выше 5/8, то она и останется выше нее. Если, однако, цена падает ниже 5/8, то она скорее всего продолжит * падать далее до следующего уровня сопротивления. -------------------------------------------------------------------------------------------- * Линия 3/8 (Дно торгового диапазона). Bottom of Trading Range * Если цены ниже этой лини и двигаются вверх, то цене будет сложно пробить этот уровень. * Если пробивают вверх эту линию и остаются выше нее в течении 10-12 дней, значит цены останутся выше этой линии * и потратят 40% времени двигаясь между этой линией и 5/8 линией. -------------------------------------------------------------------------------------------- * Линия 4/8 (Главная линия сопротивления/поддержки). Major Support/Resistance * Эта линия обеспечивает наибольшее сопротивление/поддержку. Этот уровень является лучшим для новой покупки или продажи. * Если цена находится выше 4/8, то это сильный уровень поддержки. Если цена находится ниже 4/8, то это прекрасный уровень * сопротивления. -------------------------------------------------------------------------------------------- */ //+------------------------------------------------------------------+ //| MurreyMathFixPeriod.mq5 | //| Copyright © 2018, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2018, Nikolay Kositsin" #property link "farria@mail.redcom.ru" #property version "1.00" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- для расчёта и отрисовки индикатора использован 41 буфер #property indicator_buffers 41 //---- использовано 40 графических построений #property indicator_plots 40 //+-----------------------------------+ //| объявление констант | //+-----------------------------------+ #define width_line 2 // Константа для толщины линии индикатора #define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора //+-----------------------------------+ //| Параметры отрисовки индикаторов | //+-----------------------------------+ //--- plot buffer 1 //#property indicator_label1 "Вращение, разворот [-2/8]" //"extremely overshoot [-2/8]" #property indicator_type1 DRAW_LINE #property indicator_color1 clrBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 width_line //--- plot buffer 2 //#property indicator_label2 "Слабая остановка и разворот [-1/8]" // "overshoot [-1/8]" #property indicator_type2 DRAW_LINE #property indicator_color2 clrDarkViolet #property indicator_style2 STYLE_SOLID #property indicator_width2 width_line //--- plot buffer 3 //#property indicator_label3 "Окончательное сопротивление [0/8]" // "Ultimate Support - extremely oversold [0/8]" #property indicator_type3 DRAW_LINE #property indicator_color3 clrAqua #property indicator_style3 STYLE_SOLID #property indicator_width3 width_line //--- plot buffer 4 //#property indicator_label4 "Слабая остановка и разворот [1/8]" // "Weak, Stall and Reverse - [1/8]" #property indicator_type4 DRAW_LINE #property indicator_color4 clrPeru #property indicator_style4 STYLE_SOLID #property indicator_width4 width_line //--- plot buffer 5 //#property indicator_label5 "Вращение, разворот [2/8]" // "Pivot, Reverse - major [2/8]" #property indicator_type5 DRAW_LINE #property indicator_color5 clrRed #property indicator_style5 STYLE_SOLID #property indicator_width5 width_line //--- plot buffer 6 //#property indicator_label6 "Дно торгового диапозона [3/8]" // "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone" #property indicator_type6 DRAW_LINE #property indicator_color6 clrLime #property indicator_style6 STYLE_SOLID #property indicator_width6 width_line //--- plot buffer 7 //#property indicator_label7 "Главные сопротивление/поддержка [4/8]" // "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level" #property indicator_type7 DRAW_LINE #property indicator_color7 clrDarkGray #property indicator_style7 STYLE_SOLID #property indicator_width7 width_line //--- plot buffer 8 //#property indicator_label8 "Верх торгового диапозона [5/8]" // "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone" #property indicator_type8 DRAW_LINE #property indicator_color8 clrLime #property indicator_style8 STYLE_SOLID #property indicator_width8 width_line //--- plot buffer 9 //#property indicator_label9 "Вращение, разворот [6/8]" // "Pivot, Reverse - major [6/8]" #property indicator_type9 DRAW_LINE #property indicator_color9 clrRed #property indicator_style9 STYLE_SOLID #property indicator_width9 width_line //--- plot buffer 10 //#property indicator_label10 "Слабая остановка и разворот [7/8]" // "Weak, Stall and Reverse - [7/8]" #property indicator_type10 DRAW_LINE #property indicator_color10 clrPeru #property indicator_style10 STYLE_SOLID #property indicator_width10 width_line //--- plot buffer 11 //#property indicator_label11 "Окончательное сопротивление [8/8]" // "Ultimate Resistance - extremely overbought [8/8]" #property indicator_type11 DRAW_LINE #property indicator_color11 clrAqua #property indicator_style11 STYLE_SOLID #property indicator_width11 width_line //--- plot buffer 12 //#property indicator_label12 "Слабая остановка и разворот [+1/8]" // "overshoot [+1/8]" #property indicator_type12 DRAW_LINE #property indicator_color12 clrDarkViolet #property indicator_style12 STYLE_SOLID #property indicator_width12 width_line //--- plot buffer 13 //#property indicator_label13 "Вращение, разворот [+2/8]" // "extremely overshoot [+2/8]" #property indicator_type13 DRAW_LINE #property indicator_color13 clrBlue #property indicator_style13 STYLE_SOLID #property indicator_width13 width_line //#property indicator_label40 "Вертикальные разделители периодов" #property indicator_type40 DRAW_HISTOGRAM2 #property indicator_color40 clrSilver #property indicator_style40 STYLE_DASH #property indicator_width40 1 //--- отображение метки индикатора #property indicator_label40 "Вертикальный разделитель периодов индикатора" //+-----------------------------------+ //| ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА | //+-----------------------------------+ input ENUM_TIMEFRAMES Timeframe=PERIOD_D1; //Таймфрейм индикатора для расчёта уровней input int CalculationPeriod=64; //Период расчета P input int StepBack=0; //+-----------------------------------+ //---- Объявление массива для хранения имён линий string LinesNames[13]= { "Вращение, разворот [-2/8]", "Слабая остановка и разворот [-1/8]", "Окончательное сопротивление [0/8]", "Слабая остановка и разворот [1/8]", "Вращение, разворот [2/8]", "Дно торгового диапозона [3/8]", "Главные сопротивление/поддержка [4/8]", "Верх торгового диапозона [5/8]", "Вращение, разворот [6/8]", "Слабая остановка и разворот [7/8]", "Окончательное сопротивление [8/8]", "Слабая остановка и разворот [+1/8]", "Вращение, разворот [+2/8]" }; //---- Объявление переменной для хранения результата инициализации индикатора bool Init; //---- Объявление целых переменных сдвига отсчёта данных int ShiftBarsForward; //---- Объявление целых переменных для хендлов индикаторов int Murrey_Handle; //---- Объявление целых переменных начала отсчёта данных int min_rates_total,Murrey_Calculated; //+------------------------------------------------------------------+ //| Массивы переменных для создания нидикаторных буферов | //+------------------------------------------------------------------+ class CIndicatorsBuffers { public: double IndBuffer[]; }; //+------------------------------------------------------------------+ //| Создание индикаторных буферов | //+------------------------------------------------------------------+ CIndicatorsBuffers Ind[3][13]; CIndicatorsBuffers Ind1[2]; //+------------------------------------------------------------------+ //| Получение уровней Мюррея | //+------------------------------------------------------------------+ bool GetMurreyLevels(double &Array[],datetime Time) { //---- double Murrey[1]; for(int i=0; i<13; i++) { if(CopyBuffer(Murrey_Handle,i,Time,1,Murrey)<=0) return(RESET); Array[i]=Murrey[0]; } //---- return(true); } //+------------------------------------------------------------------+ //| Проверка уровней Мюррея на перестановку | //+------------------------------------------------------------------+ bool CheckMurreyLevels(double &Array[]) { //---- static double OldMurrey[13]; for(int iii=0; iii<13; iii++) if(Array[iii]!=OldMurrey[iii]) { for(int kkk=0; kkk<13; kkk++) OldMurrey[kkk]=Array[kkk]; return(true); } //---- return(false); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- Инициализация переменных начала отсчёта данных Murrey_Calculated=CalculationPeriod+StepBack+3; min_rates_total=Murrey_Calculated*PeriodSeconds(Timeframe)/PeriodSeconds(PERIOD_CURRENT); Init=true; //---- проверка периодов графиков на корректность if(Timeframerates_total || prev_calculated<=0)// проверка на первый старт расчёта индикатора { first=min_rates_total; bar1=first; for(int kkk=0; kkk<3; kkk++) for(int iii=0; iii<13; iii++) for(int bar=0; bar2) count=0; bar1=bar-1; for(int iii=0; iii<13; iii++) Ind[count][iii].IndBuffer[bar1]=Murrey[iii]; } for(int kkk=0; kkk<3; kkk++) for(int iii=0; iii<13; iii++) Ind[kkk][iii].IndBuffer[bar]=EMPTY_VALUE; for(int iii=0; iii<13; iii++) Ind[count][iii].IndBuffer[bar]=Murrey[iii]; //---- Расчёт и отрисовка вертикальных разделителей периодов Ind1[0].IndBuffer[bar]=EMPTY_VALUE; Ind1[1].IndBuffer[bar]=EMPTY_VALUE; ArrayInitialize(val,NULL); oldcount=count-1; if(oldcount<0) oldcount=2; for(int iii=0; iii<13; iii++) { val[iii]=Ind[oldcount][iii].IndBuffer[bar1]; val[iii+13]=Ind[count][iii].IndBuffer[bar]; } Ind1[0].IndBuffer[bar1]=5*val[25-ArrayMaximum(val)]; Ind1[1].IndBuffer[bar1]=val[25-ArrayMinimum(val)]/5; } //---- return(rates_total); } //+------------------------------------------------------------------+