Spec Match Trade Copier MT5
- Utilità
-
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. - Versione: 1.1
- Aggiornato: 30 settembre 2026
- Attivazioni: 10
Un trade copier locale per MetaTrader 5. Copia le posizioni tra terminali MT5 sullo stesso PC Windows o VPS e dimensiona ogni copia in base alle specifiche di contratto di entrambi i broker (dimensione del contratto, valore del tick, valuta del conto), così una copia ha la stessa esposizione anche quando i due broker definiscono il lotto in modo diverso. Non apre mai una seconda copia della stessa posizione master.
Cosa fa
Colleghi lo stesso EA a un grafico in ogni terminale:
- Nel terminale master, imposta il parametro Mode su Master.
- In ogni terminale ricevente, imposta il parametro Mode su Receiver.
Il master scrive le sue posizioni aperte, le specifiche dei relativi simboli e un heartbeat in un file nella cartella condivisa Common\Files. Ogni ricevente legge quel file ogni 100 ms e allinea le proprie posizioni a quelle del master:
- apre nuove posizioni
- modifica stop loss e take profit
- chiude parzialmente
- chiude
Nessun server, nessuna connessione di rete, nessuna DLL e nessun WebRequest.
Dimensione del lotto basata sul contratto, non sul numero di lotti
I broker definiscono "1 lotto" in modo diverso. L'oro può essere 100 oz, 10 oz o 1 oz per lotto. Gli indici possono valere 1, 10 o 25 unità per punto. Un conto cent mostra gli importi moltiplicati per 100. Un copier che copia il numero di lotti può aprire 100 volte troppo o troppo poco.
Questo copier misura quanto vale un lotto su ciascun lato. Usa OrderCalcProfit, cioè il calcolo del profitto del broker stesso, nella valuta del conto. Poi converte il valore del master nella valuta del conto del ricevente. Viene verificato anche il valore del tick e il pannello mostra un avviso quando i due non concordano.
Una posizione master dà al massimo una copia
Il ricevente tiene su disco una mappa delle copie, una riga per ogni posizione master:
- Ogni copia porta il commento SMC:<master position id>.
- Una richiesta viene scritta nella mappa prima di essere inviata, quindi un crash o un riavvio a metà di un trade non può portare a una seconda copia.
- Dopo un riavvio, e dopo che hai modificato i parametri di input o il timeframe del grafico, il ricevente ricarica la mappa. La modifica dei parametri di input con copie aperte è stata testata live su riceventi hedging e netting: nessun deal in più.
- Se il file della mappa va perso su un ricevente hedging, il ricevente ricostruisce la mappa dai commenti delle posizioni.
- Un ricevente netting non può ricostruire una mappa persa, perché una posizione netta non può essere suddivisa di nuovo nelle posizioni master. Mette invece in NET_HOLD ogni simbolo che ha una copia aperta (vedi "Quando il copier si ferma o va in attesa" più sotto).
Quando qualcosa non torna, il ricevente smette di copiare e genera un alert. Non tira mai a indovinare. Esempi:
- due posizioni del ricevente portano lo stesso id master
- una posizione copiata non ha l'id nel commento
- il conto master cambia
- cambia la modalità di margine del conto
- il file della mappa è danneggiato
- il volume netto di un conto netting è stato modificato manualmente
Il pannello mostra quanti duplicati sono stati bloccati.
Le posizioni copiate vengono chiuse solo su istruzione del master
Il master pubblica un record di chiusura per ogni posizione che chiude, preso dal suo storico dei deal. Il ricevente chiude una copia solo quando vede quel record. Una posizione può anche sparire dal file del master senza un record, per esempio perché il file era danneggiato o lo storico non era stato caricato. In quel caso la copia viene messa in HOLD e ricevi un alert. Non viene chiusa.
Il ricevente va in pausa quando si verifica uno qualsiasi di questi casi, e le tue posizioni restano come sono:
- il terminale master viene chiuso
- il processo del terminale master viene terminato forzatamente
- il terminale master perde la connessione
- il file del master smette di aggiornarsi (timeout dell'heartbeat, predefinito 3 s)
Monitoraggio
Il pannello di stato si trova sul grafico del ricevente. Mostra:
- stato del master (ALIVE / SILENT / NOT CONNECTED)
- numero di copie attive, chiuse, rifiutate, in hold e filtrate
- esposizione totale del master rispetto al ricevente, nella valuta del conto, con la differenza in %
- conteggi di aperture, chiusure, chiusure parziali, modifiche SL/TP e duplicati bloccati
- l'ultima azione, l'ultimo errore e gli avvisi
- una riga per ogni posizione copiata, fino a 10 righe, poi una riga "... N more"
Ogni azione viene anche scritta in un diario CSV in Common\Files\SpecMatchCopier.
Quando il copier si ferma o va in attesa
Il copier non corregge mai un'incoerenza tirando a indovinare. Sei tu a eliminare la causa, poi lo riavvii.
| Il pannello mostra | Cosa significa | Cosa fare |
|---|---|---|
| COPYING STOPPED | Il ricevente ha trovato qualcosa che non sa spiegare: due posizioni per un solo id master, una posizione con il magic del copier ma senza id, un conto master o una modalità di margine cambiati, oppure un file della mappa danneggiato. Il motivo è indicato sul pannello e nel diario. Nulla viene copiato finché l'EA non viene riavviato. | Elimina la causa indicata dal messaggio, poi rimuovi l'EA dal grafico e collegalo di nuovo. Se la causa è ancora presente, si ferma di nuovo. |
| COPYING STOPPED: master account changed | Sul canale ora c'è un altro conto master. | Se il cambio è voluto: rimuovi l'EA, chiudi manualmente le copie del vecchio master, elimina map_<login>_<magic>.txt in Common\Files\SpecMatchCopier (login e magic di questo ricevente) e collega di nuovo l'EA. |
| COPYING STOPPED: map file is damaged | La mappa delle copie non ha superato il controllo del checksum. | Hedging: elimina il file della mappa e collega di nuovo l'EA; la mappa viene ricostruita dai commenti. Netting: vedi NET_HOLD. |
| NET_HOLD (ricevente netting) | Il volume netto di un simbolo differisce da quello aperto dal copier, per esempio dopo un trade manuale o la perdita della mappa. Su quel simbolo non si opera più. Lo stato di hold è salvato nella mappa, quindi un riavvio non lo annulla. | Rimuovi l'EA. Chiudi manualmente le posizioni del copier. Elimina map_<login>_<magic>.txt. Collega di nuovo l'EA. Da quel momento copia le posizioni master aperte successivamente. |
| HOLD su una riga | Una copia è in dubbio. Per esempio, una posizione master è sparita senza un record di chiusura. Oppure una richiesta di trading non è stata confermata, per esempio perché la connessione è caduta, e nessuna posizione è comparsa entro 15 secondi. Se la posizione compare più tardi, viene associata alla riga in hold con un alert e nulla viene inviato due volte. Una copia in hold resta aperta, anche quando il master ha chiuso la sua posizione. | Chiudi o mantieni la copia manualmente. Il copier non tocca più una copia in hold. |
Modalità di lotto
| Modalità | Volume del ricevente | Tiene conto del contratto |
|---|---|---|
| Same exposure (predefinita) | volume del master x (valore di 1 lotto master / valore di 1 lotto del ricevente) x moltiplicatore | sì |
| Balance ratio | volume Same exposure x (saldo del ricevente / saldo del master) | sì |
| Equity ratio | volume Same exposure x (equity del ricevente / equity del master) | sì |
| Master lot x multiplier | volume del master x moltiplicatore. Viene mostrato un avviso quando i contratti differiscono | no |
| Fixed lot | il lotto fisso, per ogni copia | no |
In ogni modalità il volume viene poi:
- arrotondato allo step di volume del ricevente (al più vicino o per difetto)
- limitato dal Max lot opzionale e dal massimo del broker
- saltato, oppure portato al minimo, quando è inferiore al minimo del broker (a tua scelta)
- verificato con OrderCalcMargin rispetto al margine libero prima dell'invio
Una copia viene rifiutata quando un lotto su un lato vale più di 1000 volte un lotto sull'altro lato. Questo limite è modificabile. Di solito indica una mappatura dei simboli errata.
Esempio pratico: oro, da 100 oz per lotto a 1 oz per lotto
| Master (broker A) | Ricevente (broker B) | |
|---|---|---|
| Simbolo | XAUUSD | XAUUSD.cs (associato automaticamente) |
| Dimensione del contratto | 100 oz | 1 oz |
| Conto | USD | USD |
| Prezzo dell'oro | 4.178,13 | 4.178,13 |
| Valore di 1 lotto | 100 x 4.178,13 = 417.813 USD | 1 x 4.178,13 = 4.178,13 USD |
Il master apre 0,10 lotti, cioè 10 oz, per un valore di 41.781 USD.
- Same exposure: 0,10 x 417.813 / 4.178,13 = 10,00 lotti sul ricevente, cioè 10 oz, per un valore di 41.781 USD. Un copier che copia il numero di lotti aprirebbe 0,10 lotti = 0,1 oz, un centesimo dell'esposizione.
- Ricevente con conto cent (valuta del conto USC, contratto da 1 oz): il broker indica 417.813 USC per 1 lotto, cioè 4.178,13 USD dopo il fattore cent. Il ricevente ottiene gli stessi 10,00 lotti.
- Balance ratio (saldo del master 10.000 USD, saldo del ricevente 1.000 USD): 10,00 x 1.000 / 10.000 = 1,00 lotto.
Questi numeri sono gli unit test forniti con il report dei test. Lo stesso calcolo è stato eseguito anche live: XAGUSD con 5.000 oz per lotto su un conto USD è stato copiato su XAGEUR con 1.000 oz per lotto su un conto EUR. 0,10 lotti sono diventati 0,50 lotti.
Associazione dei simboli
Il ricevente trova il simbolo del master in quest'ordine:
- Mappa manuale (XAUUSD=GOLD.x,US30=DJ30). Ha sempre la precedenza e non ripiega mai su altri metodi.
- Lo stesso nome.
- L'indicazione Suffix / Prefix (.cs, m, #).
- Lo stesso nome di base dopo aver rimosso le decorazioni del broker: XAUUSD.cs, XAUUSDm, #XAUUSD, EURUSD.pro, US500Cash, fxEURUSD e simili.
- Alias integrati: GOLD/XAUUSD, SILVER/XAGUSD, US30/DJ30/WS30, NAS100/US100/USTEC, US500/SPX500, GER40/DE40/DAX, UK100, JP225, USOIL/WTI, UKOIL/BRENT, BTCUSD, ETHUSD.
Quando due simboli del ricevente corrispondono allo stesso modo, viene usato quello presente nell'Osservatorio del mercato (Market Watch). Se sono entrambi nell'Osservatorio del mercato, o se non c'è nessuno dei due, la copia viene rifiutata e il pannello chiede una mappa manuale. Per esempio, Exness offre US30m (1 unità di indice per lotto) e US30_x10m (10 unità per lotto). Entrambi corrispondono a US30 del master, quindi aggiungi all'Osservatorio del mercato quello che vuoi oppure mappalo. In entrambi i casi il lotto viene convertito.
Le cifre dopo una coppia di valute non sono trattate come decorazione del broker. XAUUSD247m di Exness (oro negoziabile anche nel fine settimana) è un prodotto diverso, quindi XAUUSD del master viene copiato su XAUUSDm, mai su XAUUSD247m. Mappalo manualmente se lo vuoi davvero.
Prima di copiare per la prima volta un simbolo, il ricevente confronta entrambi i prezzi nella valuta del proprio conto. La copia viene rifiutata quando differiscono di più del 3%, soglia modificabile. Questo intercetta mappature come "GOLD", che presso alcuni broker è un'azione di una società mineraria aurifera del valore di circa 40 USD, non l'oro.
Parametri di input
| Parametro | Predefinito | Significato |
|---|---|---|
| Mode of this terminal | Receiver | Master pubblica; Receiver copia |
| Channel | 1 | Collega un master ai suoi riceventi. Usa un testo diverso per ogni master sul PC |
| Cent account (this terminal) | Auto | Auto considera cent le valute del conto USC/EUC. Imposta Yes/No se il tuo broker usa un altro codice |
| Master scan interval, ms | 200 | Ogni quanto il master controlla se ci sono modifiche, oltre agli eventi di trading |
| Master heartbeat interval, ms | 500 | Ogni quanto il master riscrive il suo file quando non cambia nulla |
| Lot mode | Same exposure | Vedi le modalità di lotto sopra |
| Fixed lot | 0.01 | Usato dalla modalità Fixed lot |
| Multiplier | 1.0 | Si applica a tutte le modalità tranne Fixed lot |
| Max lot of one copied position | 0 (disattivato) | Limite massimo per una copia |
| Volume rounding | Nearest | Step di volume più vicino o per difetto |
| Volume below the broker minimum | Skip | Salta la copia oppure usa il volume minimo |
| Refuse if one lot is worth more than x times the other | 1000 | Protegge da mappature errate |
| Manual symbol map | vuoto | Coppie MASTER=RECEIVER separate da virgole |
| Receiver symbol suffix hint | vuoto | Per esempio .cs |
| Receiver symbol prefix hint | vuoto | Per esempio # |
| Refuse a mapping if prices differ by more than, % | 3.0 | 0 disattiva il controllo |
| Copy only these master symbols | vuoto (tutti) | Separati da virgole |
| Never copy these master symbols | vuoto | Separati da virgole |
| Copy only these master magic numbers | vuoto (tutti) | Separati da virgole |
| Never copy these master magic numbers | vuoto | Separati da virgole |
| Reverse copy | false | L'acquisto diventa vendita; stop loss e take profit si scambiano di posto |
| Copy stop loss and take profit | true | |
| Copy positions already open at the first start | false | Per impostazione predefinita vengono copiate solo le posizioni aperte dopo l'avvio del ricevente |
| Skip if price moved more than, % since master entry | 0.10 | Protegge da copie in ritardo dopo una pausa. 0 lo disattiva |
| Master heartbeat timeout, ms | 3000 | La copia va in pausa quando il file del master è più vecchio di questo valore |
| Hold if a master position vanishes without a close record, s | 30 | |
| Max slippage, points | 20 | Per i simboli con esecuzione istantanea |
| Magic number of copied positions | 7310001 | Un ricevente per conto e magic. Usa un altro magic per un secondo ricevente sullo stesso conto |
| Expected master account | 0 | 0 accetta il primo master rilevato. Altrimenti la copia si ferma se sul canale compare un altro conto |
| 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 |
Configurazione
- Copia l'EA in entrambi i terminali. Devono essere eseguiti con lo stesso utente Windows, perché Common\Files appartiene all'utente. Usa la stessa versione dell'EA nel terminale master e in ogni terminale ricevente: dopo un aggiornamento, aggiornalo in tutti.
- Nel terminale master, collega l'EA a un grafico qualsiasi con Mode = Master.
- In ogni terminale ricevente, collega l'EA a un grafico qualsiasi con Mode = Receiver e lo stesso Channel.
- Attiva Algo Trading nei terminali riceventi.
- Apri una piccola posizione sul master. Il pannello del ricevente mostra la copia e la conversione del lotto.
Strategy Tester
Lo Strategy Tester non ha un secondo terminale. Nel tester l'EA esegue quindi un master simulato:
- apre, modifica, chiude parzialmente e chiude posizioni virtuali ogni poche barre, ciascuna dimensionata per perdere circa l'1% del saldo al suo stop loss e per usare al massimo il 10% del saldo come margine
- le posizioni virtuali non vengono mai inviate come ordini
- copia quelle posizioni virtuali sul conto del tester con la modalità di lotto selezionata e tutti i controlli pre-trade
Così puoi vedere la logica di copia e la conversione del lotto senza un secondo terminale. Non è una strategia di trading e i suoi risultati nel tester non dicono nulla sul profitto.
Limiti (da leggere prima dell'acquisto)
- Solo sullo stesso PC: master e riceventi devono essere eseguiti sullo stesso PC Windows o VPS, con un unico utente Windows. La copia via internet non è supportata.
- Il VPS integrato di MQL5 non può eseguirlo. Ogni terminale migrato ha il proprio spazio di archiviazione.
- Solo da MT5 a MT5. Gli ordini pendenti non vengono copiati; un ordine pendente viene copiato una volta eseguito, quando diventa una posizione.
- Mercati chiusi: quando il simbolo del ricevente è fuori dalla sua sessione di trading, non viene inviato nulla. Il copier attende l'apertura della sessione, poi copia ciò che è ancora necessario. Una nuova posizione resta comunque soggetta al limite "Skip if price moved". Una chiusura eseguita dal master mentre il mercato del ricevente era chiuso viene eseguita all'apertura di quel mercato, al prezzo di quel momento.
- Velocità: misurata su conti demo, la posizione del ricevente si è allineata al master da 0,2 a 1,1 s dopo il trade del master (mediana 0,3 s, 60 misurazioni; il caso da 1,1 s era la chiusura di 10 posizioni contemporaneamente su un conto netting). Si tratta di 100 ms di polling più il tempo di esecuzione del broker. Le copie vengono eseguite ai prezzi propri del ricevente, quindi possono differire dai prezzi del master, soprattutto in prossimità delle notizie.
- Livelli di stop loss e take profit:
- Quando entrambi i simboli sono quotati nella stessa valuta, vengono copiati i livelli esatti.
- Altrimenti, per esempio da XAGUSD a XAGEUR, i livelli vengono scalati in base al rapporto tra i prezzi.
- Su un ricevente netting, SL/TP viene copiato solo quando tutte le posizioni master su quel simbolo usano gli stessi livelli.
- Le posizioni che chiudi o riduci manualmente sul ricevente non vengono toccate. Non vengono mai riaperte.
- Ricevente offline per più di 48 ore: il master conserva i record di chiusura per 48 ore. Una copia la cui posizione master è stata chiusa prima di allora non viene chiusa automaticamente. Va in HOLD con un alert e la chiudi tu manualmente.
- Livelli di stop rifiutati all'apertura: quando il broker rifiuta lo stop loss o il take profit di una nuova copia (stop non validi, per esempio una distanza minima degli stop ampliata in prossimità delle notizie), la copia viene rifiutata e non viene ritentata. Il pannello la mostra come REFUSED.
- Copie limitate: quando una copia è limitata da Max lot o dal volume massimo del broker, una chiusura parziale sul master riduce la copia solo quando il nuovo volume scalato è inferiore a quello aperto. Fino ad allora la copia resta al limite.
- Nessuna gestione del rischio: il copier non limita il drawdown né la perdita giornaliera e non gestisce conti. Copia ciò che fa il master.
- Stessa versione ovunque: il master e i riceventi misurano il valore di un lotto con lo stesso codice. Esegui la stessa versione dell'EA in tutti i terminali. Per esempio, un master v1.00 con un ricevente v1.01 mantiene l'arrotondamento al centesimo della v1.00 per i CFD su azioni e gli altri contratti con un valore per lotto ridotto.
- Fondi insufficienti presso il broker: quando il broker rifiuta una nuova copia per motivi di margine, la copia viene rifiutata e non viene ritentata. Alcuni broker richiedono più margine di quanto indichi il calcolo del margine di MetaTrader stesso; la demo Exness usata nei test lo faceva.
- Ambiente di test:
- Testato live con conti MetaQuotes-Demo: master USD, ricevente EUR hedging, ricevente USD netting.
- Il master è stato testato anche su un conto USD netting, con incrementi, un'inversione con un solo deal, una chiusura parziale e una chiusura totale.
- Testato live tra due broker, MetaQuotes-Demo e una demo Exness Standard (USD, hedging, simboli con il suffisso "m"), in entrambe le direzioni:
- Da MetaQuotes-Demo a Exness, associati automaticamente: XAUUSD su XAUUSDm, XAGUSD su XAGUSDm, EURUSD su EURUSDm. Testato con apertura con SL/TP, modifica dello SL, chiusura parziale, riavvio del ricevente, modifica dei parametri di input e chiusura.
- Da Exness a un conto MetaQuotes-Demo EUR, associati automaticamente: XAUUSDm su XAUUSD, XAGUSDm su XAGUSD, EURUSDm su EURUSD. Testato con apertura, modifica dello SL, chiusura parziale e chiusura. Il CFD su azioni BACm (100 azioni per lotto) è stato copiato su BAC (1 azione per lotto): 0,10 lotti sono diventati 10.
- Dimensioni di contratto diverse all'interno di Exness, con una mappa manuale: US30m su US30_x10m (0,30 lotti sono diventati 0,03), USTECm su USTEC_x100m e US500m su US500_x100m (1,00 lotto è diventato 0,01), e BTCUSDm su BTCUSDTm.
- In ogni prova: 0 duplicati e una differenza di esposizione da 0,00% a 0,01% sul pannello. Le mappature errate sono state rifiutate dal controllo del prezzo. Le associazioni ambigue sono state rifiutate finché uno dei simboli non era presente nell'Osservatorio del mercato.
- L'oro da 1 oz e i conti cent sono coperti da unit test con specifiche di broker sintetiche, non da conti live. Nessuno dei due broker li offriva su un conto demo.
- Prima di copiare denaro reale, fai un test con i tuoi broker su conti demo.
