Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 128

 
Dies ist eine große Offenbarung für mich.
// Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении

#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)); // Количество "несовпадающих" пар цен.
}


Ergebnis

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


Die Ausführung desselben Skripts auf MT4 ist sogar noch deprimierender - dort gibt es eine größere Geschichte. Lassen Sie mich das erklären.


Hier sehen Sie, dass die Position zum gleichen Preis eröffnet und geschlossen wurde. Aber ihre Preise sind nicht gleich, wenn man sie ohne Normalisierung vergleicht!


ZZY Checked Tester - anscheinend gibt es dort keine derartigen Bösartigkeiten.

 
Ilya Malev:

Ich muss einen Tippfehler gemacht haben.

Die minimale Spanne ist also wirklich da? Wenn ja, sollten Sie sich an den technischen Support wenden, um sie korrigieren zu lassen (auf mittel). Ansonsten ist es ein Leckerbissen für Tester-Grails.

 
fxsaber:

Ich habe den Tester überprüft - dort scheint es keine derartigen Unannehmlichkeiten zu geben.

In allen Tester-Modi, mit Ausnahme der echten Ticks, werden die Preise nicht normalisiert!

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

#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));
  }
}


Ergebnis

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 


Um es milde auszudrücken, ist dies ein Fehler im Tester.

 

Angenommen, Sie können keine Verbindung zum Handelsserver herstellen, wenn Sie versuchen, sich bei Ihrem Konto anzumelden.

Oder Ihr Demokonto ist abgelaufen und der Anmeldeversuch ergibt "Ungültiges Konto".


Trotz dieses Fehlers ist der gesamte Handelsverlauf verfügbar, auch wenn er nicht im Terminal angezeigt wird!

 
fxsaber:

Angenommen, Sie können keine Verbindung zum Handelsserver herstellen, wenn Sie versuchen, sich bei Ihrem Konto anzumelden.

Oder Ihr Demokonto ist abgelaufen und der Anmeldeversuch ergibt "Ungültiges Konto".


Trotz dieses Fehlers ist der gesamte Handelsverlauf verfügbar, auch wenn er nicht im Terminal angezeigt wird!

Wo wird also die Geschichte gespeichert?

 
Alexey Navoykov:

D.h. ist die minimale Streuung realistisch? Wenn ja, sollten Sie sich an den technischen Support wenden, damit das Problem behoben wird (auf Medium). Ansonsten ist es ein Leckerbissen für Tester.

In der Filiale "Bugs, Fragen" haben bereits offiziell geantwortet, dass sich nichts ändern wird. Genauer gesagt, ignorierten sie einfach alle rationalen Fragen und antworteten "test by real ticks", was ich als eine strikt negative Antwort interpretiere

Es ist ein "Leckerbissen" für unglückliche Selbsttäuschung. Obwohl, vielleicht jemand anderes kann es kommerziell nutzen, um in irgendeiner Weise zu betrügen (nämlich die Broker-Firmen - die damit einen falschen Eindruck von der Spreads Norm, wenn die Person nicht in realen Ticks zu bekommen, und 99,9% werden nicht so tun)
 
Ilya Malev:

Obwohl es sein kann, dass jemand anderes es kommerziell nutzen kann, um irgendwie zu betrügen (nämlich Brokerfirmen - die so einen falschen Eindruck von der Spreads-Norm erwecken, wenn die Person nicht in echte Ticks kommt, und 99,9% werden nicht).

Theoretisch sollte alles auf dem Server synchronisiert werden. Was in Ticks ist - sollte in Balken sein. Aber natürlich weiß ich nicht, wie es in der Realität ist.

 
Kommentare, die für dieses Thema nicht relevant sind, wurden in den Bereich "Merkmale der Sprache mql4, Feinheiten und Techniken" verschoben.
 

ME verfügt über eine ALT+V-Kombination, mit der Sie die vorherigen Werte der Systemzwischenablage sehen können. Selbst wenn Sie etwas aus dem Browser kopiert haben und ME im Hintergrund gearbeitet hat, wird ME es sehen und sich daran erinnern.

Grob gesagt, sieht ME vieles von dem, was Sie am Computer tun. Wenn Sie beispielsweise ein Passwort für ein Konto oder ein persönliches Konto aus einer anderen Ressource über den Puffer einfügen, wird es in den Verlauf der aktuellen ME-Sitzung aufgenommen.

 
fxsaber:

ME verfügt über eine ALT+V-Kombination, mit der Sie die vorherigen Werte der Systemzwischenablage sehen können. Selbst wenn Sie etwas aus dem Browser kopiert haben und ME im Hintergrund gearbeitet hat, wird ME es sehen und sich daran erinnern.

Grob gesagt, sieht ME vieles von dem, was Sie am Computer tun. Wenn Sie z. B. ein Kontopasswort über den Puffer einfügen, wird es in den Verlauf der aktuellen ME-Sitzung aufgenommen.

Wow, ich kopiere Passwörter für Kryptowährungen. Wie nachteilig ist das für mich?