Il grande e terribile MT4 per sempre (o come strategizzare una transizione) - pagina 19

 
fxsaber:

I termini MT4 e MT5 sono gli stessi.

Per tanti anni tutti hanno saputo della... Dormire. Perché è MOLTO complicato. Molte delle caratteristiche dell'API per il trading che sono state menzionate sul forum, gli sviluppatori non ne sono a conoscenza o non hanno commentato.


Nessuno sta criticando MT5. Vi ho mostrato alcuni problemi che si verificano durante la risoluzione dei compiti di base con degli esempi.

Perché sono uguali? Non hai ancora risposto alla mia domanda.

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

Il grande e orribile MT4 per sempre (o come determinare efficacemente una strategia di migrazione)

Alexey Viktorov, 2021.05.09 09:15

... E se mi collego al mio account da un altro computer e piazzo un paio di ordini ... cosa aprirà MQL4?

Nessuno sta criticando MT5. Ho mostrato alcuni problemi nella risoluzione di problemi elementari con esempi.

Hai solo bisogno di elaborare correttamente il risultato della funzione OrderSend() e non puoi allontanarti dalla semplicità di mql4. Avete il vostro obiettivo, catturare microsecondi, non fare trading... Un DT ha dei problemi e voi fate passare questi problemi come bug di MT. Mostra l'inversione di posizione sul conto MQ e poi gli sviluppatori ci faranno caso. Ho eseguito il tuo codice sulla demo di Robo e non ho visto alcun backtracking.

Alcune delle vostre segnalazioni di bug sono davvero degne di rispetto, ma alcune... scusate, una tale assurdità mi lascia senza parole.

Questo è tutto... Buon Giorno della Vittoria. Pace. Lavoro. Maggio.

 
Alexey Viktorov:

Perché sono uguali? Non hai ancora risposto alla domanda.

Ancora una volta, le condizioni sono le stesse per MT4/5. Devi avere 100 posizioni aperte in un conto vuoto alla fine dell'esecuzione dello script. È permesso chiudere alcune posizioni in qualsiasi terminale durante l'esecuzione dello script. Questo "intervento" è necessario solo per evitare decisioni stupide.

for (int i = 0; i < 100; i += OrderSend(Request, Result))
  ;

Il risultato della funzione OrderSend() deve essere elaborato correttamente, ma non si può prescindere dalla semplicità di mql4. Avete il vostro obiettivo, catturare microsecondi, non fare trading... Un dtz ha dei problemi e voi fate passare questi problemi come bug di MT. Mostra l'inversione di posizione sul conto MQ e poi gli sviluppatori ci faranno caso. Ho eseguito il tuo codice sulla demo di Robo e non ho visto alcun backtracking.

Alcune delle vostre segnalazioni di bug sono davvero degne di rispetto, ma alcune... scusate, una tale assurdità manca di parole decenti.

Solo perché non vedete problemi non significa che non ce ne siano. Il demo MQ è un posto disgustoso, in termini di debug. C'è un tipo di esecuzione in cui OrderSend restituisce true per gli ordini a mercato solo quando viene aperta una posizione. In realtà, non c'è niente del genere sui conti ECN. true - l'ordine a mercato è accettato. Quello che succede dopo è importante da monitorare. Solo i DC di cucina usano uno schema di esecuzione diverso (come in MQ-Demo).

Questo è tutto... Buon Giorno della Vittoria. Pace. Lavoro. Maggio.

Allo stesso modo.

 
fxsaber:

Ho bisogno di scrivere uno script su una MT5 che apra 100 posizioni su un conto vuoto.


Su MT4 ho risolto in questo modo.

void OnStart()
{
  while (OrdersTotal() < 100)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);
    
  Print(OrdersTotal());
}

Chi ha una soluzione su MT5?

Ho ricevuto il codice più breve che abbia mai scritto su MT5:

MqlTradeRequest BuyRequest = {0};
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static bool run = false;
   if(run) return;
   BuyRequest.action = TRADE_ACTION_DEAL;
   BuyRequest.type = ORDER_TYPE_BUY;
   BuyRequest.symbol = _Symbol;
   BuyRequest.volume = 0.1;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   BuyRequest.type_filling = GetFilling();
   MqlTradeResult result;
   run = OrderSend(BuyRequest, result);
}
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
{
   MqlTradeResult result;
   while(PositionsTotal() < 10 &&
         SymbolInfoDouble(_Symbol, SYMBOL_ASK, BuyRequest.price) &&
         OrderSend(BuyRequest, result))
   {}
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_FOK)
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE);
   const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
//+------------------------------------------------------------------+

senzaGetFilling() - non funziona su crypto (((

Ma anche con questo codice si sono aperte 11 posizioni:


 
Igor Makanu:

il codice più breve che ho potuto scrivere su MT5:

Potrei fare SB per brevità.

Ma anche in questo codice ho 11 posizioni aperte:

Perché la logica del codice è questa.

 
fxsaber:

Puoi usare SB per brevità

Perché la logica del codice è questa.

il problema non è risolto con PositionsTotal() anche così:

void OnTrade()
{
   if(PositionsTotal() >= 10) return;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   OrderSend(BuyRequest, result);
}

si apre quando ci sono 10 posizioni, quando ce ne sono addirittura 13

l'unico modo per risolverlo è memorizzare l'ordine del biglietto dal risultato di MqlTradeResult e aspettare la comparsa di una posizione aperta; poi il numero specificato di posizioni sarà aperto

 
Igor Makanu:

PositionsTotal() non è risolto nemmeno in questo modo:

si apre quando ci sono 10 posizioni, quando ce ne sono addirittura 13

non c'è molta scelta, ma ricordare l'ordine del biglietto dal risultato di MqlTradeResult e aspettare la comparsa di una posizione aperta. Allora il numero specificato di posizioni sarà aperto di sicuro

Quindi aspettate!!! Perché mql4 sta aspettando, e tu non te la prendi. E in MQL5 avete deciso che potete semplicemente inviare una richiesta e supporre che debba essere eseguita............

 
Igor Makanu:

PositionsTotal() non è risolto nemmeno in questo modo:

si apre quando ci sono 10 posizioni, quando ce ne sono addirittura 13

non c'è molto da fare se non memorizzare il biglietto d'ordine dal risultato di MqlTradeResult e aspettare le posizioni aperte; poi il numero specificato di posizioni sarà aperto di sicuro

Si prega di notare che questo non è uno script/servizio ma un EA. Ma anche con un EA ci vorrebbe molto sforzo per risolvere un compito così semplice di due righe.

 
Alexey Viktorov:

Quindi aspetta!!! Dopotutto, mql4 aspetta e tu non te la prendi. E in MQL5 avete deciso che potete semplicemente inviare una richiesta e supporre che debba essere eseguita............

Diverse persone hanno affermato qui che non ci sono difficoltà. Tuttavia, non hanno fornito una soluzione.

 
fxsaber:

Diverse persone hanno espresso qui che non ci sono difficoltà. Tuttavia, non hanno fornito una soluzione.

Nemmeno io ne fornirò uno, per la ragione più semplice. Non voglio insegnare ai ...codificatori (non a voi), ma se necessario risolverò il problema senza pensare troppo. E tutto per la stessa ragione per cui da molto tempo i codici appaiono in CodeBase esclusivamente da Tumblr. Tutti gli altri sono silenziosi...

 
Alexey Viktorov:

Non fornirò nessuno dei due, per la ragione più semplice. Non voglio insegnare ai ...codificatori (non vi riguarda), ma se necessario risolverò il problema senza pensare troppo. E tutto per la stessa ragione per cui per molto tempo i codici sono arrivati a CodeBase esclusivamente da Tumblr. Tutti gli altri sono silenziosi...

Parlare con la lingua non è come parlare con un sacco. Dovresti insegnarmi. Io, per favore.

C'è un problema, e non è solo in questo broker.
E il problema non è nell'attesa dell'esecuzione di un ordine specifico (quello è un altro problema), ma nel fatto che quando l'ordine viene eseguito, scompare temporaneamente da tutte le liste (aperto, chiuso, trade, posizioni).

Potremmo usare un'altra stampella, naturalmente. Ma vogliamo trovare una soluzione umana. Ed è su questo che fxsaber sta lavorando pubblicamente, ascoltando i latrati dei benpensanti che passano.

Motivazione: