//+------------------------------------------------------------------+ //| Bending_MA24H1.mq4 | //| Pipkin Artem | //| http://sites.google.com/site/forexsbs/ | //+------------------------------------------------------------------+ #property copyright "Pipkin Artem" #property link "http://sites.google.com/site/forexsbs/" //######################################################################## //-------------- Индикатор отображается в окне графика ------------------# #property indicator_chart_window //# // # //######################################################################## //######################################################################## // В В О Д П А Р А М Е Т Р О В И Н Д И К А Т Р А extern int Rounding = 5; // Округление до "х" знаков после запятой в цене валютной пары extern int PERIOD = 480; // Период, который берется для расчета индикатора (480 = 1 месяца) extern int MATrendPeriod = 24; // Период скользящей средней для H1 (24 = 1 день) extern int Slayders = 0; // Проскальзывание, для исключения "шума" MA extern int StepMin = 0; // Минимальный отступ, от текущей цены, после которого отображаются линии индикатора (в пунктах) extern int StepMax = 3000; // Максимальный отступ, от текущей цены, после которого линии индикатора не отображаются (в пунктах) extern color Color_D = Red; // Цвет линии за прошедший день extern color Color_W = Green; // --//-- неделю extern color Color_M = Yellow; // --//-- месяц extern color Color_Y = Aqua; // --//-- год //######################################################################## //######################################################################## //Н А Ч А Л О С П И С К А Г Л О Б А Л Ь Н Ы Х П Е Р Е М Е Н Н Ы Х int i, l, b, Stil, c, e; double MA1, MA2, MA3; color COLOR; double LS; double LP; double max, min; string S, P; // К О Н Е Ц С П И С К А Г Л О Б А Л Ь Н Ы Х П Е Р Е М Е Н Н Ы Х //######################################################################## //+------------------------------------------------------------------+ //| Функция init() | //+------------------------------------------------------------------+ int init() { //---- b=Bars; // Колличество баров в истории (для обновления индикатора после появления нового бара) for(int a=0; a<=l; a++) // Цикл, удаляет старые линии { ObjectDelete("Line"+a); } l=0; // Значение "колличества линия" приравнивается к нулю ObjectDelete("TextS"); // Удаляет значение сопротивления в правом верхнем углу ObjectDelete("TextP"); // Удаляет значение поддержки в правом нижнем углу for(i=1,c=0; i<=PERIOD; i++,c=0) // Цикл расчета и постраения линий { MA1=iMA(NULL,PERIOD_H1,MATrendPeriod,0,MODE_SMA,PRICE_MEDIAN,i); // Значение средней без сдвига (i) MA2=iMA(NULL,PERIOD_H1,MATrendPeriod,0,MODE_SMA,PRICE_MEDIAN,i+1); // Значение средней со сдвигом на 1 свечу (i+1) MA3=iMA(NULL,PERIOD_H1,MATrendPeriod,0,MODE_SMA,PRICE_MEDIAN,i+2); // Значение средней со сдвигом на 2 свечи (i+2) if(i<=24) {COLOR=Color_D; Stil=3;} // Стиль и цвет линий выставляемых за текущий день if(i>24 && i<=120) {COLOR=Color_W; Stil=3;} // --//-- неделю if(i>120 && i<=528) {COLOR=Color_M; Stil=2;} // --//-- месяц if(i>528) {COLOR=Color_Y; Stil=1;} // --//-- год for(int e=0; e<=l; e++) // Цикл исключает повторение линий с одинаковым значением Y (цены) { double ma2=NormalizeDouble(MA2,Rounding); if(ma2==ObjectGet("Line"+e, OBJPROP_PRICE1)) c=c+1; } if(c==0 && ((MA1>MA2 && MA3>MA2) || (MA1StepMin*Point && MA2-AskStepMin*Point && Bid-MA21) init(); // При появлении нового бара пересчитываются все линии for(i=0; i<=l; i++) {max=MathMax(max, ObjectGet("Line"+i, OBJPROP_PRICE1));} // Присвоение значению max значение Y самой верхней линии for(i=0; i<=l; i++) {min=MathMin(min, ObjectGet("Line"+i, OBJPROP_PRICE1));} for(i=0; i<=l; i++) // Цикл, определяет сопротивление и поддержку { if(AskObjectGet("Line"+i, OBJPROP_PRICE1)) { min=MathMax(min, ObjectGet("Line"+i, OBJPROP_PRICE1)); } } S = DoubleToStr(max,Rounding); // Преобразование числового выражения "max" в текстовое P = DoubleToStr(min,Rounding); // Преобразование числового выражения "min" в текстовое ObjectSetText("TextS","Сопротивление: "+S,15,"Arial",Red); // Изменение текстовой части функции TextS() ObjectSetText("TextP","Поддержка: "+P,15,"Arial",Blue); // Изменение текстовой части функции TextP() i=0; //---- return(0); } // К О Н Е Ц Ф У Н К Ц И И start() //#################################################################### //+------------------------------------------------------------------+ //| Функция deinit() | //+------------------------------------------------------------------+ int deinit() { //---- for(int a=0; a<=l; a++) { ObjectDelete("Line"+a); } l=0; ObjectDelete("TextS"); ObjectDelete("TextP"); Print ("Индикатор MA_MAXMIN_h1 удален"); //---- return(0); } //+------------------------------------------------------------------+ //#################################################################### // М О И Ф У Н К Ц И И //#################################################################### //+------------------------------------------------------------------+ //| Функция Line() | //+------------------------------------------------------------------+ int Line() { ObjectCreate("Line"+l, OBJ_HLINE, 0,0,0,0,0); ObjectSet("Line"+l, OBJPROP_PRICE1, MA2); ObjectSet("Line"+l, OBJPROP_COLOR, COLOR); ObjectSet("Line"+l, OBJPROP_WIDTH, Stil); ObjectSet("Line"+l, OBJPROP_BACK, false); WindowRedraw(); l=l+1; } //-------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Функция TextS() | //+------------------------------------------------------------------+ int TextS() { ObjectCreate("TextS", OBJ_LABEL, 0, 0, 0); // Создание объ. ObjectSet("TextS", OBJPROP_CORNER, 1); // Привязка к уголу (1 правый верхний) ObjectSet("TextS", OBJPROP_XDISTANCE, 2); // Координата Х ObjectSet("TextS", OBJPROP_YDISTANCE, 2); // Координата Y } //-------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Функция TextP() | //+------------------------------------------------------------------+ int TextP() { ObjectCreate("TextP", OBJ_LABEL, 0, 0, 0); // Создание объ. ObjectSet("TextP", OBJPROP_CORNER, 3); // Привязка к уголу (3 правый нижний) ObjectSet("TextP", OBJPROP_XDISTANCE, 2); // Координата Х ObjectSet("TextP", OBJPROP_YDISTANCE, 2); // Координата Y } //-------------------------------------------------------------------+ //#######################################################################