MT4-Tester VS MT5-Tester - pagina 3

 
fxsaber:
Prova

Questa non è una prova.

Vi sbagliate.

La mia affermazione rimane - il suddetto esperto sta solo testando l'accesso alla storia delle transazioni.
 
Renat Fatkhullin:

Questa non è una prova.

Vi sbagliate.

Qual è il suo errore? Ho anche controllato io stesso mettendo dei breakpoint ovunque ci sia una funzione di cronologia ed eseguendo CTRL+F5 per il debug. Tutto ha funzionato in modo pulito.
Renat Fatkhullin:
La mia affermazione rimane - il detto esperto sta testando solo l'accesso alla storia delle transazioni.

Siete saltati alle conclusioni.

 

Non sono sicuro che tali confronti abbiano senso - il cloud computing nega tutti i vantaggi di velocità del tester MT4.

E, inoltre, in questo caso, in effetti, l'EA sta testando esclusivamente la velocità di accesso ai dati. Ma non credo che questo sia un collo di bottiglia per la maggior parte degli EA.

Dopo l'introduzione di conti con posizioni di copertura in MT5 - personalmente non vedo alcun vantaggio di MT4 per me. Uso le librerie multipiattaforma solo perché ho MT4 sui miei conti reali.

L'unica cosa che personalmente mi manca - puntatori o riferimenti di array. Non ho bisogno di copiare i dati negli indicatori per qualche motivo. MQL5 ha tutto il resto.

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber:
Sei saltato alle conclusioni.
Cos'altro c'è? Interrogare i dati e scaricarli in un file. Non ci sono altre azioni - cosa pensi che questo EA stia testando?
 
fxsaber:

ZS Non tutte le corse combaciavano perfettamente. Quindi uno dei tre sta sicuramente mentendo (MT4+TDS, MT5, MT4Orders). Dovremo cercarlo.

Grazie al sub, il colpevole è stato trovato, succede sempre quando c'è una possibilità di confronto.

Expert Advisor che mostra il bug

// MQL4&5-code

#property strict

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

#define  PRINT(A) Print(#A + " = " + (string)(A));

void OnTick()
{
  static bool FirstRun = true;
  
  static const double PrevBid = Bid;
  static const double PrevAsk = Ask;
  
  if (FirstRun)
  {
    PRINT((PrevBid != Bid) || (PrevAsk != Ask))
    
    FirstRun = false;
  }
}


MT4

2017.05.08 10:57:33.056 2017.04.10 00:00:08  TDS_Test EURUSD,M1: (PrevBid!=Bid)||(PrevAsk!=Ask) = false


MT5

2017.05.08 11:01:31.266 2017.04.10 00:00:08   (PrevBid!=Bid)||(PrevAsk!=Ask) = true
 
George Merts:
Cos'altro c'è? La richiesta di dati e il salvataggio in un file. Non ci sono altre operazioni - cosa sta testando esattamente questa EA?
Vi suggerisco di leggere tutta la discussione, allora tali domande non sorgeranno nemmeno.
George Merts:

Dopo l'introduzione dei conti con posizioni di copertura nella MT5, personalmente non vedo un solo vantaggio della MT4.

Questo thread si distingue un po' per la sua concentrazione di contenuti costruttivi. Quindi le preferenze personali sono meglio discusse qui, per esempio.

 
fxsaber:
Dov'è l'errore? Ho anche controllato io stesso, ho messo breakpoint ovunque ci siano funzioni di cronologia e ho eseguito il debugging con CTRL+F5. Tutto ha funzionato in modo pulito.

Sei saltato alle conclusioni.

Tutto sommato:

  1. il lavoro con la storia è in pieno svolgimento, gli scambi sono chiusi dopo la scansione della storia
  2. utilizzare MT4Orders.mqh - questo è un fine alla purezza dell'esperimento. libreria mostruosa con un overhead, scritto in modo disgustoso e illeggibile. qualcuno ha dimostrato gravemente la loro pigrizia
  3. scrivere for(i=200 000; i>=0; i--) OrderSelect su ogni tick non è altro che una follia e un tentativo di ripetere la barzelletta sulle seghe giapponesi e gli uomini russi esclusivamente
       for(int i=OrdersTotal()-1; i>=0; i--)
          if(OrderSelect(i,SELECT_BY_POS) && ((!TradeTime) || (OrderProfit()>0) || 
             ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
             ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit))))
             OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0);
    
  4. l'intero test è stato scritto solo per il bene del ciclo dal punto 3

    Approssimativamente prendiamo 1 800 000 tick nel test, dove 200 000 affari sono aperti in 5 giorni. Semplifichiamo a 900 000 tick, dove 100 000 ordini vengono scansionati nella storia e otteniamo 900 000 000 * 100 000 = 900 000 000 000 000 OrderSelect chiamate (con overflow dalla libreria). Sono esattamente 900 miliardi di chiamate OrderSelect che vengono testate.

    E di loro il 99,99% delle chiamate sono assolutamente inutili e sono state fatte solo per dimostrare i "ritardi".


Se volete fare un test pulito, scrivete due esempi puliti identici senza librerie. Questo garantirà pulizia e nessun overhead incorporato per il bene della compatibilità.

Abbiamo ottimizzato l'accesso alla storia e annullato completamente questa demo. È stato scritto così di proposito.

 
Renat Fatkhullin:

Tutto sommato:

  1. Il lavoro sulla storia è in pieno svolgimento, le compravendite sono chiuse dopo la scansione della storia
Dove?
  1. usare MT4Orders.mqh - è porre fine alla purezza dell'esperimento. Questa è una libreria orribile con overhead scritto in modo disgustoso e illeggibile.
Quello ero io.
  1. Scrivere for(i=200 000; i>=0; i--) OrderSelect su ogni tick non è altro che una follia e un tentativo di ripetere la barzelletta sulle seghe giapponesi e gli uomini russi esclusivamente
Vi siete completamente dimenticati di MQL4. Qui non c'è alcun riferimento alla storia.
  1. l'intero test è stato scritto solo per il bene del ciclo dal punto 3

    Il 99,99% delle sfide sono completamente inutili e sono state fatte solo per dimostrare i "freni".
L'esempio non è stato inventato, c'è un link all'originale nella fonte. Questo è uno dei più noti e vecchi bagarini.

Se volete fare un test pulito, scrivete due esempi puliti identici senza librerie. In questo modo ci sarà una garanzia di pulizia e nessun overhead incorporato per motivi di compatibilità.

Voglio essere in grado di confrontare i due tester. Vedi i pro e i contro di ciascuno. Anche il confronto è uno dei modi più efficaci per identificare gli insetti.

Il filo inizia con la dimostrazione dell'identità dei dati grezzi di entrambi i tester. Questa è la base, senza la quale non possiamo fare nulla. Poi ognuno può scegliere un Expert Advisor per il test.

Abbiamo ottimizzato l'accesso alla storia e negato completamente questa dimostrazione. È stato scritto così di proposito.

Grazie all'applicazione di qualcun altro, la SD lo hareso tale. La critica costruttiva è una buona cosa.
 

Lavorare con la storia è OrderSelect e comandi simili OrderXXXX. Non fate finta di non capire questo. Soprattutto se avete scritto la libreria.

Non ho dimenticato MQL4 e anche lì funziona con la storia.

Scrivere uno scanner storico per 200 000 scambi in profondità in ogni tick e dimenticare la condizione di un'uscita ragionevole dal ciclo? Questo è chiamato - per giocare volutamente gli uomini russi.

E non fare riferimento a qualche bagarino. Il ciclo è stato scritto così stupidamente di proposito. E anche in 5 giorni di test non c'erano altro che centinaia di miliardi di funzioni OrderXXX in fase di test, di cui il 99,99% non aveva bisogno di essere chiamato.


Il problema è che hai iniziato a discutere con l'affermazione assolutamente accurata "L'intero esempio di Expert Advisor è scritto in modo che faccia solo una cosa - scansiona l'intera storia dei trade su ogni tick", anche se sapevi molto bene perché hai scritto il test così intenzionalmente. Dopo tutto, si potrebbe rimuovere il 99,99% della stupida scansione con una mossa della mano, ma poi il test fallirebbe.
 
Renat Fatkhullin:

Lavorare con la storia è OrderSelect e comandi simili OrderXXXX. Non fate finta di non capirlo. Soprattutto se avete scritto la libreria.

Non ho dimenticato MQL4 e anche lì funziona con la storia.

Scrivere uno scanner storico per 200 000 scambi in profondità in ogni tick e dimenticare la condizione di un'uscita ragionevole dal ciclo? Questo è chiamato - per giocare volutamente gli uomini russi.

E non fare riferimento a qualche bagarino. Il ciclo è stato scritto apposta. E anche in 5 giorni di test non c'era altro che centinaia di miliardi di funzioni OrderXXXXX, il 99,99% delle quali non aveva bisogno di essere chiamato.

Non voglio discutere. Chiedo agli utenti del forum che hanno familiarità con MQL4 di rivedere questo breve codice sorgente e spiegare cosa significa Renat.

Forum sul trading, sistemi di trading automatico e test di strategia

MT4-Tester VS MT5-Tester

fxsaber, 2017.05.08 01:11

EA

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}

Devo essermi sbagliato, ma non riesco a vedere dove va il lavoro della storia in MT4. Per favore, aiutatemi.

Motivazione: