Discussion de l'article "Utiliser MetaTrader 5 comme fournisseur de signaux pour MetaTrader 4"

 

Un nouvel article Utiliser MetaTrader 5 comme fournisseur de signaux pour MetaTrader 4 a été publié :

Analyse et exemples de techniques permettant de réaliser des analyses de trading sur la plateforme MetaTrader 5, mais exécutées par MetaTrader 4. L'article vous montrera comment créer un simple fournisseur de signaux dans votre MetaTrader 5, et vous y connecter avec plusieurs clients, même avec MetaTrader 4. Vous découvrirez également comment suivre les participants au championnat de trading automatisé dans votre compte réel MetaTrader 4.

Si nous sommes sur le point de transférer des informations de MetaTrader 5 vers MetaTrader 4, nous devons prendre en considération tous les types d'ordres possibles dans MetaTrader 4. De même, lorsque nous suivons, nous voulons connaître toutes les actions effectuées sur le compte en rapport avec le trading. Par conséquent, les « Positions » ne nous fourniront pas d'informations complètes à moins que nous ne comparions le statut des « Positions » à chaque tick ou seconde.

Par conséquent, il serait préférable de suivre les « Ordres » ou les « Offres ».

J'ai commencé à regarder les ordres :

Ordres

J'ai apprécié qu'ils soient exécutés avant que « Offres » ne soit et qu'ils contiennent également des informations sur les ordres en attente (limites), mais il leur manque une chose importante par rapport aux "« Offres » - le type d'entrée (ENUM_DEAL_ENTRY) :

Offres

DEAL_ENTRY_TYPE permet de comprendre ce qui s'est passé sur le compte des traders, tandis que les « Ordres » nécessitent un calcul en parallèle. Le mieux serait de fusionner « Offres » avec « Ordres », alors nous pourrions avoir des ordres en attente et suivre également chaque action dans le compte de trading. Étant donné que les mouvements de prix diffèrent d'une société de courtage à l'autre, les ordres en attente peuvent en fait entraîner des erreurs et des résultats incorrects.

Si nous suivons uniquement les « Offres », nous exécuterons toujours les ordres en attente, mais avec un petit retard (jusqu'à la connexion réseau). Entre rapidité (ordres en attente) et performances (offres), j'ai choisi d'opter pour la performance (« Offre »).

Auteur : Karlis Balcers

 

Petites mises à jour pour DealClient :

- Si plusieurs ordres sont ouverts et qu'une demande de fermeture est faite, le client fermera d'abord les ordres avec profit ;

- Une meilleure gestion des erreurs a été ajoutée pour résoudre les problèmes lorsque les ordres n'étaient pas ouverts en raison d'une mauvaise connexion. Une nouvelle fonction a été ajoutée pour vérifier si la retransmission est nécessaire :

//+------------------------------------------------------------------+
//| Vérifier si un nouvel essai résoudra le problème |
//+------------------------------------------------------------------+
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

Dossiers :
 

Code DealClient mis à jour : tsaktuodealclient.mq4 (voir commentaire)

 

J'obtiens l'erreur socketserver.dll n'est pas une version 64 bits. Pouvez-vous me la fournir ?

 
939211:

J'obtiens l'erreur socketserver.dll n'est pas une version 64 bits. Pouvez-vous me la fournir ?

Cela devrait être le cas.
Dossiers :
 
Merci beaucoup pour le code et la dll fournis. J'essaie d'écrire une partie serveur pour mql4. Le fragment de code où la conversion des citations a lieu m'a mis hors service, mais je n'abandonnerai pas si facilement :)
 

J'essaie de ne pas transmettre de signaux, mais au moins le prix. Le terminal client montre dans le protocole qu'une chaîne avec des points d'interrogation a été reçue :

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

Comment puis-je corriger cette erreur ? J'envoie la chaîne de caractères : <EURUSD;1.30675;1.30667>

 

Bonjour,

Je suis en train d'exécuter l'EA serveur et le script client et ils communiquent entre eux, mais j'obtiens le type d'erreur suivant dans le journal MT4 et j'ai besoin d'aide pour le corriger.

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 : Ordre invalide reçu : "4444EEEESSSSEEEEIIII....11110000"

Des idées ?

 

J'ai mis à jour MT4 avec la version 416 sans aucun changement.

Voici également ce que j'obtiens lors de la compilation du script dans MT4

Compilation de 'TsaktuoDealClient.mq4'...
La fonction "struct2int" n'est pas référencée et sera supprimée du fichier exp
La fonction "str2struct" n'est pas référencée et sera supprimée du fichier exp
La fonction "htonl" n'est pas référencée et sera supprimée du fichier exp
La fonction "ntohl" n'est pas référencée et sera supprimée du fichier exp
La fonction "ntohs" n'est pas référencée et sera supprimée du fichier exp
0 erreur(s), 5 avertissement(s)

Quelqu'un sait-il ce qui se passe ?

 
Le script peut être corrigé afin d'exécuter les micro-suffixes. Par exemple, le mt5 est EURUSD et le mt4 est EURUSDm. Merci.
 

Je l'ai utilisé pendant 1 semaine, il y a eu 2 erreurs, donc je l'ai abandonné.