Discussione sull’articolo "Utilizzo di MetaTrader 5 come Fornitore di segnali per MetaTrader 4"

 

Il nuovo articolo Utilizzo di MetaTrader 5 come Fornitore di segnali per MetaTrader 4 è stato pubblicato:

Analizza gli esempi di tecniche su come l'analisi del trading può essere eseguita sulla piattaforma MetaTrader 5 e MetaTrader 4. L'articolo ti mostrerà come creare un semplice fornitore di segnali nel tuo MetaTrader 5 e connetterti ad esso con più client, anche eseguendo MetaTrader 4. Inoltre scoprirai come puoi seguire i partecipanti all’Automated Trading Championship nel tuo vero conto MetaTrader 4.

Se stiamo per trasferire informazioni da MetaTrader 5 a MetaTrader 4, allora dobbiamo prendere in considerazione tutti i tipi di ordine che sono possibili su MetaTrader 4. Inoltre, quando seguiamo, vogliamo sapere di ogni azione eseguita nel conto relativo al trading, quindi "Posizioni" non ci fornirà informazioni complete a meno che non confrontiamo lo stato di "Posizioni" su ogni tick o secondo.

Pertanto, sarebbe meglio seguire "Ordini" o "Operazioni".

Ho iniziato a guardare gli ordini:

Ordini

Mi è piaciuto il fatto che vengano eseguiti prima delle "Operazioni" e contengono anche informazioni sugli ordini in sospeso (limite), ma mancano di una cosa importante rispetto alle "Operazioni" - tipo di voce (ENUM_DEAL_ENTRY):

Operazioni

DEAL_ENTRY_TYPE aiuta a capire cosa è successo nel conto dei trader mentre gli "Ordini" richiedono il calcolo in parallelo. La cosa migliore sarebbe unire "Operazioni" con "Ordini", quindi potremmo avere ordini in sospeso e anche seguire ogni azione nel conto di trading. Poiché i movimenti dei prezzi differiscono tra le diverse società di broker, gli ordini in sospeso potrebbero effettivamente portare a errori e risultati errati.

Nel caso in cui seguiamo solo le "Operazioni", eseguiremo comunque gli ordini in sospeso, ma con un piccolo ritardo (fino alla connessione di rete). Tra velocità (ordini in sospeso) e le prestazioni (operazioni) ho scelto di andare per prestazioni ("operazioni").

Autore: Karlis Balcers

 

Piccoli aggiornamenti per DealClient:

- Se sono aperti più ordini e viene richiesta la chiusura, il client chiuderà prima gli ordini con profitto;

- Aggiunta di una migliore gestione degli errori per risolvere i problemi di mancata apertura degli ordini a causa di una cattiva connessione. È stata aggiunta una nuova funzione per verificare se è necessaria una ritrasmissione:

//+------------------------------------------------------------------+
//| Verificare se un altro tentativo risolverà il problema |
//+------------------------------------------------------------------+
bool bCanRetryFixTheProblem(int error)
{
   switch(error)
   {
      case ERR_NO_ERROR:
      case ERR_NO_RESULT:
      case ERR_COMMON_ERROR:
      case ERR_SERVER_BUSY:
      case ERR_NO_CONNECTION:
      case ERR_TRADE_TIMEOUT:
      case ERR_INVALID_PRICE:
      case ERR_PRICE_CHANGED:
      case ERR_OFF_QUOTES:
      case ERR_BROKER_BUSY:
      case ERR_REQUOTE:
      case ERR_TOO_MANY_REQUESTS:
      case ERR_TRADE_CONTEXT_BUSY:
         return(true);
      default:
         return(false);
   }
}

/tsaktuo

File:
 

Codice DealClient aggiornato: tsaktuodealclient.mq4 (vedi commento)

 

Ho ricevuto l'errore socketserver.dll non è la versione a 64 bit. Siete in grado di fornire?

 
939211:

Ottimo lavoro!!! Ricevo l'errore socketserver.dll non è la versione a 64 bit. Sei in grado di fornire?

Dovrebbe essere questa.
File:
 
Grazie mille per il codice e la dll forniti. Sto cercando di scrivere una parte server per mql4. Il frammento di codice in cui avviene la conversione delle virgolette mi ha messo fuori gioco, ma non mi arrenderò così facilmente :)
 

Cerco di non trasmettere segnali, ma almeno il prezzo. Il terminale client mostra nel protocollo che è stata ricevuta una stringa con punti interrogativi:

2011.12.28 16:34:54 Client EURUSD,M15: Ricevuto(20): ????????????????8???

Come posso risolvere questo errore? Ho inviato la stringa: <EURUSD;1.30675;1.30667>

 

Ciao,

Sto eseguendo l'EA server e lo script client e stanno comunicando tra loro, ma ricevo il seguente tipo di errore nel log di MT4 e ho bisogno di aiuto per risolverlo.

MT5 (Build 597) log:
2012.03.08 01:17:55 TsaktuoDealServer(EURUSD,H1) DEAL:<955492;EURUSD;SELL;IN;0.01;1.31080>


MT4 (Build 409) log:
2012.03.08 01:17:55 TsaktuoDealClient EURUSD,H1: Ordine non valido ricevuto: "4444EEEESSSSEEEEIIII....11110000"

Qualche idea?

 

Ho aggiornato la MT4 alla build 416 senza alcun cambiamento.

Inoltre, questo è ciò che ottengo quando compilo lo script in MT4

Compilazione di 'TsaktuoDealClient.mq4'...
La funzione "struct2int" non è referenziata e sarà rimossa dal file exp
La funzione "str2struct" non è referenziata e sarà rimossa dal file exp
La funzione "htonl" non è referenziata e sarà rimossa dal file exp
La funzione "ntohl" non ha riferimenti e verrà rimossa dal file exp
La funzione "ntohs" non ha riferimenti e verrà rimossa dal file exp
0 errori, 5 avvisi

Qualcuno sa cosa sta succedendo?

 
qualcuno può aggiustare lo script per eseguire i micro suffissi? per esempio l'mt5 è EURUSD e l'mt4 è EURUSDm. grazie
 

Lo uso per 1 settimana, ci sono 2 errori, quindi lo abbandono.