Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

EA: Arbitrage entre 2 devises

  • Mikiburger

    Bonjour,

    J'ai programmé un EA pour MT4 basé sur le principe de l'arbitrage entre devises.
    Vous trouverez plus d'info en cherchant sur la toile avec les mots clés "pairs hedge" ou "circle hedging".

    En deux mots l'idée est de prendre position sur 3 paires de devises dans le but d'avoir une neutralité.
    Si on achète sur EURUSD, concrètement on achète de l'euro et on vend du Dollar.

    Par exemple, on réalise un cycle (lot équivalent) de telle manière:
    Achat : EURUSD
    vente : GBPUSD
    vente : EURGBP

    On achète et on vend en même temps la même quantité d'Euro, de Dollar et de Livre Sterling. (votre Broker va adorer)
    On réalise donc un "hedge" parfait ce qui ne donne évidement aucune rentabilité, on est d'accord.

    Mathématiquement:
    EURGBP = EURUSD / GBPUSD
    ou
    EURGBP * GBPUSD / EURUSD = 1

    Mais cette égalité n'est pas parfaite.
    L'indicateur FPI (Fractional Product Inefficiency) illustre cette inégalité (voir pièce jointe).

    La valeur oscille toujours autour de 1.
    Elle s'écarte de temps en temps mais revient immanquablement à 1.

    L'idée sous-jacente est donc d'acheter EURGBP lorsque EURGBP < EURUSD / GBPUSD
    et vendre EURGBP lorsque EURGBP > EURUSD / GBPUSD.

    Comme on a affaire à une oscillation, ce jeu est toujours gagnant, ce n'est qu'une question de temps.

    Malheureusement, comme c'est un jeu entre plusieurs devises, il n'est pas possible de backtester avec MT4.

    J'ai testé en démo pendant plusieurs semaines et ça fonctionne bien. :)

    J'ai ensuite testé en réel mais mon robot ne fonctionnait pas. :(
    Il n'entrait pas en trade. Je ne comprend pas trop pourquoi.

    Pensez-vous que mon Broker ne donne pas les même valeurs en démo qu'en réel ?
    Ou peut être que la fréquence d'actualisation des cours n'est pas la même en démo qu'en réel ?
    Mikiburger a joint une image
    arbitrage-11183
  • Mikiburger — en réponse à Mikiburger dans son message #113360

    Mikiburger, le 09/03/2019 dit :
    L'idée sous-jacente est donc d'acheter EURGBP lorsque EURGBP < EURUSD / GBPUSD et vendre EURGBP lorsque EURGBP > EURUSD / GBPUSD.


    Je m’aperçois que je n'ai pas été assez clair donc voici plus de détails:

    entrée en position:
    si EURGBP < EURUSD / GBPUSD : Acheter EURGBP, vendre EURUSD et acheter GBPUSD
    ou
    si EURGBP > EURUSD / GBPUSD : Vendre EURGBP, acheter EURUSD et vendre GBPUSD

    sortie sur gain (à définir en fonction de la taille des positions)
  • jbaptiste — en réponse à Mikiburger dans son message #113360

    Salut,

    Si ton EA échoue à la prise de position, il doit normalement envoyer un message d'erreur dans l'onglet "expert".
    Grace à ce message tu devrais réussir à savoir ce qu'il ne va pas.
  • riden

    Il est vrai que
    EURUSD / (GBPUSD * EURGBP ) ~~ 1
    de même:
    EURUSD * USDJPY / EURJPY ~~ 1
    GBPUSD * USDJPY / GBP JPY ~~ 1

    Mais lorsque tu entres en position d'achat en EURUSD et USDJPY et en ventre pour EURJPY il ne s'agit pas d'une opération de multiplication et de division c'est plutôt une addition et soustraction.
    soit l'instant t le moment de la prise des 3 positions:
    --> tu vas commencer avec 3 spread plus les slippages (supposont que c'est -6pips)
    --> X = ProfitFlottant(EURUSD_buy) + ProfitFlottant(USDJPY_buy) + ProfitFlottant(EURJPY_sell) ---> on parle des positions prise à l'instant t
    --> on va considérer notre repère j-30 et supposer que 3 positions on été prise à ce jour donc soit
    Y = ProfitFlottant(EURUSD_buy) + ProfitFlottant(USDJPY_buy) + ProfitFlottant(EURJPY_sell)
    "Y" va nous permettre de voir comment va osciller la somme

    --> "Y" ne va pas osciller autour de zéro forcément en plus cette oscillation n'a pas une période déterminée.
    Exemple: "Y" a oscillé autour de -30 avec un max 0 et un min -60. "Y" indique à rentrer en BUY-BUY-SELL lorsque c'est -60<Y<<-30 et en SELL-SELL-BUY lorsque c'est -30<<Y<0. Mais tu peux rester longtemps au-dessous de -30 ou au-dessus. Pendant le temps où les la moyenne de "Y" va varier et l’ampleur de l'oscillation aussi (le max et le min).
    Ce n'est pas aussi simple. Tu n'auras pas un grand DD c'est certain mais tu peux te trouver avec un X négatif pendant des semaines. Je trouve la stratégie intéressante mais il faut la raffiner et l'optimiser.

    Pour le backtest tu peux à travers un EA backtester directement à travers le graphique sans avoir recours à l'outil de backtest de la plateforme (il faut augmenter le nombre de bougies dans le graphique et l'historique de sorte qu'il soit supérieur ou égal au nombre de bougies qu'on va parcourir dans le backtest). De cette façon tu n'as plus l’inconvénient de ne pas pouvoir lancer un backtest sur plusieurs paires en simultané.

    Exemple: j'ai fait un test avec EURUSD + USDJPY - EURJPY ( à l'heure où j'écris ce message)
    repère : iOpen de la 21ème bougie --- H1 ---- avec les différentes valeurs de "Y" pour chaque iOpen (les 20 derniers)
    ---> si on commence avec -6 pips on ne peut rien encaisser pendant 20 heures (dans le cas de cet exemple)
    riden a joint une image
    ea-arbitrage-entre-2-devises-11189
  • riden

    Avec GBPUSD + USDJPY - GBPJPY ça oscille mieux et permet d'encaisser un petit profit de quelquse pips après quelques heures si on est dans le bon sens.
    riden a joint une image
    ea-arbitrage-entre-2-devises-11190
  • Mikiburger

    oui chez moi ça fonctionne bien en démo mais pas en réel.
    As tu essayé en réel ?
  • Agima — en réponse à Mikiburger dans son message #113360

    La stratégie semble intéressante, je vais m'y mettre en MT5, ce qui permettra effectivement de lancer des backtests.

    Mais que donne déjà en test avec compte de démo ton EA ?

    Aurais-tu des liens qui permettent d'avoir toutes les conditions à intégrer dans l'EA ? Parce que le hedging c'est vaste et pas uniquement utilisé dans ce cas.

    Merci
  • Mikiburger

    Sur mon compte démo, c'est très prometteur.
    Le gain est évidemment dépendant de la taille des lots.
    Pour un cycle de 1 lot, j'ai mis le stop gain à 25$ (difficile à optimiser sans backtest) et le DD max que j'ai eu était d'environs 300$ mais je n'était pas tout le temps derrière mon écran.
    Si tu arrive à backtester en mt5 ça sera intéressant pour optimiser le SG et avoir une bonne idée du DD max mais ça ne prouvera toujours pas que ça fonctionne en réel.

    Pour les liens, tu trouveras pas mal de discussions sur des forums en anglais avec les mots clés "pairs hedge" ou "circle hedging". (je ne me permets pas de faire la pub d'autres forums ici ;) )
  • Agima

    Je vais chercher mais avec "pairs hedge" c'est mort car trop généraliste comme recherche;

    Question : J'ai bien compris dans ton explication l'équilibre entre ces trois paires qui fait que tu couvres ainsi tes positions, mais comment le robot déploie sa stratégie de gains si tu est toujours en train de couvrir une paire par les 2 autres ?
    Modifié le 2019-03-24 13:39:30 par Agima
  • Mikiburger

    Par exemple pour l'entrée:
    Acheter EURGBP, vendre EURUSD et acheter GBPUSD quand ton FPI est bas... ou l'inverse si le FPI est haut.

    Ensuite tu sort des 3 positions dès que tu as un gain de 25$ sur le cycle.
    Généralement le profit oscille entre -80$ et +40$. (les +40$ sont à vérifier par backtesting);

    Comme c'est une oscillation, le risque est quasi nul.

    Tu peux évidemment faire la même stratégie sur une bonne dizaine de cycle différents en même temps.
  • Agima

    OK donc tu gères un basket avec un TOP global et un SL global

    J'aime beaucoup l'idée en tout cas, et ça n'a pas l'air très compliquer à développer.

    Je me mets dessus dès cet après-midi.

    Merci pour les précisions

    A suivre...
  • Mikiburger

    Oui pour le stop gain global sur le cycle.
    Chaque cycle (basket) ayant un stop gain séparé si tu décide de faire plusieurs cycles différents.
    Moi je gère ça à l'aide du Magic Number propre à chaque cycle.

    Par contre je ne met pas du tout de Stop Loss car en théorie ça ne perd jamais.
  • Agima

    Mon EA en MT5 est presque terminé.
    Je pense que ce sera bon demain dans la journée
  • Mikiburger

    Notre discussion m'a donné envie de relancer mon robot.
    J'ai ouvert sur un autre VPS.
    Et cette fois-ci il fonctionne :)

    J'ai mis le stop gain à 0.1€/cycle (pour 0,01 lot joué sur chaque paire).
    Il a ouvert pas mal de cycle et depuis hier soir il a fini deux cycles pour un gain total de 0,55$
    Je vais laisser tourner un petit temps à 0.01 lot pour voir quelles pertes latentes maximales je vais atteindre.

    Mais ton backtest m’intéresse pour optimiser le stop gain par cycle.

    Bonne journée,
  • Agima

    Si tu cherches un VPS, je suis chez Virmach et les prix sont juste fous.
    J'ai commencé avec le plan à 12$/mois et je suis maintenant sur celui à 20$/mois.
    Et c'est encore moins cher si tu payes au trimestre ou à l'année.
    Agima a joint une image
    ea-arbitrage-entre-2-devises-11214
  • Agima

    Bon, mon robot MT5 est terminé, passage en test maintenant.

    Reste à faire
    - Backtester tout ça pour trouver les meilleurs seuils (TP, lots...)
    - Intégrer un SL (c'est toujours mieux)
    - Voir si il est préférable d'être dans un marché avec volatilité ou non
    Modifié le 2019-03-26 09:58:44 par Agima
  • Agima

    Pour le moment, je n'ai pas fait comme toi Mikiburger.
    Je lance les cycles les uns à la suite des autres pour le moment sur les conditions suivantes :
    - Achat EURGBP si EURGBP < (EURUSD / GBPUSD) (Vente les 2 autres)
    - Vente EURGBP si EURGBP > (EURUSD / GBPUSD) (Achat les 2 autres)
    - Test du spread de chaque paire inférieur au spread max décidé
    Un cycle se termine lorsque le TP ou le SL est touché, le robot clôture alors les positions ouvertes et lance un nouveau cycle.

    Voici les paramètres basiques du robot pour cette version 1.00
    Agima a joint une image
    ea-arbitrage-entre-2-devises-11220
  • Agima

    Premier backtest avec optimisation terminé sur une semaine de trading et c'est pas glorieux :(

    J'ai fait varier les paramètres suivants :
    - "Take Profit" en euros de 0,10€ à 1€ avec un pas d'incrémentation de 0,10€
    - "Stop Loss" en euros de 1€ à 10€ avec un pas d'incrémentation de 0,10€

    Je relance maintenant avec d'autres paramètres (TP beaucoup plus important et SL pareil) pour essayer de faire des gains.

    Croisons les doigts
    Modifié le 2019-03-26 14:04:45 par Agima
    Agima a joint une image
    ea-arbitrage-entre-2-devises-11221
  • Agima

    C'est normal qu'entre la prévisualisation et le post, des choses disparaissent ??? :(
    Le peu de BBcode normalement autorisé ne passe pas ? :(
    Modifié le 2019-03-26 14:17:26 par Agima
  • Agima — en réponse à Mikiburger dans son message #113366

    Mikiburger, le 09/03/2019 dit :
    Mikiburger, le 09/03/2019 dit :L'idée sous-jacente est donc d'acheter EURGBP lorsque EURGBP < EURUSD / GBPUSD et vendre EURGBP lorsque EURGBP > EURUSD / GBPUSD. Je m’aperçois que je n'ai pas été assez clair donc voici plus de détails: entrée en position: si EURGBP < EURUSD / GBPUSD : Acheter EURGBP, vendre EURUSD et acheter GBPUSD ou si EURGBP > EURUSD / GBPUSD : Vendre EURGBP, acheter EURUSD et vendre GBPUSD sortie sur gain (à définir en fonction de la taille des positions)


    Je viens de tomber sur ton 2ième post que j'avais complètement zappé ;)
    Je modifie le robot en conséquence car l'équilibre n'est plus du tout le même et je relance les backtests.