Errores, fallos, preguntas - página 2400

 
Slava:

Si OnTimer no está en bucle, no debería haber ninguna terminación anormal.

¿Puede dar su experto para comprobar el comportamiento del terminal del cliente?

Hay mucha basura allí, el código no es óptimo y está construido sobre la base de una plantilla de 7000 líneas. Intentaré averiguarlo yo mismo y te lo haré saber. Por cierto, este es un constructor de objetos gráficos, no es un comercio.

Gracias.

 
Vitaly Muzichenko:

Es un constructor, por cierto, no es un comerciante.

Lo tengo. Eliminación de objetos gráficos en OnDeinit().

Esto ya se ha arreglado

 
Slava:

Lo tengo. Eliminación de objetos gráficos en OnDeinit().

Ya está arreglado.

¿Pueden decirme cuándo habrá una nueva compilación con correcciones?

 
uint lev[1] = {};
ArrayInitialize(lev, UINT_MAX);  // warring: truncation of constant value
Alert(lev[0] == UINT_MAX);       // Alert: true
 

He tenido que crear una nueva página en MQL5 para registrar la señal, pero no está habilitada

https://www.mql5.com/ru/signals/new

 

Me pueden decir cómo formar correctamente el precio para las órdenes de CFDs sobre el Nikkei (otros CFDs son abiertos por el bot).

Digamos que tenemos la pregunta 19661.15, ticksize = 1.

Hay que redondearlo, pero ¿en qué dirección? Por ejemplo, el códigoMathRound (price / tickSize) * tickSize; da el precio 19661, es decir, mejor que el mercado. Esto da un error.

Añadir un tickSize de arriba también da un error.

Si intento enviar el pedido tal cual, el mismo error.

El probador escribe en los registros:

failed market buy 1.00 NI225 [Invalid price] // стандартный вывод
OrderSend failed NI225 0 1.0 19662.0 0.0 0.0 with error 4756 // бот выводит параметры ордера и код ошибки
 
Stanislav Korotky:

¿Qué tipo de servidor con esta configuración?

 
fxsaber:

¿Cuál es el servidor con esta configuración?

LiteForexInvestments-MT5.com


 
Stanislav Korotky:

Me pueden decir cómo formar correctamente el precio para las órdenes de CFDs sobre el Nikkei (otros CFDs son abiertos por el bot).

Digamos que tenemos la pregunta 19661.15, ticksize = 1.

Hay que redondearlo, pero ¿en qué dirección? Por ejemplo, el códigoMathRound(price / tickSize) * tickSize; da el precio 19661, es decir, mejor que el mercado. Esto da un error.

Añadir un tickSize de arriba también da un error.

Si intento enviar el pedido tal cual, el mismo error.

En los registros el probador dice:

Utilice esta función (transfiere los puntos al precio del instrumento).

//+------------------------------------------------------------------+
//| Expert Points to price function                                  |
//+------------------------------------------------------------------+
double PointsToPrice(const long a_points)
{
  double step_price = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
  double a_price = (double(a_points) * Point() ) / step_price;
  if(a_points < 0)
  {
    a_price = MathFloor(a_price) * step_price;
  }
  else
  {
    a_price = MathCeil(a_price) * step_price;
  }
  return(NormalizeDouble(a_price, Digits()));
}

Luego, sólo hay que sumar (restar) lo que la funciónPointsToPrice() devolvió al precio

Añadido por

Si no funciona correctamente, entonces este símbolo

se traduce porSYMBOL_TRADE_TICK_SIZE

 
Stanislav Korotky:

LiteForexInvestments-MT5.com

Así que son las manos torcidas del servidor, que el Probador es incapaz de enderezar ahora mismo. Al mismo tiempo en el Terminal se abrirá todo, ya que allí no se tiene en cuenta el TickSize.