Помогите разобраться с переводом с MQL4 на MQL5 - страница 2

 
Artyom Trishkin:

Практически всё одинаково что в индикаторах mql4, что в индикаторах mql5.

Если в вашем индикаторе на четвёрке нет индикаторного буфера, ничего страшного - значит вывод идёт не через буфер - и для пятёрки его не нужно значит делать. Покажите весь четвёрочный код.


Делать всё таки придётся. Если нет индикаторных буферов и не будет построений, нужно явно прописать это:

#property indicator_buffers 0
#property indicator_plots   0
 
Vladimir Karputov:


Делать всё таки придётся. Если нет индикаторных буферов и не будет построений, нужно явно прописать это:

Так ведь сам же и задал, что буфера нет:

#property indicator_buffers 0
#property indicator_plots   0

Я потому и прошу человека показать весь четвёрочный код - понять что там творится.

А то, что буфера нет в индикаторе - распространённое явление

 
investr777:

Вот код:

Ужасный код...

Дальше - сами:

//+------------------------------------------------------------------+
//|                                          iPatternRecognition.mq5 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

enum ENUM_INPUT_YES_NO
  {
   INPUT_YES               =  1,    // Yes
   INPUT_NO                =  0,    // No
  };
//--- input parameters
input ENUM_INPUT_YES_NO    ShowAlerts                    =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Bearish_Engulfing     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Outside_Down    =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Inside_Down     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Dark_Cloud_Cover      =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Black_Crows     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Bullish_Engulfing     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Outside_Up      =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Inside_Up       =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Piercing_Line         =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_White_Soldiers  =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Stars                 =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Harami                =  INPUT_YES;


string PatternText[5000];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"pattern-",-1,OBJ_TEXT);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   //---
   if(rates_total<10) return(0);
   //---
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   //---
   double Range=0, AvgRange=0;
   int limit=rates_total-prev_calculated;
   if(limit>1) limit=rates_total-10;
   for(int i=limit; i>=0; i--) {
      for(int j=i ;j<=i+9;j++) AvgRange+=fabs(high[j]-low[j]);
      Range=AvgRange/10;
      //---
      double O = open[i+1];
      double O1 = open[i+2];
      double O2 = open[i+3];
      double H = high[i+1];
      double H1 = high[i+2];
      double H2 = high[i+3];
      double L = low[i+1];
      double L1 = low[i+2];
      double L2 = low[i+3];
      double C = close[i+1];
      double C1 = close[i+2];
      double C2 = close[i+3];

      //--- Check for Bearish Engulfing pattern
      if(C1>O1 && O>C && O>=C1 && O1>=C && O-C>C1-O1) {
         if(Display_Bearish_Engulfing) {
            ObjectCreate(0,"pattern-"+(string)i,OBJ_TEXT,0,time[i+1], high[i+1]+Range*1.5);
            ObjectSetString(0,"pattern-"+(string)i,OBJPROP_TEXT,"Bearish Engulfing");
            ObjectSetString(0,"pattern-"+(string)i,OBJPROP_FONT,"Times New Roman");
            ObjectSetInteger(0,"pattern-"+(string)i,OBJPROP_COLOR,clrRed);
            ObjectSetInteger(0,"pattern-"+(string)i,OBJPROP_FONTSIZE,9);
            }
         }
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Ужасный код...

Дальше - сами:


Спасибо. Сейчас буду пробовать допиливать все остальное и проверять работоспособность
 
investr777:

Спасибо. Сейчас буду пробовать допиливать все остальное и проверять работоспособность
//+------------------------------------------------------------------+
//|                                          iPatternRecognition.mq5 |
//|              Copyright 2017, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

enum ENUM_INPUT_YES_NO
  {
   INPUT_YES               =  1,    // Yes
   INPUT_NO                =  0,    // No
  };
//--- input parameters
input ENUM_INPUT_YES_NO    ShowAlerts                    =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Bearish_Engulfing     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Outside_Down    =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Inside_Down     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Dark_Cloud_Cover      =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Black_Crows     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Bullish_Engulfing     =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Outside_Up      =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_Inside_Up       =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Piercing_Line         =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Three_White_Soldiers  =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Stars                 =  INPUT_YES;
input ENUM_INPUT_YES_NO    Display_Harami                =  INPUT_YES;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"pattern-",-1,OBJ_TEXT);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   //---
   if(rates_total<10) return(0);
   //---
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(time,true);
   //---
   double Range=0, AvgRange=0;
   int limit=rates_total-prev_calculated;
   if(limit>1) limit=rates_total-10;
   for(int i=limit; i>=0; i--) {
      for(int j=i ;j<=i+9;j++) AvgRange+=fabs(high[j]-low[j]);
      Range=AvgRange/100*Point();
      //---
      double O = open[i+1];
      double O1 = open[i+2];
      double O2 = open[i+3];
      double H = high[i+1];
      double H1 = high[i+2];
      double H2 = high[i+3];
      double L = low[i+1];
      double L1 = low[i+2];
      double L2 = low[i+3];
      double C = close[i+1];
      double C1 = close[i+2];
      double C2 = close[i+3];

      //--- Check for Bearish Engulfing pattern
      if(C1>O1 && O>C && O>=C1 && O1>=C && O-C>C1-O1) {
         if(Display_Bearish_Engulfing) {
            //---
            //Print("i=",", Range=",DoubleToString(Range,Digits()));
            ObjectCreate(0,"pattern-"+(string)i,OBJ_TEXT,0,time[i+1], high[i+1]+Range);
            ObjectSetString(0,"pattern-"+(string)i,OBJPROP_TEXT,"Bearish Engulfing");
            ObjectSetString(0,"pattern-"+(string)i,OBJPROP_FONT,"Times New Roman");
            ObjectSetInteger(0,"pattern-"+(string)i,OBJPROP_COLOR,clrRed);
            ObjectSetInteger(0,"pattern-"+(string)i,OBJPROP_FONTSIZE,9);
            ObjectSetDouble(0,"pattern-"+(string)i,OBJPROP_ANGLE,90);
            ObjectSetInteger(0,"pattern-"+(string)i,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
            }
         }
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Причина обращения: