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

Comment on fait en MQL pour ...

  • furynick

    J'ai eu l'idée d'ouvrir ce sujet pour celles et ceux qui souhaitent mettre les mains dans le cambouis mais qui ne savent pas encore comment utiliser les outils à leur disposition.

    Le fonctionnement est simple :
    - une personne pose une question précise (j'insiste lourdement sur le "précise";) comme par exemple "comment fait-on pour exécuter du code à l'ouverture d'une nouvelle barre"
    - une personne réponds de manière claire et concise à cette question en fournissant explications, code, exemples, références ou tout autre information utile et pertinente en ayant au préalable mené toutes les recherches nécessaires pour fournir une réponse la plus fonctionnelle possible.
    Plusieurs réponses pourront être fournies par d'autres personnes tant qu'une autre question n'aura pas été posée.
    Il n'est pas interdit de citer du code tant qu'il est libre de droit et en précisant systématiquement l'auteur, l'origine ou indiquer dans le pire des cas qu'il n'est pas issu de vos recherches.

    Il est bien évidemment inutile de poser la question "comment fait-on pour écrire un EA profitable à coup sûr" ou "comment fait-on pour réaliser un indicateur qui fourni des signaux idéaux", aucune réponse n'y sera apporté et je demanderai la suppression pure et simple de ces questions aux modos.

    D'ici quelques temps nous devrions avoir une bibliothèque de fonctions utiles et pertinentes pour que chaque codeur en herbe puisse constituer lui-même ses outils de trading.
  • roland

    Super idée, j'ai pas grand chose à dire de plus que ça. Je suis pas un super programmeur mais je me débrouille et j'ai toujours réussi à faire ce que je voulais faire, donc si je peux répondre je le ferai :)
  • Lorka85

    une idée très pertinente Fury, merci pour la communeauté.

    alors moi j'aimerais comprendre les icustoms, chose non utile pour les indicateurs par defaut sous mql (imacd, iadx, icci, iatr, etc, fonctions deja préparé)
    j'ai lu le site officiel :
    http://docs.mql4.com/indicators/icustom

    mais par exemple si je veut faire un icustom sur l'indicateur stochastic di napoli pour récupérer les deux ligne (signal et l'autre) je regarde quoi dans le code de l'indicateur ? et je marque quoi dans la ligne icustom ?
  • furynick

    Comme tu l'auras lu sur la doc (http://docs.mql4.com/indicators/iCustom), la syntaxe du iCustom est la suivante :
    Code
    double iCustom(sring symbol, int timeframe, string name, ..., int mode, int shift)

    * Les paramètres symbol et timeframe sont sans équivoque (NULL pour le symbole courant et 0 pour le timeframe courant),

    * Le paramètre name est le nom de l'indicateur au format .ex4 qui se trouve dans le répertoire experts\indicators de votre plateforme MT4. Ce paramètre doit être exactement de la même syntaxe que le nom du fichier sans l'extension.
    Par exemple, si vous utilisez un indicateur dont le fichier se nomme Heiken_Ashi_Smoothed.ex4, le paramètre name devra être Heiken_Ashi_Smoothed. Théoriquement la casse (différence majuscule/minuscule) n'a pas d'importance mais dans un souci de rigueur et de portabilité je vous conseille vivement de la respecter quand vous écrivez votre code.

    * Les points de suspension représentent les paramètres de l'indicateur tels qu'ils apparaissent dans la boite de dialogue d'attachement de l'indic sur l'onglet "Paramètres d'entrée", si un ou plusieurs paramètres ne sont pas précisés dans le iCustom les valeurs par défaut de l'indic seront utilisées.

    * Le paramètre mode détermine quelle source de donnée doit être retournée, il suffit d'ouvrir l'onglet "Couleur" de la même boite de dialogue pour savoir quel chiffre utiliser (uniquement de 0 à 7).

    * Le paramètre shift indique sur quelle barre la valeur de la source de donnée doit être retournée, 0=barre courante (la valeur est réactualisée à chaque tick), 1=dernière barre complète, 2=avant dernière barre, etc...

    Par exemple pour le SDN :
    Code
    stodinapo=iCustom(NULL, PERIOD_H1, "StochasticDiNapoli", 10, 2, 2, 0, 1);
    La valeur principale (affichée en RoyalBlue) du SDN avec comme paramètres FastK=10, SlowK=2, SlowD=2 et les autres paramètres par défaut sur la dernière barre complète est retournée pour la paire courante sur le timeframe H1.
    furynick a joint une image
    G3174EB
  • Lorka85

    hé bah punaise !

    très precis et détaillé, un sacré merci Fury !!
  • Lorka85

    bonjour a tous

    j'ai une boucle while qui, tans que l'ordre n'ai pas passer, retente toutes les secondes de l'envoyé :

    Code
    while (ticket == -1) // tant que l’ordre n’est pas passé { Sleep(1000); // on attend une seconde RefreshRates(); //on rafraichit les valeurs du cours de la paire ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, Ask-StopLoss*Point, Ask+TakeProfit*Point, NAME + " " + VERSION, magicNumber); }

    j'aimerais rajouter un compteur, et si après 20 tentatives, l'ordre n'est toujours pas passer, il abandonne.

    c'est possible a faire, et facilement ?

    gros merci
  • furynick

    Il suffit d'ajouter un simple compteur et d'inclure la condition dans le while, il est aussi préférable de mettre le sleep à la fin de la boucle pour que le 1er OrderSend ait un maximum de chance de passer.
    Code
    int try=0 while (ticket == -1 && try < 20) // tant que l’ordre n’est pas passé { RefreshRates(); //on rafraichit les valeurs du cours de la paire ticket = OrderSend(Symbol(), OP_BUY, lotSize, ask, 3, Ask-StopLoss*Point, Ask+TakeProfit*Point, NAME + " " + VERSION, magicNumber); try++; Sleep(1000); // on attend une seconde }
  • Lorka85

    immense merci :) et précieux conseil pour le sleep :) j'adore ce topic ^^
  • Brrtony (invité)

    Coucou
    J'aimerais que l'EA s'arrete tout seul quand il atteint 200 euros par exemple.
    si quelqu'un a une idee MERCI :)
  • babs

    Il nous faudrait plus de détails, notamment :
    - Tu veux qu'il ferme les positions en cours?
    - Tu veux qu'il arrête d'ouvrir des trades mais continue a gérer ceux ouverts?
    - 200euros en Balance ou en Equity?
  • Brrtony (invité)

    Merci @BABS
    BAAAAAAAAAAAAAAAAAAAAAAAA HEEEEEEEEUUUUUUUUUUUU

    Oui pour : - Tu veux qu'il ferme les positions en cours?
    et en "Equity" si possible bien sur :)




  • lowyoda

    Bonjour a tous,

    Alors moi je cherche un trailling Stop qui réduit le nombre de pips par le nombre d'heure pour minutes depuis qu'il est ouvert ^^
    Encore un truc bien chiant ^^
  • Lorka85

    j'ai aussi une question, plus simple je pense

    existe t'il une condtion OU en mql4 ?

    if (ma1 > ma2 OU ma2 > ma1)

    merci
  • lowyoda

    OR fonctionne pas ?
  • Brrtony (invité)

    et || pour @Lorka85 ?
  • lowyoda

    oui voila c'est OR j'aurai mieux fait de me taire moi je confirme les ||
  • Lorka85

    Merci Brrtony cela semble etre bon :) ca compile ^^ non Or j'ai déja essayé lowyoda ^^
  • Lorka85

    aller j'abuse de votre gentilesse !!!
    les variable sont des valeurs booleenes (true or false):

    Code
    bool Buy,Sell, Nothing; Buy = MA1 > MA2 && MA1 > MA3; Sell = MA1 < MA2 && MA1 < MA3; Nothing = Nothing != Buy && Nothing != Sell;

    Est ce que la variable Nothing renvera TRUE si les conditions sont différent de Buy et different de Sell ?
  • babs

    @Lorka85
    Je pense que tu devrai initialiser ta variable Nothing car sinon il ne te renverra rien de cohérent sinon pour répondre à ta question Nothing renverra true UNIQUEMENT si Buy et Sell sont différent de Nothing.
    une petite table pour t'expliquer
    Code
    Nothing | Buy | Sell || Resultat false | false | false || false false | false | true || false false | true | false || false false | true | true || true true | false | false || true true | true | false || false true | false | true || false true | true | true || false
  • babs

    @Lorka84
    Attention la table précédente n'est pas vrai si tes variables ne sont pas des booléen.

    @Brrtony
    Voici le code à ajouter :

    Cette première partie est à ajouter en début de fonction start()
    Code
    if(AccountEquity()>200) { CloseTrade(); return(0); }

    Voici la fonction CloseTrade()
    Code
    void CloseTrade() { for(int i= OrdersTotal()-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS); int type = OrderType(); if (OrderMagicNumber() == MagicNumber && Symbol()==OrderSymbol()) { switch(type) { //Fermeture des positions d’achat case OP_BUY : OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(),MarketInfo(OrderSymbol(), MODE_BID), Red ); break; // Fermeture des positions de vente case OP_SELL : OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(),MarketInfo(OrderSymbol(), MODE_ASK), Red ); break; } } } }