Características del lenguaje mql5, sutilezas y técnicas - página 128

 
Esto es una gran revelación para mí
// Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении

#property strict

#include <MT4Orders.mqh>

// Заполнение массива ценами открытия/закрытия
int FillPrices( double &Prices[] )
{
  const int Total = OrdersHistoryTotal();
  
  ArrayResize(Prices, Total << 1);
  
  int Amount = 0;
  
  for (int i = 0; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      Prices[Amount++] = OrderOpenPrice();
      Prices[Amount++] = OrderClosePrice();
    }

  return(ArrayResize(Prices, Amount));
}

// true - нормализованная разность равна нуля, сама разность - отлична от нуля.
bool IsBadPrices( const double &Price1, const double &Price2 )
{
  return(!NormalizeDouble(Price1 - Price2, 5) && (Price1 != Price2));
}

// Находит цены открытия/закрытия, которые
// с нормализацией равны друг другу,
// без нормализации - не равны.
int CheckPrices( const double &Prices[] )
{
  int Res = 0;
  const int Size = ArraySize(Prices);
  
  for (int i = 0; i < Size - 1; i++)
  {
    const double Price = Prices[i];
    
    for (int j = i + 1; j < Size; j++)
      if (IsBadPrices(Price, Prices[j]))
      {
        Print((string)Price + " - " + (string)Prices[j] + " = " + (string)(Price - Prices[j])); // Распечатываем найденые цены
        
        Res++;
      }
  }
    
  return(Res);
}

void OnStart()
{
  double Prices[];
  
  FillPrices(Prices);
  Print(CheckPrices(Prices)); // Количество "несовпадающих" пар цен.
}


Resultado

1.95562 - 1.95562 = -2.220446049250313 e-016
1.95562 - 1.95562 = -2.220446049250313 e-016
1.71599 - 1.71599 = -2.220446049250313 e-016
1.71599 - 1.71599 = -2.220446049250313 e-016
1.58028 - 1.58028 = -2.220446049250313 e-016
14.806 - 14.806 = -1.77635683940025 e-015
1.95521 - 1.95521 = -2.220446049250313 e-016
1.95521 - 1.95521 = -2.220446049250313 e-016
8


Ejecutar el mismo script en MT4 es aún más deprimente - hay una historia más grande allí. Déjeme explicarle.


Aquí se ve que la posición se abrió y se cerró al mismo precio. Pero sus precios no son iguales cuando se comparan sin normalización.


ZZY Checked Tester - parece que no hay tal asquerosidad.

 
Ilya Malev:

Debo haber cometido un error de imprenta.

¿Así que la extensión mínima es real ahí? Si es así, deberías escribir al soporte técnico para que lo corrijan (a la mitad). Si no, es una chorrada para los probadores de grails.

 
fxsaber:

Comprobado el Probador - no parece haber tal asquerosidad.

En todos los modos de comprobación, excepto en los ticks reales, los precios no están normalizados.

// Советник выводит цены, которые не нормализованы

#property strict

// true - нормализованная цена не равна оригинальной
bool IsBadPrice( const double &Price )
{
  return(NormalizeDouble(Price, 5) != Price);
}

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

//const bool Init = EventSetMillisecondTimer(50);
//void OnTimer()
void OnTick()
{
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, true);
    
    const double PriceBid = SymbolInfoDouble(Symb, SYMBOL_BID);
    const double PriceAsk = SymbolInfoDouble(Symb, SYMBOL_ASK);
    
    if (IsBadPrice(PriceBid))
      Print(TOSTRING(Symb) + TOSTRING(PriceBid) + TOSTRING(NormalizeDouble(PriceBid, 5) - PriceBid));

    if (IsBadPrice(PriceAsk))
      Print(TOSTRING(Symb) + TOSTRING(PriceAsk) + TOSTRING(NormalizeDouble(PriceAsk, 5) - PriceAsk));
  }
}


Resultado

2019.02.18 23:57:24   Symb = EURUSD PriceBid = 1.13088 NormalizeDouble(PriceBid,5)-PriceBid = -2.220446049250313 e-016 
2019.02.18 23:57:26   Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble(PriceAsk,5)-PriceAsk = -2.220446049250313 e-016 
2019.02.18 23:57:27   Symb = EURUSD PriceBid = 1.13085 NormalizeDouble(PriceBid,5)-PriceBid = -2.220446049250313 e-016 
2019.02.18 23:58:18   Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble(PriceAsk,5)-PriceAsk = -2.220446049250313 e-016 


Por decirlo suavemente, se trata de un error en el Probador.

 

Supongamos que no puede conectarse al servidor de operaciones cuando intenta acceder a su cuenta.

O, por ejemplo, su cuenta de demostración ha caducado y el intento de inicio de sesión da "Cuenta no válida".


A pesar de este fallo, todo el historial de operaciones está disponible, ¡aunque no se muestre en la Terminal!

 
fxsaber:

Supongamos que no puede conectarse al servidor de operaciones cuando intenta acceder a su cuenta.

O, por ejemplo, su cuenta de demostración ha caducado y el intento de inicio de sesión da "Cuenta no válida".


A pesar de este fallo, todo el historial de operaciones está disponible, ¡aunque no se muestre en la Terminal!

Entonces, ¿dónde se almacena el historial?

 
Alexey Navoykov:

Es decir, ¿la extensión mínima es realista? Si es así, tienes que escribir al soporte técnico para que lo arreglen (a la media). Si no, es una chorrada para los probadores.

En la rama "bugs, preguntas" ya han contestado oficialmente que nada va a cambiar. Más concretamente, se limitaron a ignorar todas las preguntas racionales y a responder "prueba por garrapatas reales", lo que interpreto como una respuesta estrictamente negativa

Es un "chisme" para el autoengaño desafortunado. Aunque, tal vez alguien más puede utilizarlo comercialmente para hacer trampa de alguna manera (a saber, las empresas de corretaje - que así crear una falsa impresión de la norma de los diferenciales, si la persona no se mete en ticks reales, y el 99,9% no lo hará)
 
Ilya Malev:

Aunque puede ser que alguien más pueda utilizarlo comercialmente para engañar de alguna manera (a saber, las empresas de corretaje - que así crean una falsa impresión de la norma de los diferenciales, si la persona no se mete en garrapatas reales, y el 99,9% no lo hará).

En teoría, todo debería estar sincronizado en el servidor. Lo que está en ticks - debería estar en barras. Pero por supuesto, no sé cómo es en la realidad.

 
Los comentarios que no son relevantes para este tema se han trasladado a "Características del lenguaje mql4, complejidades y técnicas".
 

ME tiene una combinación ALT+V donde se pueden ver los valores anteriores del portapapeles del sistema. Incluso si has copiado algo del navegador y ME estaba trabajando en segundo plano, ME lo verá y lo recordará.

A grandes rasgos, ME ve mucho de lo que haces en el ordenador. Por ejemplo, si se pega una contraseña de una cuenta o cuenta personal desde otro recurso a través del buffer, pasará al historial de la sesión actual de ME.

 
fxsaber:

ME tiene una combinación ALT+V donde se pueden ver los valores anteriores del portapapeles del sistema. Incluso si has copiado algo del navegador y ME estaba trabajando en segundo plano, ME lo verá y lo recordará.

A grandes rasgos, ME ve mucho de lo que haces en el ordenador. Por ejemplo, si se pega la contraseña de una cuenta a través del buffer, ésta pasará al historial de la sesión actual de ME.

Vaya, copio las contraseñas de las criptomonedas. ¿Cómo de perjudicial es eso para mí?