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

 
Tango_X:

Gracias. Siempre he pensado que referirse a las clases era señalar una clase. Pero aquí es sólo una declaración... ¿qué tiene que ver?

Estos son los fundamentos de la POO, echa un vistazo a la Ayuda. Por ejemplo, los operadores nuevo/borrado, etc.

 
Tango_X:

Gracias. Siempre he pensado que referirse a las clases era señalar una clase. Pero aquí es sólo una declaración... ¿qué tiene que ver?

Lo investigaré, ¡¡¡gracias!!!

 
Seric29:

¿En qué metatrader se crean los símbolos en MT5?

Sí, en MT5

 
fxsaber:

No se puede.

Es una pena.

Yo lo hago después de subirlo a excel, pero ahí también tiene sus carencias. Es una pena que no haya una función de este tipo incorporada.

Pero tengo la corazonada de que de alguna manera se puede implementar programáticamente)

 
ISL:

Sí, en MT5.

Es una pena que MT4 no permita crear símbolos, puedes cambiar valores pero no puedes crearlos.

 

¡¡¡enséñame cómo deshacerte de ArraySetAsSeries() !!!

aquí reescribí una parte del indicador conocido para MT4 (Perfect trend line), todo funciona como en MT4, PERO... ¡Pero no puedo deshacerme de ArraySetAsSeries() forzado escrito por mí - de lo contrario el indicador no cuenta correctamente, sé que ArraySetAsSeries() cambiará la dirección de la indexación en la matriz, pero durante 2 días no he logrado hacerlo yo mismo!

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   1
//--- plot BufBars
#property indicator_label1  "BufBars"
#property indicator_type1   DRAW_COLOR_BARS
#property indicator_color1  clrRed,clrAqua,clrNONE
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//--- input parameters
input int SlowLength         = 7; //Slow length
input int SlowPipDisplace    = 0; //Slow pip displace
input int FastLength         = 3; //Fast length
input int FastPipDisplace    = 0; //Fast pip displace
//--- indicator buffers
double         BufBarsBuffer1[];
double         BufBarsBuffer2[];
double         BufBarsBuffer3[];
double         BufBarsBuffer4[];
double         BufBarsColors[];
double         BufLSELLBuffer[];
double         BufLBUYBuffer[];
static int trend=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,BufBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(2,BufBarsBuffer3,INDICATOR_DATA);
   SetIndexBuffer(3,BufBarsBuffer4,INDICATOR_DATA);
   SetIndexBuffer(4,BufBarsColors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(5,BufLSELLBuffer,INDICATOR_DATA);
   SetIndexBuffer(6,BufLBUYBuffer,INDICATOR_DATA);
   for(int i=0;i<7;i++)
     {
      PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,FastLength+1);
      PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0.0);
     }
   ArraySetAsSeries(BufBarsBuffer1,true);
   ArraySetAsSeries(BufBarsBuffer2,true);
   ArraySetAsSeries(BufBarsBuffer3,true);
   ArraySetAsSeries(BufBarsBuffer4,true);
   ArraySetAsSeries(BufBarsColors,true);
   ArraySetAsSeries(BufLBUYBuffer,true);
   ArraySetAsSeries(BufLSELLBuffer,true);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   trend=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 i,limit;
   double thigh1,tlow1,thigh2,tlow2,trendUp,trendDn;
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      BufLSELLBuffer[limit]=high[limit];
      BufLBUYBuffer[limit]=low[limit];
      limit--;
     }
   else limit=rates_total-prev_calculated+1;
   for(i=limit;i>=0;i--)
     {
      thigh1= high[iHighest(NULL,0,MODE_HIGH,SlowLength,i)]+SlowPipDisplace * _Point;
      tlow1 = low[iLowest(NULL,0,MODE_LOW,SlowLength,i)]-SlowPipDisplace * _Point;
      thigh2= high[iHighest(NULL,0,MODE_HIGH,FastLength,i)]+FastPipDisplace * _Point;
      tlow2 = low[iLowest(NULL,0,MODE_LOW,FastLength,i)]-FastPipDisplace * _Point;
      if(close[i]>BufLBUYBuffer[i+1])  trendUp=tlow1;  else trendUp=thigh1;
      if(close[i]>BufLSELLBuffer[i+1]) trendDn=tlow2;  else trendDn=thigh2;
      BufLSELLBuffer[i]= trendDn;
      BufLBUYBuffer[i] = trendUp;
      BufBarsBuffer1[i] = 0.0;
      BufBarsBuffer2[i] = 0.0;
      BufBarsBuffer3[i] = 0.0;
      BufBarsBuffer4[i] = 0.0;
      BufBarsColors[i]  = 2;
      if(close[i]<trendUp && close[i]<trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 0;
        }
      if(close[i]>trendUp && close[i]>trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 1;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

¡¡¡enséñame cómo deshacerte de ArraySetAsSeries() !!!

aquí reescribí una parte del indicador conocido para MT4 (Perfect trend line), todo funciona como en MT4, PERO... Sé que ArraySetAsSeries() cambiará el sentido de la indexación en el array, pero hace 2 días que no lo consigo.

Puedo hacer lo siguiente

#ifdef __MQL5__
   ArraySetAsSeries(BufBarsBuffer1,true);
   ArraySetAsSeries(BufBarsBuffer2,true);
   ArraySetAsSeries(BufBarsBuffer3,true);
   ArraySetAsSeries(BufBarsBuffer4,true);
   ArraySetAsSeries(BufBarsColors,true);
   ArraySetAsSeries(BufLBUYBuffer,true);
   ArraySetAsSeries(BufLSELLBuffer,true);
#endif
 
Vitaly Muzichenko:

Puedo hacerlo así

Sé que se pueden calcular los valores del indicador sinArraySetAsSeries(), pero no veo qué estoy haciendo mal. He intentado encontrar un ejemplo sencillo en kodobase, pero por desgracia, todos los indicadores están escritos de forma diferente, no puedo averiguarlo (((

SZY: No necesito el indicador multiplataforma, quiero manejar la indexación de arrays por defecto, ya he utilizado ArrayGetAsSeries() - no lo entiendo

 
Igor Makanu:

Sé que se pueden calcular los valores de los indicadores sinArraySetAsSeries(), pero no veo qué estoy haciendo mal. He intentado encontrar un ejemplo sencillo en kodobase, por desgracia, todos los indicadores están escritos de forma diferente, no puedo entenderlo (((

El cálculo de su indicador va desde el principio hasta el final (desde el dato histórico más reciente hasta el actual). Y esto indica la indexación como en las series de tiempo. Así que las matrices deberían estar indexadas en consecuencia, que es lo que tienes.

¿Qué es lo que falla entonces?

 
Igor Makanu:

Sé que puedo calcular los valores del indicador sinArraySetAsSeries(), pero no veo qué estoy haciendo mal. Intenté encontrar un ejemplo sencillo en kodobase pero, por desgracia, todos los indicadores están escritos de forma diferente, no puedo averiguarlo (((

SZZ: No necesito el indicador multiplataforma, quiero manejar la indexación de arrays por defecto, ya he utilizado ArrayGetAsSeries() - no lo entiendo

Puedes hacerlo sin ArraySetAsSeries, sólo tienes que usar Print o Comment para dejar claro, que el índice 0 del array, por ejemplo open[0], se imprimirá. A partir de aquí puedes tomar tus propias decisiones. Te ayudará a saber qué es qué.

Razón de la queja: