Errores, fallos, preguntas - página 3005

 
¿Qué pasó con el enlace "Todos los mensajes" en el perfil?
 
fxsaber:
¿Dónde ha ido a parar el enlace a "Todos los mensajes" en el perfil?
.
 
Alexey Viktorov:

Gracias.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Precios no normalizados en MT4

fxsaber, 2021.04.30 10:42

Dos números diferentes convertidos a cadena de la misma manera. ¿Es un error?

void OnStart()
{
  const double Num = 1.07299;
  const double Norm = NormalizeDouble(Num, 5);
   
  Print(Num);  // 1.07299
  Print(Norm); // 1.07299

  Print(Num - Norm); // 2.220446049250313e-16
}

La situación es similar a la de este hilo.

 

Indicador personalizado en la subventana, tipo de oscilador.
¿Cómo ocultar la línea cero por defecto?
Colorear la línea cero de la GUI, para que coincida con el color de fondo no funciona.

i

establecer las propiedades en el indicador, no funciona

#property indicator_level1  0.0
#property indicator_levelcolor C'35,35,35'
 
fxsaber:

Los números son diferentes, pero la diferencia es de 17 decimales, y Print sólo maneja 15 decimales, así que desde el punto de vista de Print son iguales

 
A100:

Los números son diferentes, pero la diferencia es el decimoséptimo decimal, mientras que Print maneja sólo 15 dígitos, por lo que desde el punto de vista de Print son iguales.

Sólo que no se imprime, sino que se convierte de doble a cadena.

 

Figura 1

Me di cuenta de esto. Si se repiten los datos de la prueba de avance (la misma), al ver el Backtest para las tres variantes, sólo se mostrará primero la variante (10384.88).

Figura 2

¿Se desconocen los datos de las variantes con resultados = 10435 o 10843 (todo en los informes de la variante = 10384)?


 

¿Pueden decirme cómo copiar correctamente los datos de los punteros?

Es necesario copiar datos de un objeto a otro. A continuación, elimine el objeto inicial. Cuando se elimina el objeto original, los datos del objeto copiado quedan inaccesibles.

#include <Arrays\ArrayObj.mqh>

CArrayObj ArrCur;       // массив с объектами, каждый объект содержит структуру с полями ордеров и его id
CArrayObj ArrPrev;  // массив с объектами, каждый объект содержит структуру с полями ордеров и его id

class CID : public CObject
{
  public:  int id;
};


void OnStart()
{
  // -----------------------------------------------------------------
    CID* pCur = new CID;        // создаем объект для текущих параметров
    pCur.id = 25;               // вносим текущие данные
    ArrCur.Add(pCur);           // помещаем в массив объектов
    
    CID* pPrev = ArrCur.At(0);  // копируем данные??? Указатель???
    ArrPrev.Add(pPrev);         // помещаем в массив объектов
    
    ArrCur.Clear();             // чистим текущий массив
  // -----------------------------------------------------------------
  
   // --- для вывода в журнал
  int sizeCur = ArrCur.Total();       // размер = 0
  int sizePrev = ArrPrev.Total();     // размер = 1
  
  ENUM_POINTER_TYPE pTypeCur = CheckPointer(ArrCur.At(0));    // POINTER_INVALID
  ENUM_POINTER_TYPE pTypePrev = CheckPointer(ArrPrev.At(0));  // POINTER_INVALID
  
  Print(__FUNCTION__, " sizeCur=", sizeCur, " pTypeCur=", EnumToString(pTypeCur));
  Print(__FUNCTION__, " sizePrev=", sizePrev, " pTypePrev=", EnumToString(pTypePrev));

}
 
Allí el puntero copia