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

 

¡Escribí el indicador más simple en mql4, quería traducirlo a mql5, y he estado luchando durante una semana, pero no está funcionando! ¡Me estoy poniendo de los nervios, odio mql5 porque ya he escrito 88 líneas de un simple indicador de 34 líneas en mql5!

Aquí está el código en mql4:

#property indicator_separate_window
#property  indicator_level1 0
#property indicator_buffers 3

extern int kol_vo_bar = 15;
extern string Symbol_1 = "GBPJPY";
extern string Symbol_2 = "EURJPY";

double SpreadA[];
double SpreadB[];
double Spread[];

int init()
{
   SetIndexBuffer(0,SpreadA);
   SetIndexBuffer(1,SpreadB);
   SetIndexBuffer(2,Spread);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);
   return(0);
}

int start()
{
   int k;
   for(k = 0; k < iBars(Symbol_1,0); k++)
   {
            SpreadA[k] = iClose(Symbol_1,0,k)*100/iOpen(Symbol_1,0,k+kol_vo_bar)-100;
            SpreadB[k] = iClose(Symbol_2,0,k)*100/iOpen(Symbol_2,0,k+kol_vo_bar)-100;                  
            Spread[k] = SpreadA[k]-SpreadB[k];
   }
   return(0);
}

Y aquí está el código en mql5:

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2
//--- plot Label2
#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

//--- input parameters
input int kol_vo_bar=96;
input string   Symbol_1="GBPJPY";
input string   Symbol_2="EURJPY";
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
double         Label3Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,Label2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,Label3Buffer,INDICATOR_DATA);
   
//---
   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[])
  {
//---
   for(int k=0; k<Bars(_Symbol,_Period); k++)
   {
            Label1Buffer[k] = iClose(Symbol_1,PERIOD_CURRENT,k)*100/iOpen(Symbol_1,PERIOD_CURRENT,k)-100;
            Label2Buffer[k] = iClose(Symbol_2,PERIOD_CURRENT,k)*100/iOpen(Symbol_2,PERIOD_CURRENT,k)-100;                  
            Label3Buffer[k] = Label1Buffer[k]-Label2Buffer[k];
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
double iClose(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyClose(symbol,tf,index,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}
double iOpen(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyOpen(symbol,tf,index+kol_vo_bar,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}

Laslíneas de los indicadores no se muestran correctamente en MT5.

¿Qué he hecho mal?

Buenas personas, ayúdenme, apiádense del pobre, estoy al borde del colapso, de verdad. ¡Es una pena que no se pueda jurar aquí!

Moderador, no me banees, primero adviérteme si algo está mal.

 

Estás recalculando todas las barras disponibles en cada tick, lo cual es muy poco óptimo, y es terriblemente lento.

 
zlodei:


Las líneas del indicador no se muestran correctamente en MT5.

¿Qué he escrito mal?

¿Dónde está el trabajo con PlotIndexXXX?

no le permitió leer la documentación y los ejemplos?



Moderador, no me banees, primero adviérteme si algo está mal.

Ve al código base y léelo, hay cientos de ejemplos.
 
sergeev:

¿Dónde trabajar con PlotIndexXXX?

¿Demasiado perezoso para leer la documentación y los ejemplos?


Ve a codebase y léelo. hay cientos de ejemplos.

Me pregunto por qué se necesita esto al principio del código:

#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2

#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

Aquí se especifican todas las propiedades de cada línea? ¿O no es suficiente para mql5, ahora necesito escribir las propiedades de las líneas a través de PlotIndex?

He leído un montón de ejemplos y documentación, no entiendo el 80% de ellos, por ejemplo, ¿por qué debo complicar las cosas simples?

Por ejemplo en mql4:

   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);

En mql5 ahora no puedo ni imaginar lo que puede llevar especificar estilos de línea, 50 líneas probablemente, y el resultado es 1 y lo mismo.

MQL5 es para PROGRAMADORES, MQL4 es para COMERCIANTES. Si quieres comprobar el sistema, prográmalo con mql4, y si quieres lo mismo con mt5, pide a un programador que lo haga, o deja de operar y dedica tiempo a estudiar mql5.

Con el lanzamiento de MT5, yo, como trader, sólo he notado una mejora, es un probador de 64 bits con la capacidad de utilizar todos los núcleos de la CPU.

La sofisticación del lenguaje mql no afectará en absoluto a los resultados de la negociación manual o automatizada. La complicación del lenguaje es importante para los programadores, sí - podemos hacer bonitos botones y paneles, integrarnos con todo tipo de extrañas WinAPI, etc., pero no ha afectado a los resultados del comercio. Así que por qué todas estas dificultades cuando se puede programar en mql4, y comprobarlo, pero sólo hay 1 GRAN inconveniente - no hay terminal x64 y probador con posibilidad de utilizar todos los núcleos. Si hicieran estas 2 cosas - no habría precio para MT4. Pero no los harán a propósito, para que no cree competencia a MT5 y la gente como yo sufra o pague dinero.

De todos modos, gracias por su atención, por la "ayuda". No comento, de todas formas no voy a ir a la sucursal, es sólo mi opinión, no más, tengo que ir.

 
Soy nuevo aquí. ¿Puedes decirme si puedo operar con los futuros del índice rts en mt5? ¿Cómo puedo mostrar un gráfico de cotizaciones desde 2009 hasta hoy?
 
sbr080:
Soy nuevo aquí. ¿Puedes decirme si puedo operar con los futuros del índice rts en mt5? ¿Cómo puedo imprimir un gráfico de cotizaciones desde 2009 hasta hoy?
Tienes que pedirle a tu broker que te dé el gráfico de la pegatina.
 
barabashkakvn:
Pida a su agente que le dé un gráfico pegado.
¿Puedo pegarlo yo mismo?
 
sbr080:
¿puedo pegarlo yo mismo?
No. Sólo un corredor. Si lo hace usted mismo, tendrá que escribir su propio indicador.
 
barabashkakvn:
No. Sólo un corredor. Si lo haces tú mismo, tendrás que escribir tu propio indicador.
Gracias.
 
¿Pueden aconsejar si es posible que un Asesor Experto muestre indicadores técnicos en un gráfico con los parámetros que utiliza? Es decir, de la misma manera que cuando se utiliza la visualización en el probador de estrategias. No puedo encontrar esta información en ningún sitio.
Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5
Razón de la queja: