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

 
Evgeny Dyuka #:

Aquí tienes un experto. Crea una base (si no existe ya) y escribe en ella la hora actual una vez por segundo.
No hay Print() en el código.
Lo ejecuté en 10 pares, se produjeron errores:

Para obtener un error debes cerrar y reiniciar MT5 entonces todos los Asesores Expertos comienzan a trabajar sincronizadamente.

Sería bueno:
1. Para entender cómo deshacerse de este error.
2. Inventar un mecanismo de plantilla que la cola en caso de indisponibilidad de la base.

Resolví el punto 2 añadiendo Sleep() con tiempo aleatorio, pero parece una muletilla.

ACTUALIZACIÓN: Volví a subir el archivo, el primero tenía un error.

Ay, mis conocimientos no son suficientes. Sólo lo suficiente para darse cuenta de que se está imprimiendo un error

      DatabaseExecute(db, sql);

No hay posibilidad de comprobar la disponibilidad antes de crear una consulta.

La base de datos se abre, pero no es posible crear una consulta.

 
No hay órdenes abiertas en el servidor, no hay paradas y tomas, algo modos están habilitados y el comando de configuración pasa, pero los registros son silenciosos CTrade clase. En el probador funciona en silencio de comercio real. ¿Qué hay que comprobar?
 
mwwm CTrade clase. En el probador funciona en silencio de comercio real. ¿Qué comprobar?

registro de terminal

 
Vladimir Deryagin #:

registro de terminales

Supongo que he encendido los registros, no puede calcular el lote. No entiendo por qué no quiere calcular en real?

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

Supongo que encendí los registros, no puede calcular el lote. No entiendo por qué no quiere calcular en real?

No hay registros, por lo que puede haber muchas veces más conjeturas.

Como una opción, cuando el comercio de cruces, si en la visión general del mercado no está seleccionado par con la moneda del depósito, no el comercio.

Por ejemplo, el comercio de EURJPY, la moneda de depósito USD, en la visión general del mercado debe estar presente EURUSD y USDJPY.

 
Aleksandr Slavskii #:

No hay registros, así que podría haber muchas más conjeturas.

Como una opción, cuando el comercio de cruces, si el par con la moneda de depósito no está seleccionado en la visión general del mercado, no va a operar.

Por ejemplo, el comercio EURJPY, la moneda de depósito USD, en la visión general del mercado debe estar presente EURUSD y USDJPY.

Cuenta en USD pro cent, comercio XAUUSD

 

Hola a todos. No puedo dibujar una flecha en la primera barra usando buffers en MQL5.

En MQL4, hago lo siguiente:

Declaro una variable global double XX[];

escribir en init:

SetIndexBuffer(0,XX);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,108);

En Oncalculate escribo:

XX[1]=Alta[1]; Me sale una flecha dibujada sobre la vela 1. y ya está

Hago lo mismo en MQL5

Declaro una variable global double XX[];

escribo en init:

SetIndexBuffer(0,XX,INDICATOR_DATA);

PlotIndexSetInteger(0,PLOT_ARROW,108);

En Oncalculate escribo:

XX[1]=iAlto[1]; - no dibuja

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1); - tampoco dibuja.

Por supuesto, incluso en la cabecera se especifica:

#property indicator_buffers 1

#property indicator_plots 1

#property indicador_tipo1 DRAW_ARROW

#propiedad indicator_color1 clrGreen

#propiedad indicator_width1 1

¡¡¡¡¿Qué estoy haciendo mal, por favor dígame !!!!

 
Vyacheslav Pronenko #:

XX[1]=alto[1]; - no dibujar

¡¡¡¡¿Qué estoy haciendo mal, por favor dígame !!!!

Que tal esto

XX[rates_total-1]=high[rates_total-1];

o así:

ArraySetAsSeries(XX,true);
ArraySetAsSeries(high,true);
XX[1]=high[1];
 
Aleksandr Slavskii #:

¿Qué te parece esto?

O así:

Gracias, de hecho en On Calculate - funciona.

XX[rates_total-1]=high[rates_total-1];

Pero ¿y si el mismo punto, pero debe ser implementado en una función separada?

Es decir

void funkc_()

{

XX[rates_total-1]=high[rates_total-1];

Aquí no hay acceso a RATES_TOTAL y HIGH ? ¿Y qué hacer en esta situación?

}

En general, MQL5 es realmente más complicado e incomprensible que MQL4, por supuesto "para mí"

 

Hola, Vyacheslav Pronenko

En la función sólo tienes que pasar lo que necesites en los parámetros:

void funkc_(double &XX[], double &high[], int rates_total) {
        XX[rates_total-1]=high[rates_total-1];
        // ...

}

int OnCalculate(...) {
        // ...
        funkc_(XX, high, rates_total);
        // ...
}