Trader avec un RSI ou MFI Auto-optimisé : Mon EA pour MetaTrader 4

Mike 2017.11.16 15:56 12 0 0
Pièce jointe

Salut les traders ! Aujourd'hui, j'aimerais partager avec vous un projet qui me tient à cœur : un robot qui s'auto-optimise. Imaginez avoir un système qui ajuste constamment ses paramètres pour toujours travailler avec les meilleures valeurs. C'est exactement ce que j'ai essayé de réaliser avec cet Expert Advisor (EA) que je vous présente ici !

Ce robot optimise les niveaux de surachat et de survente pour passer des ordres. J'espère que certains d'entre vous pourront s'en inspirer et développer encore plus ce concept. Si c'est le cas, n'hésitez pas à me faire signe ! Et surtout, pensez à évaluer mon robot grâce aux étoiles ci-dessus. Cette stratégie est applicable à n'importe quelle paire de devises et sur n'importe quelle unité de temps, avec bien sûr les réglages adéquats.


Paramètres

  • magic = 4376 - Un numéro unique pour cet EA.
  • optimizingPeriods = 144 - Périodes d'optimisation (barres). C'est le nombre de barres sur lesquelles vous souhaitez faire l'optimisation. Par exemple, si vous utilisez un graphique horaire et que vous choisissez 144, le robot regardera en arrière sur 144 heures, soit six jours.
  • inAggressive = false - Mode agressif ? Risqué. En mode agressif, l'EA prendra des ordres plus rapidement. Par exemple, il peut passer un ordre d'achat simplement si les achats ont été plus rentables que les ventes récemment.
  • inTradeReverse = false - Trading inversé. Cela inversera la direction de vos trades.
  • inOneOrderAtATime = true - Un seul ordre ouvert à la fois ? Si vrai, l'EA n'ouvrira qu'un seul ordre à la fois, sinon il ouvrira un nombre illimité d'ordres selon les conditions d'entrée.
  • Lot_sizing_dynamic_invalidates_static - Simple séparateur pour la mécanique de taille de lot.
  • Lots = 0.01 - Taille de lot statique des ordres. Spécifiez la taille du lot pour vos ordres avec un nombre fixe.
  • inUseDynamicLotSize = true - Utiliser une taille de lot dynamique. Active la taille de lot dynamique qui sera utilisée à la place de la taille de lot statique. Cependant, si la taille dynamique s'avère invalide, le robot utilisera la taille de lot statique.
  • inPercentageOfRisk = 2 - Pourcentage de votre solde à risquer sur chaque trade (2 = 2 %). En utilisant la taille de lot dynamique, vous spécifiez votre taille de lot en pourcentage de votre solde. 2 équivaut à 2 %. Pas besoin d'entrer 0.02, car cela donnerait un pourcentage très faible. Le pourcentage maximum pouvant être utilisé est de 10 %.
  • Index_Indicator_Values - Simple séparateur pour les paramètres des indicateurs.
  • indicator index = _RSI_ - Choisissez quel indicateur utiliser. Actuellement, vous pouvez choisir entre l'Indice de Force Relative (RSI) ou l'Indice de Flux Monétaire (MFI).
  • IndicatorTopValue = 100 - Valeur maximale à laquelle vous allez trader. C'est la valeur la plus élevée à laquelle vous passerez un ordre avec votre indicateur. Laissez-le à 100 pour considérer toutes les valeurs de l'indicateur.
  • IndicatorBottomValue = 0 - Valeur minimale à laquelle vous allez trader. C'est la valeur la plus basse à laquelle vous passerez un ordre avec votre indicateur. Laissez-le à 0 pour considérer toutes les valeurs de l'indicateur.
  • IndyTimeframe = PERIOD_CURRENT - Unité de temps pour l'indicateur. Sélectionnez l'unité de temps que vous souhaitez utiliser pour l'indicateur pendant l'optimisation et le trading. PERIOD_CURRENT signifie que l'indicateur utilisera l'unité de temps du graphique auquel vous attachez l'EA.
  • inIndyPeriods = 14 - Période d'average pour les calculs d'indicateur et d'ATR. L'Average True Range (ATR) est utilisé pour définir un stop-loss ou un take-profit dynamique dans les options suivantes.
  • IndyAppPrice = PRICE_CLOSE - Prix appliqué pour l'indicateur si nécessaire.
  • SL_TP_Dynamic_invalidates_static_values - Simple séparateur pour les paramètres de stop loss et take profit.
  • iStoploss = 1000 - Valeur de stop loss statique en points. Les valeurs de stop loss sont en points, qui sont la plus petite unité de mouvement dans votre terminal.
  • iTakeprofit = 2000 - Valeur de take profit statique en points. Les valeurs de take profit sont en points, qui sont la plus petite unité de mouvement dans votre terminal.
  • input inDynamic = true - Utiliser un stop loss et un take profit dynamiques basés sur l'ATR ? Si vous activez le stop loss et le take profit dynamiques, ils seront utilisés à la place des valeurs statiques. Ces réglages dynamiques peuvent être intéressants car ils s'ajustent en fonction du comportement du marché.
  • inStoplossMultiple = 2 - SL dynamique = X * ATR (Période d'average). Le stop loss sera la valeur que vous placez ici multipliée par l'Average True Range (ATR) avec les périodes spécifiées dans le paramètre inIndyPeriods.
  • inTakeProfitMultiple = 7 - TP dynamique = X * ATR (Période d'average). Le take profit sera la valeur que vous placez ici multipliée par l'Average True Range (ATR) avec les périodes spécifiées dans le paramètre inIndyPeriods.
  • Break_Even_Settings - Le padding doit être inférieur au trigger. Un séparateur pour les réglages de break even. Cela signifie que lorsque les points de profit dépassent le montant du trigger, le stop loss est déplacé à break even.
  • bUseBreakEven = true - Utiliser le Break Even (BE). Activez ou désactivez l'utilisation du break even.
  • inTrigger = 200 - Si BE = [true], définissez les points de profit pour déclencher l'action. Si le trade atteint ce nombre de points en profit, le stop loss sera déplacé à break even.
  • inPadding = 100 - Points de padding à ajouter au BE. C'est le nombre de points de profit que vous voulez sécuriser lors du passage à break even, ce montant doit être inférieur au trigger.

Comment ce robot s'auto-optimise-t-il ? Voici le secret : le robot teste chaque variable de l'indicateur deux fois. Si un indicateur a cent valeurs possibles, il prend chaque valeur et essaie de passer un trade à cette valeur en regardant en arrière sur un certain nombre de barres (optimizingPeriods). Ensuite, il évalue cette valeur en fonction de l'argent qu'il aurait gagné ou perdu en tradant à cette valeur. C'est un peu plus complexe que cela, mais vous lisez ceci pour avoir plus de détails, donc voici comment cela fonctionne.

En résumé, lorsqu'un indicateur traverse la valeur de surachat par le haut, un ordre de vente est émis, et un ordre d'achat est émis quand l'indicateur traverse de dessous une valeur de survente à au-dessus. Par exemple, si le surachat est fixé à 80 et que la valeur de votre indicateur était de 85, puis de 79, un ordre de vente sera émis. 85 → 79 traverse 80 vers le bas, ordre de vente émis. Si survente = 23, alors 19 → 27 vers le haut créera un ordre d'achat.

Ce robot teste chaque valeur de l'indicateur entre IndicatorTopValue et IndicatorBottomValue, effectuant deux tests pour chaque valeur. Par exemple, si la valeur maximale est 100, il testera cette valeur sur les optimizingPeriods, disons 144 périodes. Il vérifiera si acheter à 100 et vendre à 100 aurait été rentable durant ces 144 périodes. Si oui, il conserve ce montant.

Après avoir testé toutes les valeurs, il sélectionne celle avec le montant monétaire le plus élevé comme valeur d'achat optimale. Ensuite, il effectue des vérifications similaires pour la valeur de vente. Quand tout cela est terminé, il compare la meilleure valeur d'achat avec la meilleure valeur de vente pour trouver la meilleure opportunité de trade.


Idées d'expansion future

  • Trader plusieurs paires de devises en même temps, éventuellement filtrées par la taille du spread.
  • Auto-apprentissage, où le robot apprend de ses propres trades ce qui est le meilleur.
  • Le backtesting pourrait également inclure un composant de test en temps réel.
  • Plus d'indicateurs à choisir.

N'hésitez pas à laisser vos suggestions et commentaires, et n'oubliez pas de noter !

Maintenant disponible sur le marché MetaTrader : https://www.mql5.com/en/market/product/26332


Mise à jour avec les crochets manquants dans les lignes 137-142 pour résoudre l'erreur identifiée dans les commentaires.

Liste
Commentaire 0