Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 205

 
torblin:
hola a todos, no parece que el post sea para preguntas de novatos oh gee whiz donde preguntar con dp 200 que asesor va a trabajar?
cualquier persona en la práctica.
 

Estimados señores, pido tener un ojo experimentado en el "intento número uno". El tema es: He obtenido un código al "cruzar" un indicador fractal escrito en MQL5 y el indicador azzx_larry-2.0, cuya esencia es excluir las llamadas "barras interiores" mientras se busca un extremo (adjunto). Al compilar, obtenemos cuatro errores, todos ellos en la parte del código que fue tomada de azzx escrita en "4". Las dudas surgieron al interpretar los "errores":

1. ¿Por qué se propone colocar la sentencia for (lugar del código - subrayado) en Global. ('for' - las expresiones no están permitidas en un ámbito global).


2. Por qué el compilador considera High[bar] y Low[bar] (también subrayados en el código) no declarados, mientras que varias líneas más arriba en el código hay High[i] y Low[i] que no considera errores.

('Alto' - identificador no declarado, 'Bajo' - identificador no declarado).


3. Lo mismo ocurre con el límite: por qué el compilador lo considera no declarado. ('limit' - identificador no declarado).

PS: parte del código (indicador fractal) se deriva de la documentación de mql5, y parte del código del indicador azzx_larry2.0 se deriva de la codobase de mql4, autor azzx


//+------------------------------------------------------------------+
//|                                                     azzx 2.0.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_ARROW
#property  indicator_type2   DRAW_ARROW
#property  indicator_color1  White
#property  indicator_color2  White
#property  indicator_label1  "azzx Up"
#property  indicator_label2  "azzx Down"
//---- indicator buffers
double max[];
double min[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,max,INDICATOR_DATA);
   SetIndexBuffer(1,min,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,108);
   PlotIndexSetInteger(1,PLOT_ARROW,108);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,0);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//---
   if(rates_total<3)
      return(0);
//---
   if(prev_calculated<3)
     {
      limit=1;
      //--- clean up arrays
      ArrayInitialize(max,EMPTY_VALUE);
      ArrayInitialize(min,EMPTY_VALUE);
     }
   else limit=rates_total-1;

   for(i=limit;i<rates_total-1 && !IsStopped();i++)
     {
      //---- Up azzx
      if(High[i]>High[i+1] && High[i]>=High[i-1])
         max[i]=High[i];
      else max[i]=EMPTY_VALUE;

      //---- Low azzx
      if(Low[i]<Low[i+1] && Low[i]<=Low[i-1])
         min[i]=Low[i];
      else min[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 
   {
    l = left_bar(i);
    r = right_bar(i);
    
    if((l>0) && (r>0)) 
      {
      if(((Low[l]>=Low[i]) && (Low[r]>Low[i])) ||
         ((Low[l]>Low[i]) && (Low[r]>Low[i]))) 
      {
        min[i] =1;
      }
    }
 
    if((l>0) && (r>0)) 
      {
      if(((High[l]<= High[i]) && (High[r]<High[i])) ||
         ((High[l]<High[i]) && (High[r]<High[i]))) 
      {
        max[i] =1;
      }
    }

  // Отметка экстремумов.
  ArrayInitialize(buf_st_min,0);
  ArrayInitialize(buf_st_max,0);

  
  for(i=limit-1;i>0;i--) 
  {
    switch(min[i]) 
    {
      case 1 : buf_st_min[i]=Low[i]; break;
    }
 
    switch(max[i]) 
    {
      case 1 : buf_st_max[i]=High[i]; break;
    }
  }
  
  return(0);
}
 
// Проверка, что заданный бар - внутренний.
bool is_internal(int bar) 
{
  return((High[bar] < High[bar + 1]) && 
         (Low [bar] > Low [bar + 1]));
}
 
// Возвращает бар слева от заданного бара или -1.
int left_bar(int bar) 
    {
  int i;
  
  for(i=bar+1;i<limit-2;i++) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
 
// Возвращает бар справа от заданного бара или -1.
int right_bar(int bar) {
  int i;
  
  for(i=bar-1;i>0;i--) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- почистим график при удалении индикатора
   Comment("");
  }
Creo que el código tiene High[i] y Low[i] unas líneas más arriba que no considera errores. 3. Igualmente sobre el límite - por qué el compilador lo considera no declarado
 

Reshetov:
А робот случаем не из Маркета?
только один.  что там продается - ужас. хотя наверное все они такие
 
beginner_mql:

hay High[i] y Low[i] en el código, que no cuenta como errores. 3. Lo mismo ocurre con el límite - por qué el compilador lo considera no declarado

Tienes una llave de cierre temprana aquí:

   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 

O faltan varias líneas, porque no están declaradas.

    l = left_bar(i);
    r = right_bar(i);
 
vicmos:

Tienes una llave de cierre temprana aquí:

O faltan varias líneas porque no se anuncian

Gracias por su participación. El paréntesis se ha movido al final del código, la compilación dio 16 errores - algo para trabajar.

 
Hola a todos, ¿podéis decir a los usuarios del foro que trabajan con el producto de software ITrade Chaos de G. Stanilevich? Me gusta mucho pero hay algunas cosas que no entiendo. Si no te importa, que trabaja o ha trabajado con este producto, por favor, póngase en contacto conmigo en Skype. Mi skype es Furkat1962 Gracias de antemano. Atentamente Furkat
 
torblin:
no creo que este post sea para principiantes, así que ¿por qué no me dices dónde preguntarle a un novato con un 200dpa lo que hará el asesor?
No quieres entender que el FOREX no es una operación gratuita, sino que es el mismo trabajo que cualquier otra operación, ¡sólo que el rendimiento es mayor cuando se pone el trabajo!
 
He añadido un indicador al gráfico desde el EA, ¿cómo puedo colorear este indicador ahora? El indicador utiliza 3 líneas, me gustaría hacerlas de 3 colores y grosores diferentes.
 
YAndrey:
He añadido un indicador al gráfico desde el EA, ¿cómo puedo colorear este indicador ahora? El indicador utiliza 3 líneas, me gustaría hacerlas de 3 colores y grosores diferentes.
Puede utilizar rotuladores en el monitor).
 
zfs:
Puedes utilizar rotuladores en el monitor).
Sí, puedes hacerlo. Pero no me gustaría. Y me gustaría escuchar a gente inteligente ;). He encontrado una salida creando un indicador personalizado con parámetros de entrada en forma de colores para cada línea, pero ¿cómo puedo hacerlo más sencillo? Así que, de nuevo una pregunta. Estoy creando un indicador iBands en mi Expert Advisor. Lo adjunto al gráfico. Me gustaría dibujar sus 3 líneas con diferentes colores. ¿Es posible?
Razón de la queja: