Errores, fallos, preguntas - página 934

 
uncleVic:
Así es.

Muchas gracias por toda su ayuda. Todo es sencillo y bonito )

Originalmente probé con Event map pero no lo entendí hasta el final, así que decidí sobrecargar OnEvent() yo mismo...

P.D. Estaría bien que en el código que viene con el terminal, o en su documentación hubiera algunos ejemplos de uso del mapa de eventos (de ON_EVENT a ON_EXTERNAL_EVENT) - sería mucho más fácil entenderlos. Sólo hay ejemplos de ON_EVENT - Experts/Examples/Controls/ControlsDialog.mq5 e Indicators/Examples/Panels/PanelDialog.mq5 - al menos no he encontrado ningún otro ejemplo. Y una búsqueda en el sitio web, salvo algunas palabras del artículo, no arrojó nada.

 
Rone:

Muchas gracias por toda su ayuda. Todo es sencillo y bonito )

Originalmente y probé el mapa de eventos, pero no lo entendí completamente, por lo que decidí sobrecargar OnEvent() yo mismo...

P.D. Estaría bien que en el código que viene con el terminal, o en su documentación hubiera algunos ejemplos de uso del mapa de eventos (de ON_EVENT a ON_EXTERNAL_EVENT) - sería mucho más fácil entenderlos. Sólo hay ejemplos de ON_EVENT - Experts/Examples/Controls/ControlsDialog.mq5 e Indicators/Examples/Panels/PanelDialog.mq5 - al menos no he encontrado ningún otro ejemplo. Y una búsqueda en el sitio web, salvo algunas palabras del artículo, no arrojó nada.


1. Por favor. No dude en ponerse en contacto conmigo.

2. Para añadir.

 
CTrade::OrderSend: comprar stop 0,94 USDCHF a 0,93366 sl: 0,93016 tp: 0,94816 [volumen no válido]

¿Por qué he recibido un error de volumen de 0,94 lotes en el USDCHF ?

¿Se trata de un volumen no válido o no tengo suficiente dinero para colocar este volumen?

 
Konstantin83:
CTrade::OrderSend: comprar stop 0,94 USDCHF a 0,93366 sl: 0,93016 tp: 0,94816 [volumen no válido]

¿Por qué he recibido un error de volumen de 0,94 lotes en el USDCHF?

¿Se trata de un volumen no válido o no tengo suficiente dinero para colocar este volumen?

¿Cuál es el paso de volumen en la configuración de la herramienta? ¿0,10 o 0,01 de lote? Si es 0,10, entonces todo es correcto - volumen no válido
 
Renat:
¿Cuál es el paso de volumen en la configuración de la herramienta? ¿0,10 o 0,01 de lote? Si es 0,10, tienes razón - volumen equivocado

servidor de demostración de metaquotes, tiene 0,01 paso.

el lote se comprueba



CSymbolInfo       Exp_Symbol_Info;              // symbol info object

...
double CBaseTrade::GetCorrectLot(double pLot)
 {
      double   dLot   = pLot;
      double   dLotMin   = Exp_Symbol_Info.LotsMin();
      double   dLotMax   = Exp_Symbol_Info.LotsMax();
      double   dLotStep  = Exp_Symbol_Info.LotsStep();
    
      dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
      if(dLot < dLotMin) dLot=dLotMin;
 
      if(dLot > dLotMax && dLotMax !=0) dLot=dLotMax;

 
  return(dLot);
 }

 

Imprima el valor del volumen a 4-8 dígitos, por favor.

Un claro error de no redondear al segundo dígito aquí:

dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
Renat:

Imprima el valor del volumen a 4-8 dígitos, por favor.

Un claro error de no redondear al segundo dígito aquí:

Sí, pero ¿por qué no hay redondeo?

Digamos que el paso de lote es de 0,01

Lote de entrada 2.111

resultado = 0,01 * NormalizarDoble(2,111/0,01)=0,01*NormalizarDoble(211,1)=0,01*211=2,11

O hay corredores donde el incremento del lote es de 0,25, no se puede simplemente redondear el resultado al 2º signo.

Supongamos que el paso de lote es de 0,25

Lote entrante 2,3

Resultado = 0,25 * NormalizarDoble(2,3/0,25)=0,25*NormalizarDoble(9,2)=0,25*9=2,25


Ningún problema en el probador. Hoy me ha salido este error un par de veces en la demo.

¿Está normalizado el paso de volumen de la clase CSymbolInfo?

 

Por favor, aconséjeme.

Cómo cambiar el color de fondo de los pares de divisas en la visión general del mercado

O eliminar el color por completo.

Gracias de antemano.

 
Konstantin83: resultado = 0, 01 * NormalizarDoble(2,111/0,01)=0,01*NormalizarDoble(211,1)=0,01*211=2,11
El producto de dos números dobles es un número no normalizado. 0.01*NormalizarDoble(211.1)=0.01*211.***********=2.11*************
 
Konstantin83:

Sí, pero ¿por qué no es redondo?

Porque el resultado de las operaciones mat de los valores más altos normalizados no es un número normalizado.

Por eso es un lugar de error.

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - Документация по MQL5