Skip to main content

Randomiser les sorties sur MT4 : méthodes, tests et copieur

Comptes connectés avec des sorties décalées de manière aléatoire

Randomiser les sorties, c’est introduire du hasard dans la façon dont une position se ferme : le moment, le volume clôturé ou le niveau. Sur MT4, on le fait pour deux raisons très différentes. Soit pour tester une stratégie (le hasard sert alors de point de comparaison dans un backtest), soit pour que des ordres copiés sur plusieurs comptes ne se ferment pas tous à la même milliseconde. Cet article traite les deux usages, avec les fonctions MQL4 utiles, une méthode de test reproductible et les limites à connaître.

Mt4copier
Copiez vos trades sur plusieurs comptes
Local Trade Copier réplique les trades entre comptes MT4 et MT5 depuis votre PC ou VPS, sans routage cloud.

Découvrir le copieur

En bref

  • Randomiser une sortie a deux usages : valider une stratégie (simulation de Monte-Carlo) ou décaler l’exécution sur des comptes copiés.
  • Dans un test, on conserve les entrées d’origine et on tire les sorties au hasard : si le résultat reste rentable, l’avantage vient probablement des entrées.
  • En MQL4, MathSrand, MathRand et OrderClose suffisent pour un premier prototype. Fixez la graine pour comparer vos tests.
  • Sur des comptes de prop firm, le hasard ne remplace jamais la lecture du règlement : vérifiez ce que votre firme autorise.

Table des matières

Ce que signifie randomiser une sortie

Une position se ferme par un stop loss, un take profit, une sortie manuelle, une sortie partielle ou un signal inverse. Randomiser, c’est remplacer l’une de ces décisions, ou un de ses paramètres, par un tirage aléatoire encadré par des bornes que vous fixez.

On peut faire varier :

  • Le moment : un délai de quelques centaines de millisecondes ou de quelques secondes avant la clôture.
  • Le niveau : une distance de take profit ou de stop tirée dans une fourchette.
  • Le volume : la taille de chaque sortie partielle.
  • Le type de sortie : stop suiveur, objectif fixe, sortie sur temps, tirés au sort.

Il ne faut pas confondre cela avec la randomisation des entrées. Quand vous randomisez les sorties, vous gardez le signal d’entrée tel quel. C’est précisément ce qui permet de juger si ce signal vaut quelque chose.

Randomiser pour tester : l’approche Monte-Carlo

Dans la communauté du trading algorithmique, la méthode est connue. Selon une présentation de la simulation de Monte-Carlo appliquée au trading, on rejoue les entrées de la stratégie d’origine en randomisant chaque sortie. Si les résultats restent rentables, il est probable que les entrées contiennent un véritable avantage. Le guide de Build Alpha décrit le même principe : les entrées d’origine sont rejouées, et la sortie de chaque trade est tirée au hasard.

La logique est simple :

  1. Vous avez une stratégie dont le backtest est flatteur.
  2. Vous conservez ses entrées, mais vous remplacez ses sorties par des sorties aléatoires, des centaines de fois.
  3. Vous comparez la distribution des résultats à votre backtest d’origine.

Deux lectures sont possibles. Si la rentabilité survit, le signal d’entrée porte sans doute un avantage réel, quelle que soit la précision de la sortie. Si elle s’effondre, la stratégie était peut-être calée sur le bruit historique de ses propres sorties, ce qui est un risque réel avant de passer en compte réel.

Ce test a des limites. Un résultat favorable n’est pas une garantie : le hasard ne reproduit ni le spread qui s’élargit lors d’une annonce, ni les glissements, ni un changement de régime de marché. Il sert à repérer les backtests chanceux, pas à prédire l’avenir.

Sorties multiples générées aléatoirement

Certaines plateformes de construction de stratégies automatisent cela. La documentation de StrategyQuant sur la génération de sorties multiples explique que l’outil choisit un scénario autorisé au hasard, puis deux ou trois types de sortie autorisés. Quand on n’améliore que les sorties ATM, le reste de la stratégie demeure intact. L’idée est transposable à la main sur MT4 : on isole la sortie, on laisse le reste inchangé.

Randomiser pour exécuter : comptes multiples et trades copiés

Le second usage concerne les traders qui exploitent plusieurs comptes. Quand un ordre maître est copié sur dix comptes, tous les ordres se ferment au même instant, au même prix, avec la même séquence. Pour un trader qui veut que chaque compte ait un historique plus naturel, un petit décalage aléatoire à l’ouverture comme à la fermeture est une réponse.

Copie maître vers dix comptes avec horaires décalés

Ce principe existe aussi dans les outils institutionnels. La documentation de l’algorithme ScaleTrader d’Interactive Brokers mentionne la possibilité de randomiser certaines composantes d’un ordre, comme la taille des tranches, pour que l’activité de l’algorithme soit moins repérable par les autres participants du marché.

Ce qu’il est utile de décaler

Sur des comptes copiés, trois paramètres comptent vraiment :

  • Le délai de clôture : quelques secondes de différence suffisent à désynchroniser des comptes clients.
  • Le volume des sorties partielles : si le maître sort en deux temps, le client peut le faire dans la même logique. Notre guide sur la copie d’une clôture partielle entre comptes MT4/MT5 détaille la méthode.
  • Les niveaux de protection : un stop et un take profit légèrement différents d’un compte à l’autre.

Attention au compromis : plus le décalage est grand, plus le prix de sortie du client s’éloigne de celui du maître. Un décalage trop large coûte en glissement, d’où l’intérêt de borner le tout avec une limite de slippage. Nous y revenons dans Limiter le slippage sur votre copieur.

Randomiser une sortie dans MT4 avec un EA

Si vous codez vous-même, MQL4 fournit tout le nécessaire pour un prototype.

Les fonctions à connaître

  • MathSrand fixe le point de départ de la séquence pseudo-aléatoire. La référence MQL4 recommande MathSrand(GetTickCount()) pour obtenir une séquence non répétitive et conseille d’initialiser le générateur dans OnInit().
  • MathRand renvoie ensuite un entier pseudo-aléatoire, que vous ramenez à votre fourchette avec un modulo.
  • OrderClose ferme la position. D’après sa page de référence, elle demande le ticket, le volume, le prix de clôture et le slippage maximal autorisé en points.

Un squelette minimal ressemble à ceci :

int delaiMaxMs = 3000;
int prochainDelai;

int OnInit() {
   MathSrand(GetTickCount());
   prochainDelai = MathRand() % delaiMaxMs;
   return(INIT_SUCCEEDED);
}

À chaque signal de sortie, vous attendez prochainDelai millisecondes (avec une logique non bloquante basée sur l’heure, plutôt qu’un Sleep qui gèle l’EA), puis vous appelez OrderClose avec le volume voulu. Tirez ensuite un nouveau délai.

Les pièges classiques

  • Un Sleep trop long retarde aussi la gestion des autres positions du même EA.
  • Un slippage trop faible fait échouer la clôture quand le prix bouge pendant l’attente. Il faut le dimensionner en fonction de votre délai maximal.
  • Une graine identique à chaque lancement produit toujours la même séquence : c’est utile en test, mais pas en réel.

Tester des sorties randomisées de façon reproductible

Le testeur de stratégie MT4 a ses règles. D’après la documentation sur le fonctionnement des programmes dans le testeur, le temps y est simulé à partir des données historiques et les résultats doivent être identiques que la connexion au serveur soit active ou non. Les opérations de trading ne s’effectuent pas sur les symboles autres que celui testé, et les fonctions d’interaction externe ne sont pas exécutées.

Pour comparer équitablement vos variantes à une référence :

  1. Figez la référence. Lancez la stratégie d’origine, avec ses sorties, sur une période et un symbole donnés. Notez le profit net, le drawdown maximal et le nombre de trades.
  2. Fixez la graine en test. Remplacez GetTickCount() par une valeur constante pour que chaque passage soit reproductible. Gardez la graine variable pour le réel.
  3. Changez une seule chose. Randomisez uniquement la sortie, jamais en même temps l’entrée et la taille de position.
  4. Répétez avec plusieurs graines. Une vingtaine de graines différentes donne une idée de la dispersion. Consignez chaque résultat.
  5. Comparez la distribution. Ce qui compte, c’est la médiane et la queue défavorable, pas le meilleur tirage.
  6. Passez en démo. Faites tourner la version randomisée sur un compte démo avant de risquer du capital. Notre article sur copier du réel vers une démo explique comment reproduire des trades sans danger.

À éviter : choisir la graine qui donne la plus belle courbe. Ce serait recréer, par la bande, le surajustement que vous cherchiez à détecter.

Notre point de vue

Nous développons des copieurs de trades locaux depuis 2010, et la question des sorties revient régulièrement chez nos utilisateurs. Notre expérience est la suivante : la randomisation est un outil, pas une stratégie. Elle ne rend pas rentable un signal qui ne l’est pas, et elle ne remplace jamais une règle de risque claire.

Pour le test, nous recommandons d’abord de s’assurer que l’avantage vient des entrées. Pour l’exécution sur plusieurs comptes, nous préférons des écarts faibles et bornés, car un décalage excessif détruit la fidélité de la copie, surtout sur des comptes dont le solde diffère. C’est aussi la raison pour laquelle nous avons conçu notre copieur pour fonctionner en local, sur votre PC ou votre VPS : tout reste sur une seule machine, avec une seule adresse IP, sans serveur intermédiaire ni latence ajoutée. Le hasard que vous introduisez est alors le vôtre, et non celui d’un réseau.

Une dernière remarque, sur les prop firms. Nos options d’entrée et de sortie aléatoires et notre mode d’exécution de type manuel existent pour rendre les ordres moins reconnaissables. Ils ne vous dispensent pas de lire les règles de votre firme : si elle interdit les EA ou la copie, la bonne décision est de respecter ce règlement. Nous détaillons ce point dans Copier des trades sur une prop firm : règles, risques, méthode.

— Rimantas

Sorties aléatoires avec Local Trade Copier

Si votre besoin est l’exécution sur plusieurs comptes, vous n’avez pas à coder cela vous-même. Local Trade Copier copie les trades entre comptes MetaTrader 4 et 5, en local, avec une exécution sous la seconde. Il propose des options d’entrée et de sortie aléatoires, un mode de copie de type manuel, un ajustement automatique du lot selon le solde de chaque compte et des filtres personnalisés.

L’abonnement comprend les composants MT4 et MT5 sous un même plan, avec 7 jours d’essai gratuit. Les tarifs publiés sont les suivants :

Plan Par mois Par an
PERSONAL 29 € 290 €
MANAGER 89 € 890 €
VIP 199 € 1990 €

Vous pouvez comparer les plans sur la page des tarifs et suivre la procédure d’installation sur MT4 et MT5. Un PC Windows ou un VPS Windows est nécessaire.

Précautions avant de randomiser en réel

Respectez les règles de votre firme ou de votre courtier. Une prop firm peut interdire les EA, la copie entre comptes ou l’usage de plusieurs adresses IP. Lisez ses conditions avant de configurer quoi que ce soit, et si un point est flou, posez la question à son support.

Gardez des sorties de sécurité. Une sortie aléatoire ne doit jamais supprimer le stop loss. Un décalage de quelques secondes sur un marché rapide peut coûter cher.

Décidez de vos niveaux avant d’entrer. Un conseil de professionnel, repris par CME Group dans un entretien avec le trader Jim Iuorio, consiste à fixer le take profit et le stop avant d’ouvrir la position, afin que les émotions n’interviennent pas. La randomisation s’inscrit dans ce cadre : les bornes sont fixées d’avance, seul le détail du tirage varie.

Surveillez la copie. Un décalage aléatoire complique le contrôle de ce qui a été fermé et quand. Pour garder un suivi propre, utilisez un numéro magique par stratégie et vérifiez régulièrement l’historique de chaque compte.

Pensez aux sorties spécifiques. Les sorties partielles, les clôtures croisées et les arrêts sur profit ont leur propre traitement : voir les clôtures partielles copiées vers un compte client et la fonction Close & Stop.

Sur le plan réglementaire américain, le forex de détail est encadré par la CFTC. Si vous tradez depuis les États-Unis, vérifiez auprès de votre courtier ses obligations en matière de dépôt de garantie et de conformité. Une randomisation technique ne modifie rien à ces règles.

Précautions avant de randomiser en réel — overview diagram

Questions fréquentes

Randomiser les sorties améliore-t-il les performances ?

Non, pas en soi. Dans un test, la randomisation sert à vérifier si le signal d’entrée a un avantage réel, pas à l’augmenter. Sur des comptes copiés, elle sert à désynchroniser l’exécution, avec un léger coût possible en glissement.

Quelle différence entre randomiser les entrées et les sorties ?

Randomiser les sorties conserve le signal d’entrée et teste la qualité de la sortie. Randomiser les entrées change le moment d’ouverture et touche directement le signal. Pour juger une stratégie, on ne modifie qu’un des deux à la fois.

Peut-on randomiser les sorties dans le testeur MT4 ?

Oui, avec MathSrand et MathRand dans votre EA. Fixez la graine pour rendre vos passages comparables, puis répétez le test avec plusieurs graines. Le testeur travaille sur le symbole testé et simule le temps à partir de l’historique.

Est-ce que cela rend un EA indétectable par une prop firm ?

Nous ne pouvons pas le promettre, et ce n’est pas le bon angle. Les règles diffèrent d’une firme à l’autre et elles peuvent évoluer. La seule approche sûre est de lire ses conditions et de ne copier ou automatiser que ce qu’elle autorise.

Faut-il un VPS pour copier avec des sorties aléatoires ?

Un PC Windows allumé en continu suffit, mais un VPS Windows évite les coupures de connexion qui interrompraient la copie. Le copieur doit tourner sur la machine où sont installés vos terminaux.

Sources

Recommandations

Purple Trader

Leave a Reply