Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 699

 
Dmitry Belov:

Hola, ¿podríais decirme por qué ZigD[0] no sale en algún momento?

¿Funciona ZigM[0]?

 
Alexey Viktorov:

¿Sale ZigM[0]?

Sí lo hace...


	          
 
Dmitry Belov:

Sí lo hace...

Lo siento, no he mirado bien el código...

Cuando zzz>0 significa que el valor puede ser igual a la barra alta o baja. Respectivamente, este valor debe ser comparado con estos valores y, dependiendo del resultado, colocado en uno u otro array.

 
Alexey Viktorov:

Lo siento, no he mirado bien el código...

Cuando zzz>0, significa que el valor puede ser igual a la barra alta o baja. Por lo tanto, este valor debe ser comparado con estos valores y dependiendo del resultado colocado en uno u otro array.

Lo hago, pero por alguna razón no sale ZigD[] y no sale nada si añado ZigD, si lo comento, sale todo.

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz;
double HZZ[], ZigM[];
int ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
     if(IsStopped()) 
     break; 
     }
    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1]);
    Comment(ZigD[0]);
   return(0);
  }
  //+-  
 

¡Hola gente!

No pude encontrar una "ventana" más adecuada para abordar una pregunta sobre MT4.

Al abrir el terminal, la "línea de estado", "estándar", "gráficos","instrumentos gráficos" y"períodos de gráficos" desaparecen de repente. Lo apago y la próxima vez que lo abro de nuevo me sale el terminal en blanco, sólo el gráfico actual.

Nunca había visto un fallo así y no sé qué hacer. Por favor, aconséjeme. No sé qué hacer.

 
Vadens:

¡Hola gente!

No pude encontrar una "ventana" más adecuada para abordar una pregunta sobre MT4.

Al abrir el terminal, la "línea de estado", "estándar", "gráficos","instrumentos gráficos" y"períodos de gráficos" desaparecen de repente. Lo apago y la próxima vez que lo abro de nuevo me sale el terminal en blanco, sólo el gráfico actual.

Nunca había visto un fallo así y no sé qué hacer. Por favor, aconséjeme. No sé qué hacer.

Parece que tienes un problema con los permisos de escritura en el directorio donde se encuentra el terminal. Si está ejecutando como usuario restringido, mueva el terminal a un directorio donde pueda acceder a los archivos/carpetas.

 
Vadens:

¡Hola gente!

No pude encontrar una "ventana" más adecuada para abordar una pregunta sobre MT4.

Al abrir el terminal, la "línea de estado", "estándar", "gráficos","instrumentos gráficos" y"períodos de gráficos" desaparecen de repente. Lo apago y la próxima vez que lo abro de nuevo me sale el terminal en blanco, sólo el gráfico actual.

Nunca había visto un fallo así y no sé qué hacer. Por favor, aconséjeme. No sé qué hacer.

Tienes el modo de pantalla completa (F11)
 
Dmitry Belov:

Lo hago, pero por alguna razón no sale ZigD[] y no sale nada si añado ZigD, si lo comento sale todo

De nuevo, mi falta de atención...

Espero que ahora sea diferente :)))

¿No parpadea el comentario? Es mejor escribirlo así

    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1],"\n" // Это перенос комментария на следующую строку
           , ZigD[0]);
 
Alexey Viktorov:

Una vez más, mi falta de atención...

Espero que ahora sea diferente :)))

¿No parpadea el comentario? Es mejor escribirlo así.

Gracias, ya lo he resuelto yo mismo, sólo me faltaba inicializar el array como doble y funcionaba. Aquí está el código del indicador si quieres, pero todavía está crudo, tengo más ideas... Dígame, ¿sabe cómo se puede mostrar un sommento en la esquina inferior izquierda o en el centro en la parte superior?

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz, SredDlin;
double HZZ[], ZigM[];
double ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexBuffer(2,ZigD);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
   SredDlin=0.0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
   //  if(IsStopped()) 
  //   break; 
     }
     for(dd=0;dd<=nn;dd++)
     {
        if(ZigD[dd]>0.0){SredDlin+=(ZigD[dd+1]-ZigD[dd]);}
        if(IsStopped()) 
     break;
     } 
    Comment("Средний размах = ",SredRazmax/nn,"//","Средняя продолжительность = ",SredDlin/nn,"//",ZigM[0],"//",ZigM[1],"//",ZigD[0],"//",ZigD[1]);
    return(0);
  }
  //+-  
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Машинное обучение в трейдинге: теория и практика...
 
Dmitry Belov:

Gracias, lo he podido resolver yo mismo, sólo me faltaba inicializar el array como double y todo ha funcionado. Aquí está el código del indicador si quieres, pero todavía está crudo, hay más ideas... Dígame, ¿sabe cómo se puede mostrar el somment en la esquina inferior izquierda o en el centro en la parte superior?

No es posible. Sólo si se utiliza el objeto gráfico OBJ_LABEL
Razón de la queja: