Errores, fallos, preguntas - página 1190

 
Lo siento, está en MT4
 
Luckhuman:
Lo siento, está en MT4.
Prueba a añadir la directiva #property strict. Tal vez se escriba algún error en el registro.
 
Luckhuman:
Lo siento, esto es en MT4
Desgraciadamente la función CopySpread() no está soportada en MetaTrader 4 (había un error en la ayuda).
 
Automated-Trading:
Desgraciadamente la función CopySpread() no está soportada en MetaTrader 4 (había un error en la ayuda).
¿Cuántos buffers de indicadores soporta MT4? Sólo he podido vincular 17 buffers
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <Object.mqh>

class CDoubleDynArray : public CObject
  {
public:
   double            Buffer[];

                     CDoubleDynArray(void){}
                    ~CDoubleDynArray(void){}
  };

CDoubleDynArray *buffers[];

int OnInit()
  {
//--- indicator buffers mapping
   ArrayResize(buffers,24);
   int i;
   for(i=0;i<ArraySize(buffers);i++)
      buffers[i]=new CDoubleDynArray;

   IndicatorBuffers(ArraySize(buffers));
   SetIndexBuffer(0,buffers[0].Buffer);
   for(i=1;i<ArraySize(buffers);i++)
     {
      if(!SetIndexBuffer(i,buffers[i].Buffer,INDICATOR_CALCULATIONS))
         Print(i," ",GetLastError());
      else
         Print(i," ",ArraySize(buffers[i].Buffer));
     }
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   IndicatorBuffers(1);
   for(int i=1;i<ArraySize(buffers);i++)
     {
      delete buffers[i];
      buffers[i]=NULL;
     }
   delete buffers[0]; 
   ArrayResize(buffers,0); 
  }

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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


 
Luckhuman:


¿En qué parte del código ves que sólo hay 17? Estás creando 24, ¿no?

Muéstrame lo que dice el registro.

 
Luckhuman:
¿Cuántos buffers de indicadores soporta MT4? Sólo he podido vincular 17 buffers

Hay 512 buffers disponibles en MT4:

El número de búferes no puede exceder de 512 y ser menor que el valor especificado en la propiedad indicator_buffers. Si su indicador personalizado requiere búferes adicionales para el conteo, debe utilizar esta función para especificar el número total de búferes.

En el ejemplo hay que añadir una línea:

#property indicator_buffers 24
IndicatorBuffers - Документация на MQL4
  • docs.mql4.com
IndicatorBuffers - Документация на MQL4
 
Automated-Trading:


En el ejemplo hay que añadir una línea:

¿Podemos hacer una advertencia como en MT5 sobre la falta de parcelas de propiedad?
 
Automated-Trading:

Hay 512 buffers disponibles en MT4:

En el ejemplo tenemos que añadir una línea:

En esta línea especifico el número de buffers

IndicatorBuffers(ArraySize(buffers));

Aquí hay una captura de pantalla del resultado

 
Automated-Trading:

Hay 512 buffers disponibles en MT4:

Hay que añadir una línea al ejemplo:

#property indicator_buffers 24

Con esta línea, funciona. Pero entonces la función IndicatorBuffers() no funciona, porque es la que se utiliza en el código con valor 24

Por favor, discúlpeme. He reducido el código a un ejemplo de prueba, partiendo de un indicador de plantilla. En el indicador aparecía la siguiente línea

#property indicator_buffers 1
#property indicator_plots   1