Spec Match Trade Copier MT5
- Utilitaires
-
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself. - Version: 1.1
- Mise à jour: 30 septembre 2026
- Activations: 10
Un copieur de trades local pour MetaTrader 5. Il copie les positions entre terminaux MT5 sur le même PC Windows ou VPS et dimensionne chaque copie à partir des spécifications de contrat des deux courtiers (taille du contrat, valeur du tick, devise du compte), de sorte qu'une copie porte la même exposition même lorsque les deux courtiers définissent un lot différemment. Il n'ouvre jamais une seconde copie d'une même position du maître.
Ce qu'il fait
Vous attachez le même EA à un graphique dans chaque terminal :
- Dans le terminal maître, réglez le paramètre Mode sur Master.
- Dans chaque terminal récepteur, réglez le paramètre Mode sur Receiver.
Le maître écrit ses positions ouvertes, les spécifications de leurs symboles et un signal de vie (heartbeat) dans un fichier du dossier partagé Common\Files. Chaque récepteur lit ce fichier toutes les 100 ms et aligne ses propres positions sur celles du maître :
- ouvre de nouvelles positions
- modifie le stop loss et le take profit
- clôture partiellement
- clôture
Pas de serveur, pas de connexion réseau, pas de DLL et pas de WebRequest.
Une taille de lot qui suit le contrat, pas le nombre de lots
Les courtiers ne définissent pas « 1 lot » de la même façon. L'or peut être à 100 oz, 10 oz ou 1 oz par lot. Les indices peuvent être à 1, 10 ou 25 unités par point. Un compte cent affiche des montants 100 fois plus grands. Un copieur qui copie le nombre de lots peut ouvrir 100 fois trop ou trop peu.
Ce copieur mesure ce que vaut un lot de chaque côté. Il utilise OrderCalcProfit, qui est le propre calcul de profit du courtier, dans la devise du compte. Il convertit ensuite la valeur côté maître dans la devise du compte du récepteur. La valeur du tick est également vérifiée, et le panneau affiche un avertissement lorsque les deux ne concordent pas.
Une position du maître donne au plus une copie
Le récepteur conserve sur disque une table des copies, une ligne par position du maître :
- Chaque copie porte le commentaire SMC:<master position id>.
- Une requête est écrite dans la table avant d'être envoyée, de sorte qu'un plantage ou un redémarrage au milieu d'un trade ne peut pas entraîner une seconde copie.
- Après un redémarrage, et après une modification des paramètres ou de l'unité de temps du graphique, le récepteur recharge la table. La modification des paramètres avec des copies ouvertes a été testée en direct sur des récepteurs hedging et netting : aucune transaction supplémentaire.
- Si le fichier de la table est perdu sur un récepteur hedging, le récepteur reconstruit la table à partir des commentaires des positions.
- Un récepteur netting ne peut pas reconstruire une table perdue, car une position nette ne peut pas être redécoupée en positions du maître. Il met plutôt en NET_HOLD chaque symbole qui a une copie ouverte (voir « Quand le copieur s'arrête ou passe en HOLD » ci-dessous).
Lorsque quelque chose ne concorde pas, le récepteur arrête de copier et déclenche une alerte. Il ne devine jamais. Exemples :
- deux positions du récepteur portent le même identifiant maître
- une position copiée n'a pas d'identifiant dans son commentaire
- le compte maître change
- le mode de marge du compte change
- le fichier de la table est endommagé
- le volume net d'un compte netting a été modifié à la main
Le panneau indique combien de doublons ont été bloqués.
Les positions copiées ne sont clôturées que sur instruction du maître
Le maître publie un enregistrement de clôture pour chaque position qu'il clôture, tiré de son historique de transactions. Le récepteur ne clôture une copie que lorsqu'il voit cet enregistrement. Une position peut aussi disparaître du fichier du maître sans enregistrement, par exemple parce que le fichier a été endommagé ou que l'historique n'a pas été chargé. Dans ce cas, la copie est mise en HOLD et vous recevez une alerte. Elle n'est pas clôturée.
Le récepteur se met en pause dans chacun des cas suivants, et vos positions restent telles quelles :
- le terminal maître est arrêté
- le processus du terminal maître est tué
- le terminal maître perd sa connexion
- le fichier du maître n'est plus mis à jour (délai du heartbeat dépassé, 3 s par défaut)
Surveillance
Le panneau d'état se trouve sur le graphique du récepteur. Il affiche :
- l'état du maître (ALIVE / SILENT / NOT CONNECTED)
- le nombre de copies actives, clôturées, refusées, en HOLD et filtrées
- l'exposition totale du maître par rapport à celle du récepteur, dans la devise du compte, avec l'écart en %
- le nombre d'ouvertures, de clôtures, de clôtures partielles, de modifications SL/TP et de doublons bloqués
- la dernière action, la dernière erreur et les avertissements
- une ligne par position copiée, jusqu'à 10 lignes, puis une ligne « ... N more »
Chaque action est également écrite dans un journal CSV dans Common\Files\SpecMatchCopier.
Quand le copieur s'arrête ou passe en HOLD
Le copieur ne corrige jamais une incohérence en devinant. Vous corrigez la cause, puis vous le redémarrez.
| Le panneau affiche | Signification | Que faire |
|---|---|---|
| COPYING STOPPED | Le récepteur a trouvé quelque chose qu'il ne peut pas expliquer : deux positions pour un même identifiant maître, une position avec le magic number du copieur mais sans identifiant, un changement de compte maître ou de mode de marge, ou un fichier de table endommagé. La raison est indiquée sur le panneau et dans le journal. Rien n'est copié tant que l'EA n'a pas été redémarré. | Corrigez la cause indiquée par le message, puis retirez l'EA du graphique et attachez-le à nouveau. Si la cause est toujours présente, il s'arrête de nouveau. |
| COPYING STOPPED: master account changed | Le canal transmet désormais un autre compte maître. | Si le changement est voulu : retirez l'EA, clôturez à la main les copies de l'ancien maître, supprimez map_<login>_<magic>.txt dans Common\Files\SpecMatchCopier (login et magic number de ce récepteur), puis attachez à nouveau l'EA. |
| COPYING STOPPED: map file is damaged | La somme de contrôle de la table des copies est invalide. | Hedging : supprimez le fichier de la table et attachez à nouveau l'EA, la table est alors reconstruite à partir des commentaires. Netting : voir NET_HOLD. |
| NET_HOLD (récepteur netting) | Le volume net d'un symbole diffère de ce que le copieur a ouvert, par exemple après un trade manuel ou la perte de la table. Ce symbole n'est plus tradé. Le blocage est enregistré dans la table, si bien qu'un redémarrage ne le supprime pas. | Retirez l'EA. Clôturez à la main les positions du copieur. Supprimez map_<login>_<magic>.txt. Attachez à nouveau l'EA. Il copie alors les positions du maître ouvertes après ce moment. |
| HOLD sur une ligne | Il y a un doute sur une copie. Par exemple, une position du maître a disparu sans enregistrement de clôture. Ou une requête de trading n'a pas été confirmée, par exemple parce que la connexion a été coupée, et aucune position n'est apparue dans les 15 secondes. Si la position apparaît plus tard, elle est rattachée à la ligne en HOLD avec une alerte, et rien n'est envoyé deux fois. Une copie en HOLD reste ouverte, même lorsque le maître a clôturé sa position. | Clôturez ou conservez la copie à la main. Le copieur ne touche plus à une copie en HOLD. |
Modes de lot
| Mode | Volume du récepteur | Tient compte du contrat |
|---|---|---|
| Same exposure (par défaut) | volume du maître x (valeur de 1 lot du maître / valeur de 1 lot du récepteur) x multiplicateur | oui |
| Balance ratio | Same exposure x (solde du récepteur / solde du maître) | oui |
| Equity ratio | Same exposure x (équité du récepteur / équité du maître) | oui |
| Master lot x multiplier | volume du maître x multiplicateur. Un avertissement s'affiche lorsque les contrats diffèrent | non |
| Fixed lot | le lot fixe, pour chaque copie | non |
Dans tous les modes, le volume est ensuite :
- arrondi au pas de volume du récepteur (au plus proche ou vers le bas)
- plafonné par le Max lot optionnel et par le maximum du courtier
- ignoré, ou relevé au minimum, lorsqu'il est inférieur au minimum du courtier (à votre choix)
- vérifié avec OrderCalcMargin par rapport à la marge libre avant l'envoi
Une copie est refusée lorsqu'un lot d'un côté vaut plus de 1 000 fois un lot de l'autre côté. Cette limite est modifiable. Cela indique généralement une mauvaise correspondance de symboles.
Exemple chiffré : l'or, de 100 oz par lot à 1 oz par lot
| Maître (courtier A) | Récepteur (courtier B) | |
|---|---|---|
| Symbole | XAUUSD | XAUUSD.cs (associé automatiquement) |
| Taille du contrat | 100 oz | 1 oz |
| Compte | USD | USD |
| Prix de l'or | 4 178,13 | 4 178,13 |
| Valeur de 1 lot | 100 x 4 178,13 = 417 813 USD | 1 x 4 178,13 = 4 178,13 USD |
Le maître ouvre 0,10 lot, soit 10 oz, d'une valeur de 41 781 USD.
- Same exposure : 0,10 x 417 813 / 4 178,13 = 10,00 lots sur le récepteur, soit 10 oz, d'une valeur de 41 781 USD. Un copieur qui copie le nombre de lots ouvrirait 0,10 lot = 0,1 oz, soit un centième de l'exposition.
- Récepteur cent (devise du compte USC, contrat de 1 oz) : le courtier indique 417 813 USC pour 1 lot, soit 4 178,13 USD après application du facteur cent. Le récepteur reçoit les mêmes 10,00 lots.
- Balance ratio (solde du maître 10 000 USD, solde du récepteur 1 000 USD) : 10,00 x 1 000 / 10 000 = 1,00 lot.
Ces chiffres correspondent aux tests unitaires fournis avec le rapport de test. Le même calcul a aussi tourné en direct : XAGUSD à 5 000 oz par lot sur un compte USD a été copié vers XAGEUR à 1 000 oz par lot sur un compte EUR. 0,10 lot est devenu 0,50 lot.
Correspondance des symboles
Le récepteur cherche le symbole du maître dans cet ordre :
- Correspondance manuelle (XAUUSD=GOLD.x,US30=DJ30). Elle l'emporte toujours et ne se rabat jamais sur une autre méthode.
- Le même nom.
- Le Suffix / Prefix hint (.cs, m, #).
- Le même nom de base une fois retirées les décorations du courtier : XAUUSD.cs, XAUUSDm, #XAUUSD, EURUSD.pro, US500Cash, fxEURUSD et similaires.
- Alias intégrés : GOLD/XAUUSD, SILVER/XAGUSD, US30/DJ30/WS30, NAS100/US100/USTEC, US500/SPX500, GER40/DE40/DAX, UK100, JP225, USOIL/WTI, UKOIL/BRENT, BTCUSD, ETHUSD.
Lorsque deux symboles du récepteur conviennent également, celui qui figure dans l'Observation du Marché est utilisé. Si les deux y figurent, ou aucun des deux, la copie est refusée et le panneau demande une correspondance manuelle. Par exemple, Exness propose US30m (1 unité d'indice par lot) et US30_x10m (10 unités par lot). Les deux conviennent pour le US30 d'un maître ; ajoutez donc celui que vous voulez dans l'Observation du Marché, ou définissez la correspondance. Le lot est converti dans les deux cas.
Les chiffres placés après une paire de devises ne sont pas traités comme une décoration du courtier. Chez Exness, XAUUSD247m (de l'or qui se négocie aussi le week-end) est un produit différent ; le XAUUSD d'un maître est donc copié vers XAUUSDm, jamais vers XAUUSD247m. Définissez la correspondance à la main si vous le voulez vraiment.
Avant la première copie d'un symbole, le récepteur compare les deux prix dans la devise de son compte. La copie est refusée lorsqu'ils diffèrent de plus de 3 %, valeur modifiable. Cela permet de détecter des correspondances comme « GOLD », qui chez certains courtiers est une action d'une société minière aurifère valant environ 40 USD, et non de l'or.
Paramètres
| Paramètre | Par défaut | Signification |
|---|---|---|
| Mode of this terminal | Receiver | Master publie ; Receiver copie |
| Channel | 1 | Relie un maître à ses récepteurs. Utilisez un texte différent pour chaque maître sur le PC |
| Cent account (this terminal) | Auto | Auto traite les devises de compte USC/EUC comme des cents. Choisissez Yes/No si votre courtier utilise un autre code |
| Master scan interval, ms | 200 | Fréquence à laquelle le maître vérifie les changements, en plus des événements de trading |
| Master heartbeat interval, ms | 500 | Fréquence à laquelle le maître réécrit son fichier lorsque rien ne change |
| Lot mode | Same exposure | Voir les modes de lot ci-dessus |
| Fixed lot | 0.01 | Utilisé par le mode Fixed lot |
| Multiplier | 1.0 | S'applique à tous les modes sauf Fixed lot |
| Max lot of one copied position | 0 (désactivé) | Limite supérieure pour une copie |
| Volume rounding | Nearest | Au pas de volume le plus proche, ou vers le bas |
| Volume below the broker minimum | Skip | Ignorer la copie, ou utiliser le volume minimum |
| Refuse if one lot is worth more than x times the other | 1000 | Protège contre les mauvaises correspondances |
| Manual symbol map | vide | Paires MASTER=RECEIVER séparées par des virgules |
| Receiver symbol suffix hint | vide | Par exemple .cs |
| Receiver symbol prefix hint | vide | Par exemple # |
| Refuse a mapping if prices differ by more than, % | 3.0 | 0 désactive le contrôle |
| Copy only these master symbols | vide (tous) | Séparés par des virgules |
| Never copy these master symbols | vide | Séparés par des virgules |
| Copy only these master magic numbers | vide (tous) | Séparés par des virgules |
| Never copy these master magic numbers | vide | Séparés par des virgules |
| Reverse copy | false | L'achat devient une vente ; le stop loss et le take profit sont intervertis |
| Copy stop loss and take profit | true | |
| Copy positions already open at the first start | false | Par défaut, seules les positions ouvertes après le démarrage du récepteur sont copiées |
| Skip if price moved more than, % since master entry | 0.10 | Protège contre les copies tardives après une pause. 0 le désactive |
| Master heartbeat timeout, ms | 3000 | La copie se met en pause lorsque le fichier du maître est plus ancien que cette valeur |
| Hold if a master position vanishes without a close record, s | 30 | |
| Max slippage, points | 20 | Pour les symboles en exécution instantanée |
| Magic number of copied positions | 7310001 | Un seul récepteur par compte et par magic number. Utilisez un autre magic number pour un second récepteur sur le même compte |
| Expected master account | 0 | 0 accepte le premier maître détecté. Sinon, la copie s'arrête si un autre compte apparaît sur le canal |
| Show the status panel | true | |
| Panel X / Y offset, px | 12 / 24 | |
| Popup alerts / Push notifications | true / false | |
| CSV journal | true | Common\Files\SpecMatchCopier\journal_<account>_<magic>.csv |
Installation
- Copiez l'EA dans les deux terminaux. Ils doivent tourner sous le même utilisateur Windows, car Common\Files appartient à l'utilisateur. Utilisez la même version de l'EA dans le terminal maître et dans chaque terminal récepteur : après une mise à jour, mettez-le à jour dans tous les terminaux.
- Dans le terminal maître, attachez l'EA à n'importe quel graphique avec Mode = Master.
- Dans chaque terminal récepteur, attachez l'EA à n'importe quel graphique avec Mode = Receiver et le même Channel.
- Activez le Trading Algo dans les terminaux récepteurs.
- Ouvrez une petite position sur le maître. Le panneau du récepteur affiche la copie et la conversion du lot.
Testeur de Stratégie
Le Testeur de Stratégie n'a pas de second terminal. Dans le testeur, l'EA exécute donc un maître simulé :
- il ouvre, modifie, clôture partiellement et clôture des positions virtuelles toutes les quelques barres, chacune dimensionnée pour perdre environ 1 % du solde à son stop loss et utiliser au plus 10 % du solde en marge
- les positions virtuelles ne sont jamais envoyées sous forme d'ordres
- il copie ces positions virtuelles sur le compte du testeur avec le mode de lot choisi et tous les contrôles préalables au trade
Cela vous permet de voir la logique de copie et la conversion des lots sans second terminal. Ce n'est pas une stratégie de trading, et ses résultats dans le testeur ne disent rien sur le profit.
Limites (à lire avant d'acheter)
- Même PC uniquement : le maître et les récepteurs doivent tourner sur le même PC Windows ou VPS, sous un seul utilisateur Windows. La copie via Internet n'est pas prise en charge.
- Le VPS intégré de MQL5 ne peut pas l'exécuter. Chaque terminal migré dispose de son propre stockage.
- MT5 vers MT5 uniquement. Les ordres en attente ne sont pas copiés ; un ordre en attente est copié une fois exécuté, lorsqu'il devient une position.
- Marchés fermés : lorsque le symbole du récepteur est hors de sa session de trading, rien n'est envoyé. Le copieur attend l'ouverture de la session, puis copie ce qui est encore nécessaire. Une nouvelle position reste soumise à la limite « Skip if price moved ». Une clôture effectuée par le maître pendant que le marché du récepteur était fermé est exécutée à l'ouverture de ce marché, au prix de ce moment-là.
- Vitesse : mesurée sur des comptes démo, la position du récepteur a rejoint celle du maître 0,2 à 1,1 s après le trade du maître (médiane 0,3 s, 60 mesures ; le cas à 1,1 s correspondait à la clôture de 10 positions à la fois sur un compte netting). Cela représente 100 ms d'interrogation plus le temps d'exécution du courtier. Les copies sont exécutées aux propres prix du récepteur et peuvent donc différer des prix du maître, en particulier lors des news.
- Niveaux de stop loss et de take profit :
- Lorsque les deux symboles sont cotés dans la même devise, les niveaux exacts sont copiés.
- Sinon, par exemple de XAGUSD vers XAGEUR, les niveaux sont mis à l'échelle selon le rapport des prix.
- Sur un récepteur netting, les SL/TP ne sont copiés que si toutes les positions du maître sur ce symbole utilisent les mêmes niveaux.
- Les positions que vous clôturez ou réduisez à la main sur le récepteur ne sont plus touchées. Elles ne sont jamais rouvertes.
- Récepteur hors ligne pendant plus de 48 heures : le maître conserve les enregistrements de clôture pendant 48 heures. Une copie dont la position du maître a été clôturée avant ce délai n'est pas clôturée automatiquement. Elle passe en HOLD avec une alerte, et vous la clôturez à la main.
- Niveaux de stop refusés à l'ouverture : lorsque le courtier rejette le stop loss ou le take profit d'une nouvelle copie (stops invalides, par exemple un niveau des stops élargi lors des news), la copie est refusée et n'est pas retentée. Le panneau l'affiche comme REFUSED.
- Copies plafonnées : lorsqu'une copie est limitée par Max lot ou par le volume maximum du courtier, une clôture partielle sur le maître ne réduit la copie que lorsque le nouveau volume mis à l'échelle est inférieur au volume ouvert. D'ici là, la copie reste au plafond.
- Pas de gestion du risque : le copieur ne limite ni le drawdown ni la perte journalière et ne gère pas de comptes. Il copie ce que fait le maître.
- Même version partout : le maître et les récepteurs mesurent la valeur d'un lot avec le même code. Exécutez la même version de l'EA dans tous les terminaux. Par exemple, un maître en v1.00 avec un récepteur en v1.01 conserve l'arrondi au cent de la v1.00 pour les CFD sur actions et les autres contrats de faible valeur par lot.
- Fonds insuffisants chez le courtier : lorsque le courtier rejette une nouvelle copie pour une question de marge, la copie est refusée et n'est pas retentée. Certains courtiers exigent plus de marge que ce qu'indique le propre calcul de marge de MetaTrader ; c'était le cas de la démo Exness utilisée dans les tests.
- Environnement testé :
- Testé en direct avec des comptes MetaQuotes-Demo : maître USD, récepteur EUR hedging, récepteur USD netting.
- Le maître a aussi été testé sur un compte USD netting, avec des ajouts, un retournement par une seule transaction, une clôture partielle et une clôture complète.
- Testé en direct entre deux courtiers, MetaQuotes-Demo et une démo Exness Standard (USD, hedging, symboles avec le suffixe « m »), dans les deux sens :
- De MetaQuotes-Demo vers Exness, association automatique : XAUUSD vers XAUUSDm, XAGUSD vers XAGUSDm, EURUSD vers EURUSDm. Testé avec ouverture avec SL/TP, modification du SL, clôture partielle, redémarrage du récepteur, modification des paramètres et clôture.
- D'Exness vers un compte MetaQuotes-Demo en EUR, association automatique : XAUUSDm vers XAUUSD, XAGUSDm vers XAGUSD, EURUSDm vers EURUSD. Testé avec ouverture, modification du SL, clôture partielle et clôture. Le CFD sur action BACm (100 actions par lot) a été copié vers BAC (1 action par lot) : 0,10 lot est devenu 10.
- Tailles de contrat différentes au sein d'Exness, avec une correspondance manuelle : US30m vers US30_x10m (0,30 lot est devenu 0,03), USTECm vers USTEC_x100m et US500m vers US500_x100m (1,00 lot est devenu 0,01), et BTCUSDm vers BTCUSDTm.
- À chaque essai : 0 doublon, et un écart d'exposition de 0,00 % à 0,01 % sur le panneau. Les mauvaises correspondances ont été refusées par le contrôle de prix. Les correspondances ambiguës ont été refusées jusqu'à ce qu'un symbole soit dans l'Observation du Marché.
- L'or à 1 oz et les comptes cent sont couverts par des tests unitaires avec des spécifications de courtier synthétiques, et non par des comptes en direct. Aucun des deux courtiers ne les proposait en démo.
- Veuillez tester avec vos courtiers sur des comptes démo avant de copier de l'argent réel.
