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

 
ascerdfg:
¿Es posible?

reemplazar con:

¿Por qué no? Por supuesto que sí.

 
double Open[3];

int Ind_Handle;

int OnInit()
  {
      Ind_Handle=iCustom(_Symbol,_Period,"Pop"); // Pop.ex5
      if(Ind_Handle==INVALID_HANDLE)
        {
         Print(" Не удалось получить хендл индикатора");
         return(INIT_FAILED);
        }
   
   return(INIT_SUCCEEDED);
  }


void OnTick()
  {
 
      CopyBuffer(Ind_Handle,0,1,1,Open);
      Print("Open0 ",Open[0]);
  }

Imprime: "Open0 1.797693134862316e+308".

Aunque he cambiado tanto el número de celda del buffer indicador como el índice.

Sé con certeza que hay un número entero en el indicador. ¿Por qué se imprime así?

 
ascerdfg:

Imprime: "Open0 1.797693134862316e+308".

Aunque he cambiado tanto el número de celda del buffer indicador como el índice.

Sé con certeza que hay un número entero en el indicador. ¿Por qué se imprime así?

O bien hacer ArraySetAsSeries true después de la declaración del array o declarar el array con tamaño 1
 
void OnTick()
  {
     int i;
     double price=.5;
     double Open[];
      ArraySetAsSeries(Open,true);

      Print("Кол-во ",BarsCalculated(Ind_Handle));
      Print("хэндл ",Ind_Handle);
      CopyBuffer(Ind_Handle,0,0,100,Open);
                 
      
    for(i=0; i<100; i++)
    {
        if(Open[i]!=EMPTY_VALUE)
        {
            price=Open[i];
            break;
        }
    }
           
      Print(price);
  }
No funciona, escribe 0,5 todo el tiempo. Parece que el búfer está todo el tiempo con el número máximo.
 
ascerdfg:
No ayuda, escribe todo el tiempo 0,5. Resulta que el buffer todo el tiempo con el número máximo.

Si quieres una respuesta precisa, haz la pregunta correctamente: proporciona el código del indicador y el código del Asesor Experto. Ahora no está claro QUÉ, QUIÉN y DÓNDE :)

 

Rohr - indicador

rrr - asesor

Archivos adjuntos:
Pop.mq5  38 kb
ppp.mq5  4 kb
 
ascerdfg:

Ror - indicador

rrr - EA

Reescriba el indicador - en primer lugar, compruebe si hay palabras de parada, en segundo lugar, simplifíquelo al máximo - por ejemplo, introduzca el número igual al número de la barra actual en el búfer del indicador.

Lo que conseguimos: array[0]=0,0, array[1]=1,0 y así sucesivamente. Esto simplificará MUCHO el proceso de comprensión de la recepción de datos del indicador. Tercero: dejar sólo un búfer indicador.

 

¿Pueden decirme cómo especificar explícitamente el símbolo actualizado en esta función? Por ejemplo, EURUSD.m

//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+
 

¡Buenas tardes!

¿Sabe cómo construir un indicador para el mercado?

Tengo un archivo con extensión .mq5 y algunos archivos de inclusión con extensión .mqh.

Por lo que tengo entendido, no se puede adjuntar el archivo .mqh al archivo .mqh a través de los recursos, ¿debo convertirlo todo en un solo archivo manualmente?

¿Y si hay una nueva versión :? Es una locura +)))

Gracias.

 
EgorKim:

¿Pueden decirme cómo especificar explícitamente el símbolo actualizado en esta función? Por ejemplo, EURUSD.m

Una pregunta complementaria: "¿Por qué hay que especificar el símbolo explícitamente aquí?

Si utiliza esta función, debe asignar un símbolo a m_symbol en OnInit:

   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();

En este caso, si ejecuta el Asesor Experto en el símbolo "EURUSD.m" para m_symbol se establecerá automáticamente a "EURUSD.m".

Razón de la queja: