Нужна маленькая доработка - страница 9

 
Сергей Дыбленко:

да не придал даже значения!!!!!!!!!!! ладно.....я извинился а твое дело прощать или нет!

спасибо еще раз за советник!!!!!!!!!!

и прости что потратил время на меня!!!!!!!!!!!

Серёга! я (прости меня засранца ) всё нормально. я же вроде написал , я немного выпил-(люди когда выпивают манию имеют) прости меня засранца . не хотел обидеть 

 
Alexsandr San:

Серёга! я (прости меня засранца ) всё нормально. я же вроде написал , я немного выпил-(люди когда выпивают манию имеют) прости меня засранца . не хотел обидеть 

принято! ))))

мир, труд, май!

 
Сергей Дыбленко:

принято! ))))

мир, труд, май!

Серёга ! там немного подправил . Функция для размышления и ей пользоваться нужно спокойно и с расстановкой. 

 вот последняя версия https://c.mql5.com/3/323/Grid_small_revision__3.mq4

За вчерашнее извини - нажрался как свинья.  

 
Alexsandr San:

Серёга ! там немного подправил . Функция для размышления и ей пользоваться нужно спокойно и с расстановкой. 

 вот последняя версия https://c.mql5.com/3/323/Grid_small_revision__3.mq4

За вчерашнее извини - нажрался как свинья.  

ок.проехали )))
 

с пол года назад нашел уровневый индюк..........моих мозгов так и не хватило что бы  он корректно работал

может на досуге посмотришь его?.....а?.....

Уровни он показывает правильно а вот стрелки у него врут.........как ни крутил не смог подкорректировать что бы все работало как часы.


// Original indicator by KurlFX 23/6/09
//+------------------------------------------------------------------+
//|                                            Easy Trend Visualizer |
//|                                 Copyright © 2009-2017, EarnForex |
//|                                       https://www.earnforex.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009-2018, EarnForex"
#property link      "https://www.earnforex.com/metatrader-indicators/EasyTrendVisualizer/"
#property version   "1.09"

#property description "Easy Trend Visualizer - displays trend strength, direction, and support and resistance levels."
#property description "Alerts:"
#property description " * ERV-HL - Horizontal line"
#property description " * ERV-AU - Arrow up"
#property description " * ERV-AD - Arrow down"
#property description " * ERV-HLPC - Price crosses and closes above/below previous horizontal line."
#property strict

#define Alvl 35.0
#define Alvl2 30.0

#property indicator_chart_window
#property indicator_buffers 5
//#property indicator_color1 clrMagenta
//#property indicator_color2 clrDeepSkyBlue
#property indicator_width1 8
#property indicator_width2 8
#property indicator_color3 clrYellow
#property indicator_color4 clrYellow
#property indicator_color5 clrYellow
#property indicator_width3 2
#property indicator_width4 2

input int ADXperiod1 = 10;
input int ADXperiod2 = 14;
input int ADXperiod3 = 20;
input bool UseAlertHorizontalLine = false;
input bool UseAlertUpDownArrows = false;
input int NumberPHLtoTrack = 0; // How many previous horizontal lines to track for alert purposes?
input int IgnorePHLShorterThan = 2; // Ignore previous horizontal lines short than
input color PHLC_Arrow_Color = clrChocolate;
input bool SendEmails = false; // Send alerts via email?
input bool SendNotifications = false; // Send alerts via push notifications?

int MxP, MnP, MdP;

double was_alert_hl = EMPTY_VALUE; // Horizontal line
double was_alert_au = EMPTY_VALUE; // Arrow up
double was_alert_ad = EMPTY_VALUE; // Arrow down

double To[];
double Tc[];
double ADX1[];
double ADX2[];
double ADX3[];
double Up[];
double Dn[];
double Ex[];

double Last_Ex[]; // Buffer to hold previous "last line levels". Required for price/line alert because imaginary line cross also count.
datetime was_alert_phlc[]; // Price crosses and closes above/below previous horizontal line.

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
        MxP = MathMax(MathMax(ADXperiod1, ADXperiod2), ADXperiod3);
        MnP = MathMin(MathMin(ADXperiod1, ADXperiod2), ADXperiod3);
        if (MxP == ADXperiod1) MdP = MathMax(ADXperiod2, ADXperiod3);
        else if (MxP == ADXperiod2) MdP = MathMax(ADXperiod1, ADXperiod3);      
        else MdP = MathMax(ADXperiod2, ADXperiod1);
        
        IndicatorShortName("ETV(" + IntegerToString(MnP) + "/" + IntegerToString(MdP) + "/" + IntegerToString(MxP) + ")");

        IndicatorBuffers(8);
        SetIndexBuffer(0, To);
        SetIndexBuffer(1, Tc);
        SetIndexBuffer(2, Up);
        SetIndexBuffer(3, Dn);
        SetIndexBuffer(4, Ex);
        SetIndexBuffer(5, ADX1);
        SetIndexBuffer(6, ADX2);
        SetIndexBuffer(7, ADX3);
        SetIndexLabel(0, NULL);
        SetIndexLabel(1, NULL);
        SetIndexStyle(0, DRAW_HISTOGRAM);
        SetIndexStyle(1, DRAW_HISTOGRAM);       
        SetIndexLabel(2, "Up");
        SetIndexLabel(3, "Dn");
        SetIndexLabel(4, "End");
        SetIndexStyle(2, DRAW_ARROW);
        SetIndexStyle(3, DRAW_ARROW);
        SetIndexStyle(4, DRAW_LINE);
        SetIndexArrow(2, 225);
        SetIndexArrow(3, 226);

   ArrayResize(Last_Ex, PHLC_Arrow_Color);
   ArrayInitialize(Last_Ex, EMPTY_VALUE);

   ArrayResize(was_alert_phlc, PHLC_Arrow_Color);
   ArrayInitialize(was_alert_phlc, 0);

        return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit()
{
   // Delete all alert arrows.
   ObjectsDeleteAll(0, "PHLCArrow_", -1, OBJ_ARROW);
}

//+------------------------------------------------------------------+
//| Custom Easy Trend Visualization indicator                        |
//+------------------------------------------------------------------+
int start()
{
        int cntbar = IndicatorCounted();
        int limit = Bars - cntbar;
        if (cntbar == 0) limit -= MxP;
        // Need to update at least the most recent two values for use in the main cycle.
        for (int i = MathMax(limit - 1, 2); i >= 0; i--)
        {
      ADX1[i] = iADX(NULL, 0, MnP, PRICE_CLOSE, MODE_MAIN, i);
      ADX2[i] = iADX(NULL, 0, MdP, PRICE_CLOSE, MODE_MAIN, i);
      ADX3[i] = iADX(NULL, 0, MxP, PRICE_CLOSE, MODE_MAIN, i);
        }
        
        if (cntbar == 0) limit--;

        for (int i = limit - 1; i >= 0; i--)
        {
                bool f1 = false, f2 = false, f3 = false;
                To[i] = EMPTY_VALUE; Tc[i] = EMPTY_VALUE;
                Up[i] = EMPTY_VALUE; Dn[i] = EMPTY_VALUE; Ex[i] = EMPTY_VALUE;
                
                // Remember last lines for imaginary crosses.
                if ((NumberPHLtoTrack > 0) && (i + 2 < Bars)) // Check if we fit into arrays.
                {
                   // New line found and it has not yet been included.
                   if ((Ex[i + 1] == EMPTY_VALUE) && (Ex[i + 2] != EMPTY_VALUE) && (Last_Ex[0] != Ex[i + 2]))
                   {
                      // Count the length of the added line.
                      int length = 1;
                      for (int j = i + 3; j < Bars; j++)
                      {
                         if (Ex[j] == EMPTY_VALUE) break;
                         length++;
                      }

                      if (length >= IgnorePHLShorterThan)
                      // Shift arrays (FIFO, 0 - newest):
                      for (int j = NumberPHLtoTrack - 1; j >= 0; j--)
                      {
                      // This check is needed for a very special case of chart data not being fully loaded.
                      // When it is being loaded the indicator is recalculated, but new bars appear from left, not from right as usually.
                      // This keeps rewriting the Last_Ex array with basically the same values, which can lead to lots of unnecessary alerts.
                         if (Time[i + 2] < was_alert_phlc[j]) break;
                         if (j == 0) // Insert new value.
                         {
                            Last_Ex[j] = Ex[i + 2]; 
                            was_alert_phlc[j] = 0;
                         }
                         else // Shift.
                         {
                            Last_Ex[j] = Last_Ex[j - 1];
                            was_alert_phlc[j] = was_alert_phlc[j - 1];
                         }
                      }
                   }
                }

                if (ADX1[i + 1] < ADX1[i]) f1 = true;
                if (ADX2[i + 1] < ADX2[i]) f2 = true;
                if (ADX3[i + 1] < ADX3[i]) f3 = true;
                
                if ((f1) && (f2) && (f3) && (ADX1[i] > Alvl) && (ADX2[i] > Alvl2))
                {
                        double di = iADX(NULL, 0, MnP, PRICE_CLOSE, MODE_PLUSDI,  i)
                                                  -iADX(NULL, 0, MnP, PRICE_CLOSE, MODE_MINUSDI, i);
                        double hi = MathMax(Open[i], Close[i]);
                        double lo = MathMin(Open[i], Close[i]);
                        double op = Open[i];
                        if (di > 0)
                        {
                                To[i] = lo; Tc[i] = hi;
                                if (To[i + 1] == EMPTY_VALUE) Up[i] = op;
                        }
                        else
                        {
                                To[i] = hi; Tc[i] = lo;
                                if (To[i + 1] == EMPTY_VALUE) Dn[i] = op;
                        }
                }
                else
                {
                        if (To[i + 1] != EMPTY_VALUE) Ex[i] = Close[i + 1];
                        else Ex[i] = Ex[i + 1];
                }
        }

   string DateTime = IntegerToString(TimeYear(Time[0])) + "-" + FormatDateTimeDigit(TimeMonth(Time[0])) + "-" + FormatDateTimeDigit(TimeDay(Time[0])) + " " + FormatDateTimeDigit(TimeHour(Time[0])) + ":" + FormatDateTimeDigit(TimeMinute(Time[0]));
   string PerStr = PeriodToString(Period());
   if (UseAlertHorizontalLine)
   {
      if ((Ex[1] != EMPTY_VALUE) && (Ex[1] != was_alert_hl) && (Ex[1] != Ex[2]))
      {
         string text = "ETV-HL " + DateTime;
         Alert(text);
         text += " " + Symbol() + " @ " + PerStr;
         if (SendEmails) SendMail(text, text);
         if (SendNotifications) SendNotification(text);
         was_alert_hl = Ex[1];
      }
   }
   if (UseAlertUpDownArrows)
   {
      if ((Up[0] != EMPTY_VALUE) && (Up[0] != was_alert_au))
      {
         string text = "ETV-AU " + DateTime;
         Alert(text);
         text += " " + Symbol() + " @ " + PerStr;
         if (SendEmails) SendMail(text, text);
         if (SendNotifications) SendNotification(text);
         was_alert_au = Up[0];
      }
      if ((Dn[0] != EMPTY_VALUE) && (Dn[0] != was_alert_ad))
      {
         string text = "ETV-AD " + DateTime;
         Alert(text);
         text += " " + Symbol() + " @ " + PerStr;
         if (SendEmails) SendMail(text, text);
         if (SendNotifications) SendNotification(text);
         was_alert_ad = Dn[0];
      }
   }
   // Alerts for the previous HL crosses.
   if (NumberPHLtoTrack > 0)
   {
      DateTime = TimeToString(Time[1]);
      CheckImaginaryLinesCrosses(DateTime, PerStr);
   }
   
        return(0);
}

string FormatDateTimeDigit(int Input)
{
   if (Input < 10) return("0" + IntegerToString(Input));
   else return(IntegerToString(Input));
}

string PeriodToString(int per)
{
   switch (per)
   {
      case 60:
         return("H1");
      case 240:
         return("H4");
      case 1440:
         return("D1");
      case 10080:
         return("W1");
      case 43200:
         return("MN1");
      case 30:
         return("M30");
      case 15:
         return("M15");
      case 5:
         return("M5");
      case 1:
         return("M1");
   }
   return("");
}

void CheckImaginaryLinesCrosses(string DateTime, string PerStr)
{
   for (int i = 0; i < NumberPHLtoTrack; i++)
   {
      if ((Last_Ex[i] != EMPTY_VALUE) && (was_alert_phlc[i] != Time[0]) && (((Close[1] > Last_Ex[i]) && (Open[1] <= Last_Ex[i])) || ((Close[1] <= Last_Ex[i]) && (Open[1] > Last_Ex[i]))))
      {
         string text = "ETV-PHLC " + DateTime;
         Alert(text);
         string obj_name = "PHLCArrow_" + DateTime + IntegerToString(i);
         ObjectCreate(0, obj_name, OBJ_ARROW, 0, Time[1], Last_Ex[i]);
         ObjectSetInteger(0, obj_name, OBJPROP_ARROWCODE, 200); 
         ObjectSetInteger(0, obj_name, OBJPROP_COLOR, PHLC_Arrow_Color);
         string desc = "Price crossed: " + DoubleToString(Last_Ex[i], Digits()) + " @ " + PerStr;
         ObjectSetString(0, obj_name, OBJPROP_TOOLTIP, desc);
         ObjectSetString(0, obj_name, OBJPROP_TEXT, desc);
         ObjectSetInteger(0, obj_name, OBJPROP_SELECTABLE, false);
         ObjectSetInteger(0, obj_name, OBJPROP_HIDDEN, false);
         text += " " + Symbol() + " @ " + PerStr;
         if (SendEmails) SendMail(text, text);
         if (SendNotifications) SendNotification(text);
         was_alert_phlc[i] = Time[0];
      }
   }
}
//+------------------------------------------------------------------+
 
Сергей Дыбленко:

с пол года назад нашел уровневый индюк..........моих мозгов так и не хватило что бы  он корректно работал

может на досуге посмотришь его?.....а?.....

Уровни он показывает правильно а вот стрелки у него врут.........как ни крутил не смог подкорректировать что бы все работало как часы.


про этот Индикатор ? https://www.mql5.com/ru/code/13182

USDCHFM30

Easy Trend Visualizer
Easy Trend Visualizer
  • www.mql5.com
Easy Trend Visualizer — простой визуализатор трендов. Этот индикатор делает именно то, на что указывает его название. Он показывает, где начинается и кончается тренд и где тренд отсутствует вовсе. Индикатор основан на стандартных индикаторах ADX (Average Direction Movement Index) и работает довольно быстро. Easy Trend Visualizer отображается в...
Файлы:
TADX.mq4  8 kb
 
кажись он.........ссылку не помню как и названия.......но похоже как он
 
Сергей Дыбленко:
кажись он.........ссылку не помню как и названия.......но похоже как он

он вроде показывает - как и должен показывать  тут немного исправил предупреждения 

USDCHFM5 

Файлы:
TADX.mq4 8 kb
 
я так понял он брал исходники тут https://www.mql5.com/ru/code/10304
 
я пытаюсь сделать что бы стрелки совпадали с линиями поддежжки ну хотя бы примерно а не выходит!
Причина обращения: