Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 128

 
Questa è una grande rivelazione per me
// Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении

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


Risultato

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


Eseguire lo stesso script su MT4 è ancora più deprimente - c'è una storia più grande lì. Lasciatemi spiegare.


Qui si vede che la posizione è stata aperta e chiusa allo stesso prezzo. Ma i loro prezzi non sono uguali quando si confrontano senza normalizzazione!


ZZY Checked Tester - nessuna cattiveria del genere, sembra.

 
Ilya Malev:

Devo aver fatto un errore di battitura.

Quindi lo spread minimo è reale? Se è così, dovresti scrivere al supporto tecnico per farlo correggere (a medio). Altrimenti è una chicca per tester grails.

 
fxsaber:

Ho controllato il Tester - non sembra esserci nessuna di queste cattiverie.

In tutte le modalità Tester, eccetto i tick reali, i prezzi non sono normalizzati!

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

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


Risultato

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 


Per dirla tutta, questo è un bug del Tester.

 

Diciamo che non puoi connetterti al server di trading quando cerchi di accedere al tuo conto.

Oppure, per esempio, il tuo account demo è scaduto e il tentativo di login dà "Invalid account".


Nonostante questo fallimento tutta la storia del trading è disponibile, anche se non viene mostrata nel Terminale!

 
fxsaber:

Diciamo che non puoi connetterti al server di trading quando cerchi di accedere al tuo conto.

Oppure, per esempio, il tuo account demo è scaduto e il tentativo di login dà "Invalid account".


Nonostante questo fallimento tutta la storia del trading è disponibile, anche se non viene mostrata nel Terminale!

Allora, dove viene conservata la storia?

 
Alexey Navoykov:

Se è così, dovresti scrivere al supporto tecnico per farlo sistemare (a medio). Altrimenti è una chicca da tester grails.

Nel ramo "bug, domande" hanno già risposto ufficialmente che nulla cambierà. Più precisamente, hanno semplicemente ignorato tutte le domande razionali e hanno risposto "test con tick reali", che interpreto come una risposta strettamente negativa

È una "chicca" per l'auto-inganno sfortunato. Anche se, forse qualcun altro può usarlo commercialmente per imbrogliare in qualche modo (vale a dire, le società di intermediazione - che quindi creano una falsa impressione della norma degli spread, se la persona non entra in tick reali, e il 99,9% non lo farà)
 
Ilya Malev:

Anche se può essere che qualcun altro può usarlo commercialmente per barare in qualche modo (vale a dire, le società di intermediazione - che quindi creano una falsa impressione della norma degli spread, se la persona non entra in zecche reali, e 99,9% non lo farà).

In teoria, tutto dovrebbe essere sincronizzato sul server. Ciò che è in tick - dovrebbe essere in barre. Ma naturalmente, non so come sia nella realtà.

 
I commenti non pertinenti a questo argomento sono stati spostati in "Caratteristiche del linguaggio mql4, complessità e tecniche".
 

ME ha una combinazione ALT+V dove si possono vedere i valori precedenti degli appunti di sistema. Anche se avete copiato qualcosa dal browser e ME stava lavorando in background, ME lo vedrà e lo ricorderà.

Approssimativamente, ME vede molto di quello che fate al computer. Per esempio, se si incolla una password per un account o un conto personale da un'altra risorsa tramite il buffer, andrà nella storia della sessione ME corrente.

 
fxsaber:

ME ha una combinazione ALT+V dove si possono vedere i valori precedenti degli appunti di sistema. Anche se avete copiato qualcosa dal browser e ME stava lavorando in background, ME lo vedrà e lo ricorderà.

Approssimativamente, ME vede molto di quello che fate al computer. Per esempio, se si incolla la password di un account tramite il buffer, questa andrà nella storia della sessione ME corrente.

Wow, copio le password delle criptovalute. Quanto è dannoso per me?

Motivazione: