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

 
PapaYozh:
No.
Il risultato non è garantito.

Se ci sono abbastanza penny, è garantito

 
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.


Chi ha una soluzione su MT5?

È possibile una performance parziale?
 
SanAlex:

Se ci sono abbastanza penny, è garantito.

Non avete tenuto conto delle prestazioni parziali, e quando lo farete, dovrete tenere conto del doppio conteggio

 
Alexey Viktorov:
È possibile un'esecuzione parziale?

Supponiamo che non ci sia un'esecuzione parziale. Tuttavia, mentre lo script è in esecuzione, qualcuno potrebbe accidentalmente cliccare sulla croce nella tabella delle posizioni, chiudendo una o poche posizioni. Tuttavia, ci dovrebbero essere ancora esattamente 100 posizioni alla fine dell'esecuzione dello script.


La versione MT4 è incredibilmente semplice. Ecco perché ho scritto in questo thread.

 
fxsaber:

Chi ha una soluzione su MT5?

Non c'è modo senza un sincronizzatore.

Ci potrebbero essere riquotazioni elementari o perdite di connettività nel processo, 100 ordini non sempre produrranno 100 compravendite.

 
Andrey Khatimlianskii:

Non c'è modo senza un sincronizzatore.

Ci possono essere riquotazioni elementari o perdite di comunicazione nel processo, 100 ordini non risulteranno sempre in 100 compravendite.

Il sincronizzatore assicura solo che i valori PositionsTotal e OrdersTotal non mentano. È proprio perché mentono nel tempo che abbiamo i doppi conteggi.

In linea di principio, il sincronizzatore è una linea singola. E se non si guarda al suo meccanismo, l'implementazione è semplice.


Tuttavia, anche con il sincronizzatore, tutto è estremamente complicato. Si può usare una tale condizione:

while (OrdersTotal() + PositionsTotal < 100)

Tuttavia, questa condizione sarà una rottura totale se qualcuno fa quanto segue.

fxsaber:

Supponiamo che non ci sia un'esecuzione parziale. Tuttavia, mentre lo script è in esecuzione, qualcuno potrebbe accidentalmente cliccare su una croce nella tabella delle posizioni, chiudendone una o più. Tuttavia, alla fine dell'esecuzione dello script ci dovrebbero essere ancora esattamente 100 posizioni.


Cioè un compito elementare, che si risolve in due righe in MT4, non è facilmente risolvibile in MT5. Ecco perché MT4-style+Synchronizer regna in MT5. A causa di questo non capisco bene come altri EAs possano essere scritti in MT5, di cui ci sono così tanti nel mercato.

 
fxsaber:

Il sincronizzatore assicura solo che i valori PositionsTotal e OrdersTotal non mentano. È proprio perché sono temporaneamente falsi che risultano in voci doppie.

In linea di principio, il sincronizzatore è una linea singola. E se non si entra nel suo meccanismo, l'implementazione è semplice.


Tuttavia, anche con il sincronizzatore, tutto è estremamente complicato. Si può usare una tale condizione:

Tuttavia, questa condizione sarà una rottura totale se qualcuno fa quanto segue.


Cioè, un problema elementare, che si risolve in due righe in MT4, non si risolve facilmente in MT5. Ecco perché MT4-style+Synchronizer regna in MT5. A causa di questo non capisco come altri EAs possano essere scritti in MT5, di cui ci sono così tanti nel mercato.

In MT5 tutto è risolto allo stesso modo che in MT4 e spesso è molto più facile, perché il linguaggio e l'API sono molto più ricchi. Più precisamente, i linguaggi sono quasi gli stessi, qui Metacquotes ha fatto un grande lavoro di compatibilità, ma le API sono abbastanza diverse. Renat (direttore di Metakvotes) una volta ha detto sul forum che MT4 è morto e non sarà sviluppato. Ma a quanto pare gli interessi commerciali erano più importanti e tuttavia gli aggiornamenti stanno uscendo. Ma per lo più sono correzioni di bug e nuove caratteristiche di MKL 5. Così gli sviluppatori ben fatto, mi tolgo il cappello, che non lo faccio)).

E in generale, non capisco i lamenti di alcuni compagni, come difficile passare a MKL5. No non ci sono difficoltà, bene un'altra API, quindi ci sono fonti dettagliate, preferisco imparare da loro. Chi non ha ancora abbastanza conoscenze, è benvenuto per aiutare, è breve ma chiaro. In ogni caso il quinto è più veloce del quarto almeno 10 volte, e in modalità di ottimizzazione in generale utilizza tutti i core della CPU consentiti e con una moderna scheda video batte il quarto in centinaia di volte. Quindi non c'è bisogno di scrivere canzoni tristi. ))

 
Andrei Trukhanovich:

non hai preso in considerazione le prestazioni parziali, e quando lo fai, devi prendere in considerazione anche l'overrun

e neanche questo è giusto? - Anche se non capisco cosa si voglia da questa funzione - ma fa il suo lavoro al 100%!!!

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits = 3;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots   = 0.01; // Lots
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double sl=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      //if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
 
fxsaber:

Supponiamo che non ci sia un'esecuzione parziale. Tuttavia, mentre lo script è in esecuzione, qualcuno potrebbe accidentalmente cliccare sulla croce nella tabella delle posizioni, chiudendo una o poche posizioni. Tuttavia, ci dovrebbero essere ancora esattamente 100 posizioni alla fine dell'esecuzione dello script.


La variante MT4 è follemente semplice. Ecco perché ho scritto in questo thread.

Quindi, per MQL5 si impostano condizioni tali che qualcuno possa giocare, mentre per MQL4 no? E se mi connetto al conto da un altro computer e piazzo un paio di pips... cosa aprirà MQL4?

Vuoi rovinare tutto senza nessun controllo? Stai sostenendo la permissività nella programmazione, o stai solo cercando di diffamare MQL5 per gli interessi egoistici di qualcuno?

Scrivere lo stesso in mql4 con controlli e a prova di errore.

 
Alexey Viktorov:

Quindi per MQL5 si impostano tali condizioni che qualcuno può pasticciare, ma non per MQL4? Cosa succede se mi collego al mio conto da un altro computer e piazzo un paio di pips... cosa aprirà MQL4?

I termini e le condizioni di MT4 e MT5 sono gli stessi.

Vuoi rovinare tutto senza fare alcun controllo? Stai sostenendo il permissivismo nella programmazione, o stai solo cercando di derogare MQL5 per gli interessi egoistici di qualcuno?

Se non sapete come farlo, dovrete mostrare gli stessi problemi con mql4 con i controlli e la protezione anti-frode.

Faccio tutto solo su MT5. Sto solo dicendo che MT5 non è più complicato di MT4. È MOLTO più complicato di così! Solo questa settimana c'è una soluzione di inversione di posizione, e non funziona al 100%.

Per tanti anni tutti sapevano del backtesting, arrivando a... Dormire. Perché è MOLTO complicato. Molte peculiarità dell'API di trading, che sono state sollevate sul forum, gli sviluppatori non ne sono a conoscenza, o non hanno dato i loro commenti.


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

Motivazione: