//+------------------------------------------------------------------+ //| CandlesAutoFibo_Grand_xN.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 7 // Константа для количества уровней фибо //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input string FiboName="CandlesAutoFibo_Grand_xN"; //Имя Фибо-объекта input ENUM_TIMEFRAMES Timeframe=PERIOD_D1; //Таймфрейм индикатора для расчета уровней Фибоначи input double FiboRatio =1.000; //Коэффициент домножения всех фибоуровней input double FiboLevelsShift=0.000; //Сдвиг по вертикали всех фибоуровней в Фибах от нулевого уровня input uint FiboTotal=1; //Количество дополнительных секторов Фибо сверху или снизу input uint NumberofBar=1; //Номер бара для расчета уровней Фибоначи input color FiboColor=clrGray; //Цвет Фибо //---- input double FiboLevel1 =0.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.236; //значение фибоуровня 2 input ENUM_LINE_STYLE StyleLevel2=STYLE_SOLID; //стиль линии фибоуровня 2 input uint WidthLevel2=1; //толщина линии фибоуровня 2 input color Color_Level2= clrDarkViolet; //цвет фибоуровня 2 //---- input double FiboLevel3 =0.382; //значение фибоуровня 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.618; //значение фибоуровня 5 input ENUM_LINE_STYLE StyleLevel5=STYLE_DASH; //стиль линии фибоуровня 5 input uint WidthLevel5=1; //толщина линии фибоуровня 5 input color Color_Level5 = clrBlue; //цвет фибоуровня 5 //---- input double FiboLevel6=0.764; //значение фибоуровня 6 input ENUM_LINE_STYLE StyleLevel6=STYLE_SOLID; //стиль линии фибоуровня 6 input uint WidthLevel6=1; //толщина линии фибоуровня 6 input color Color_Level6 = clrGray; //цвет фибоуровня 6 //---- input double FiboLevel7 = 1.000; //значение фибоуровня 7 input ENUM_LINE_STYLE StyleLevel7=STYLE_SOLID; //стиль линии фибоуровня 7 input uint WidthLevel7=4; //толщина линии фибоуровня 7 input color Color_Level7 = clrLimeGreen; //цвет фибоуровня 7 //+----------------------------------------------+ #define FIBO_LINES_TONAL_XN_FULL FIBO_LINES_TONAL*(1+FiboTotal*2)-FiboTotal*2 // Константа для количества уровней фибо //---- массивы переменных для линий Фибо double Values[]; color Colors[]; ENUM_LINE_STYLE Styles[]; uint Widths[]; //+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+