//+------------------------------------------------------------------+ //| CandlesAutoFibo_Grand.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 //---- для расчёта и отрисовки индикатора не использовано ни одного буфера #property indicator_buffers 0 //---- использовано ноль графических построений #property indicator_plots 0 //+----------------------------------------------+ //| объявление констант | //+----------------------------------------------+ #define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора #define FIBO_LINES_TONAL 19 // Константа для количества уровней фибо //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input string FiboName="CandlesAutoFibo_Grand"; //Имя Фибо-объекта input ENUM_TIMEFRAMES Timeframe=PERIOD_D1; //Таймфрейм индикатора для расчета уровней Фибоначи input double FiboRatio =1.000; //Коэффициент домножения всех фибоуровней input double FiboLevelsShift=0.000; //Сдвиг по вертикали всех фибоуровней в Фибах от нулевого уровня input uint NumberofBar=1; //Номер бара для расчета уровней Фибоначи input color FiboColor=clrGray; //Цвет Фибо //---- input double FiboLevel1 =-1.000; //значение фибоуровня 1 input ENUM_LINE_STYLE StyleLevel1=STYLE_SOLID; //стиль линии фибоуровня 1 input uint WidthLevel1=4; //толщина линии фибоуровня 1 input color Color_Level1 = clrLimeGreen; //цвет фибоуровня 1 //---- input double FiboLevel2=-0.764; //значение фибоуровня 2 input ENUM_LINE_STYLE StyleLevel2=STYLE_SOLID; //стиль линии фибоуровня 2 input uint WidthLevel2=1; //толщина линии фибоуровня 2 input color Color_Level2= clrDarkViolet; //цвет фибоуровня 2 //---- input double FiboLevel3 =-0.618; //значение фибоуровня 3 input ENUM_LINE_STYLE StyleLevel3=STYLE_DASH; //стиль линии фибоуровня 3 input uint WidthLevel3=1; //толщина линии фибоуровня 3 input color Color_Level3 = clrOrange; //цвет фибоуровня 3 //---- input double FiboLevel4 =-0.500; //значение фибоуровня 4 input ENUM_LINE_STYLE StyleLevel4=STYLE_SOLID; //стиль линии фибоуровня 4 input uint WidthLevel4=2; //толщина линии фибоуровня 4 input color Color_Level4 = clrMagenta; //цвет фибоуровня 4 //---- input double FiboLevel5 =-0.382; //значение фибоуровня 5 input ENUM_LINE_STYLE StyleLevel5=STYLE_DASH; //стиль линии фибоуровня 5 input uint WidthLevel5=1; //толщина линии фибоуровня 5 input color Color_Level5 = clrBlue; //цвет фибоуровня 5 //---- input double FiboLevel6=-0.236; //значение фибоуровня 6 input ENUM_LINE_STYLE StyleLevel6=STYLE_SOLID; //стиль линии фибоуровня 6 input uint WidthLevel6=1; //толщина линии фибоуровня 6 input color Color_Level6 = clrGray; //цвет фибоуровня 6 //---- input double FiboLevel7 = 0.000; //значение фибоуровня 7 input ENUM_LINE_STYLE StyleLevel7=STYLE_SOLID; //стиль линии фибоуровня 7 input uint WidthLevel7=4; //толщина линии фибоуровня 7 input color Color_Level7 = clrLimeGreen; //цвет фибоуровня 7 //---- input double FiboLevel8=0.236; //значение фибоуровня 8 input ENUM_LINE_STYLE StyleLevel8=STYLE_SOLID; //стиль линии фибоуровня 8 input uint WidthLevel8=1; //толщина линии фибоуровня 8 input color Color_Level8 = clrDarkViolet; //цвет фибоуровня 8 //---- input double FiboLevel9 = 0.382; //значение фибоуровня 9 input ENUM_LINE_STYLE StyleLevel9=STYLE_DASH; //стиль линии фибоуровня 9 input uint WidthLevel9=1; //толщина линии фибоуровня 9 input color Color_Level9 = clrOrange; //цвет фибоуровня 9 //---- input double FiboLevel10 = 0.500; //значение фибоуровня 10 input ENUM_LINE_STYLE StyleLevel10=STYLE_SOLID; //стиль линии фибоуровня 10 input uint WidthLevel10=2; //толщина линии фибоуровня 10 input color Color_Level10 = clrMagenta; //цвет фибоуровня 10 //---- input double FiboLevel11 = 0.618; //значение фибоуровня 11 input ENUM_LINE_STYLE StyleLevel11=STYLE_DASH; //стиль линии фибоуровня 11 input uint WidthLevel11=1; //толщина линии фибоуровня 11 input color Color_Level11 = clrBlue; //цвет фибоуровня 11 //---- input double FiboLevel12=0.764; //значение фибоуровня 12 input ENUM_LINE_STYLE StyleLevel12=STYLE_SOLID; //стиль линии фибоуровня 12 input uint WidthLevel12=1; //толщина линии фибоуровня 12 input color Color_Level12 = clrGray; //цвет фибоуровня 12 //---- input double FiboLevel13 = 1.000; //значение фибоуровня 13 input ENUM_LINE_STYLE StyleLevel13=STYLE_SOLID; //стиль линии фибоуровня 13 input uint WidthLevel13=4; //толщина линии фибоуровня 13 input color Color_Level13 = clrLimeGreen; //цвет фибоуровня 13 //---- input double FiboLevel14=1.236; //значение фибоуровня 14 input ENUM_LINE_STYLE StyleLevel14=STYLE_SOLID; //стиль линии фибоуровня 14 input uint WidthLevel14=1; //толщина линии фибоуровня 14 input color Color_Level14 = clrDarkViolet; //цвет фибоуровня 14 //---- input double FiboLevel15 = 1.382; //значение фибоуровня 15 input ENUM_LINE_STYLE StyleLevel15=STYLE_DASH; //стиль линии фибоуровня 15 input uint WidthLevel15=1; //толщина линии фибоуровня 15 input color Color_Level15 = clrOrange; //цвет фибоуровня 15 //---- input double FiboLevel16 = 1.500; //значение фибоуровня 16 input ENUM_LINE_STYLE StyleLevel16=STYLE_SOLID; //стиль линии фибоуровня 16 input uint WidthLevel16=2; //толщина линии фибоуровня 16 input color Color_Level16 = clrMagenta; //цвет фибоуровня 16 //---- input double FiboLevel17 = 1.618; //значение фибоуровня 17 input ENUM_LINE_STYLE StyleLevel17=STYLE_DASH; //стиль линии фибоуровня 17 input uint WidthLevel17=1; //толщина линии фибоуровня 17 input color Color_Level17 = clrBlue; //цвет фибоуровня 17 //---- input double FiboLevel18=1.764; //значение фибоуровня 18 input ENUM_LINE_STYLE StyleLevel18=STYLE_SOLID; //стиль линии фибоуровня 18 input uint WidthLevel18=1; //толщина линии фибоуровня 18 input color Color_Level18 = clrGray; //цвет фибоуровня 18 //---- input double FiboLevel19 = 2.000; //значение фибоуровня 19 input ENUM_LINE_STYLE StyleLevel19=STYLE_SOLID; //стиль линии фибоуровня 19 input uint WidthLevel19=4; //толщина линии фибоуровня 19 input color Color_Level19 = clrLimeGreen; //цвет фибоуровня 19 //+----------------------------------------------+ //---- массивы переменных для линий Фибо double Values[FIBO_LINES_TONAL]; color Colors[FIBO_LINES_TONAL]; ENUM_LINE_STYLE Styles[FIBO_LINES_TONAL]; uint Widths[FIBO_LINES_TONAL]; //+------------------------------------------------------------------+ //| Cоздает "Уровни Фибоначчи" по заданным координатам | //+------------------------------------------------------------------+ bool FiboLevelsCreate(const long chart_ID=0, // ID графика const string name="FiboLevels", // имя объекта const int sub_window=0, // номер подокна datetime time1=0, // время первой точки double price1=0, // цена первой точки datetime time2=0, // время второй точки double price2=0, // цена второй точки const color clr=clrLimeGreen, // цвет объекта const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии объекта const int width=1, // толщина линии объекта const bool back=false, // на заднем плане const bool selection=true, // выделить для перемещений const bool ray_left=false, // продолжение объекта влево const bool ray_right=false, // продолжение объекта вправо const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { //--- установим координаты точек привязки, если они не заданы ChangeFiboLevelsEmptyPoints(time1,price1,time2,price2); //--- сбросим значение ошибки ResetLastError(); //--- создадим "Уровни Фибоначчи" по заданным координатам if(!ObjectCreate(chart_ID,name,OBJ_FIBO,sub_window,time1,price1,time2,price2)) { Print(__FUNCTION__, ": не удалось создать \"Уровни Фибоначчи\"! Код ошибки = ",GetLastError()); return(false); } //--- установим цвет ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- установим стиль линии ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- установим толщину линии ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- включим (true) или отключим (false) режим выделения объекта для перемещений //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- включим (true) или отключим (false) режим продолжения отображения объекта влево ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left); //--- включим (true) или отключим (false) режим продолжения отображения объекта вправо ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- установи приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ //| Задает количество уровней и их параметры | //+------------------------------------------------------------------+ bool FiboLevelsSet(int levels, // количество линий уровня double &values[], // значения линий уровня color &colors[], // цвет линий уровня ENUM_LINE_STYLE &styles[], // стиль линий уровня int &widths[], // толщина линий уровня const long chart_ID=0, // ID графика const string name="FiboLevels") // имя объекта { //--- проверим размеры массивов if(levels!=ArraySize(colors) || levels!=ArraySize(styles) || levels!=ArraySize(widths) || levels!=ArraySize(widths)) { Print(__FUNCTION__,": длина массива не соответствует количеству уровней, ошибка!"); return(false); } //--- установим количество уровней ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels); //--- установим свойства уровней в цикле for(int i=0;inClose[0]) { P1=nHigh[0]; P2=nLow[0]; } else { P1=nLow[0]; P2=nHigh[0]; } double vertSfift=(P2-P1)*FiboLevelsShift; P1+=vertSfift; P2+=vertSfift; D1=nTime[0]; D2=TimeCurrent(); //---- if(!FiboLevelsPointChange(0,FiboName,0,D1,P1)) return(rates_total); if(!FiboLevelsPointChange(0,FiboName,1,D2,P2)) return(rates_total); //---- ChartRedraw(0); return(rates_total); } //+------------------------------------------------------------------+