Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Nouveau membre lorenfar est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    4
    Pouvoir de réputation
    6

    Intégration d'un indicateur à un expert Intégration d'un indicateur à un expert

    Bonjour à tous,

    Je débute dans la programmation d'experts advisors et j'ai un problème, j'aurais voulu savoir comment utiliser un indicateur externe ( que je n'ai pas programmé mais récupéré sur internet ) dans mon programme, pour tester des variables par exemples.

    Merci beaucoup

  2. #2
    Membre lvl 75 fxconfidential deviendra bientot célèbre... Avatar de fxconfidential
    Date d'inscription
    April 2008
    Localisation
    Barcelone
    Messages
    84
    Pouvoir de réputation
    10

    Bonjour,

    Pour utiliser les données d'un indicateur dans un expert, il faut utiliser la fonction icustom. La syntaxe est la suivante :

    double ind=iCustom(NULL, 0, "NomInd",21,1,0);

    double ind= déclaration d'une variable qui va stocker un état de ton indicateur (par exemple baissier ou haussier)

    NULL = Symbole désiré (NULL lorsque le symbole est celui sur lequel est placé l'expert). Si vous désirez inscrire un symbole en particulier, le nom doit être inséré entre " comme ceci "EURUSD".

    0 = Timeframe (0 pour l'actuel sinon PERIOD_M1, PERIOD_M5, PERIOD_H1, PERIOD_D1...)

    "NomInd" = Nom de l'indicateur (celui-ci doit être compilé et présent dans le dossier indicateur de votre installation). Le nom doit correspondre à celui du fichier ex4. (Par exemple, dans notre cas, le nom du fichier est NomInd.ex4)

    21 = Paramètre(s) de l'indicateur (peuvent y en avoir plus d'un, dans ce cas, les séparer par des ',' et les insérer dans l'ordre d'apparition dans le code de l'indicateur)

    1 = État de l'indicateur (correspond au SetIndexBuffer de l'indicateur). Par exemple 0 pour baissier, 1 pour haussier et 2 pour neutre.

    0 = Shift. Correspond au nombre de chandelles à considérer depuis la chandelle actuelle. Par exemple, vous voulez savoir l'état de l'indicateur 1 période en arrière, le shift sera donc égal à 1. 0 pour la barre actuelle.

    J'espère que ça répond à tes questions. Tout ce qui précède est dans le cas d'un indicateur ne figurant pas dans la liste des indicateurs officiels de metatrader car ceux-ci disposent de leur propres fonctions (Technical indicators - MQL4 Documentation)

    Bonne journée

  3. #3
    Nouveau membre lorenfar est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    4
    Pouvoir de réputation
    6

    Merci beaucoup pour cette réponse rapide et complète!

    J'ai encore une petite question, qui n'a rien à voir avec les indicateurs; est il possible de passer un ordre lors de la cloture d'une chandelle ?

    Merci encore
    Bonne soirée

  4. #4
    Membre lvl 75 fxconfidential deviendra bientot célèbre... Avatar de fxconfidential
    Date d'inscription
    April 2008
    Localisation
    Barcelone
    Messages
    84
    Pouvoir de réputation
    10

    Il faudra que tu détailles un peu plus là. Tu veux dire passer un ordre au prix de clôture d'une chandelle ou au moment précis ? à chaque chandelle ?

    Un moyen de faire ça pour une chandelle en particulier serait de faire un if avec la condition de l'heure. ou mn si timeframe inférieur à 1h.

    if (timeHour()== X)
    Acheter ou Vendre.

  5. #5
    Nouveau membre lorenfar est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    4
    Pouvoir de réputation
    6

    Bonjour,

    En fait ce serait pour passer un ordre lors de la clôture ou proche. Par exemple avec un timeframe de 15 min, j'aimerais passer un ordre dans la dernière minute voir moins, pour avoir un prix le plus proche de la cloture, mais je ne sais pas si c'est réalisable en réel ( il doit y avoir un temps de latence entre le passage de mon ordre et l'exécution chez le broker ).

    En espérant avoir été plus clair
    Merci

  6. #6
    Membre lvl 75 fxconfidential deviendra bientot célèbre... Avatar de fxconfidential
    Date d'inscription
    April 2008
    Localisation
    Barcelone
    Messages
    84
    Pouvoir de réputation
    10

    Dans ce cas, tu peux utiliser une fonction de ce type :

    int ticket;
    if ((TimeMinute(Time[0]) == 14) || (TimeMinute(Time[0]) == 29) ||(TimeMinute(Time[0]) ==44) || (TimeMinute(Time[0]) == 59 ) && (TimeSeconds(Time[0]) == 59))
    {
    ticket=OrderSend(Symbol(),OP_BUY,LOTS,Ask,SLIPPAGE ,Ask - StopLoss*Point,Ask+TakeProfit*Point,"Commentaires" ,MAGIC,0,Green);
    if(ticket<0)
    {
    Print("OrderSend failed with error #",GetLastError());
    return(0);
    }
    }

    À chaque 14mn et 59 secondes, un ordre d'achat est envoyé. En général, le délai de traitement si tu n'es pas sur trading desk va être de 1 à 2 secondes environ. Le prix ne subit en général pas de grosses perturbations dans un laps de temps aussi court mais à toi de régler les secondes en fonction de ce que tu désires vraiment. Tu peux également pour éviter le slippage, récuperer le prix de fermeture toutes les 15 mn et envoyer un ordre avec ce prix mais dans ce cas rien ne te garantit que ton ordre passera et que le prix sera toujours le même.

  7. #7
    katymary
    Guest

    Utilisation de ifractals dans un expert Utilisation de ifractals dans un expert

    Bonsoir,
    Enfin une file qui parle de programmation mql4
    Je débute en mql4, mais j'ai des connaissances en programmation. Le C n'était pas mon langage de prédilection...
    J'ai besoin de connaître les valeurs des dernières fractales mais la fonction standard rend toujours 0, il est difficile de trouver de la documentation à ce sujet, ni de livre...

    int start()
    {
    fracUp0 = iFractals(symbol(), 0, MODE_UPPER,0);
    fracLow0 = iFractals(symbol(), 0, MODE_LOWER,0);

    Si quelqu'un peut m'aider, ce serait bien
    Merci
    Bonne soirée

  8. #8
    Membre lvl 75 fxconfidential deviendra bientot célèbre... Avatar de fxconfidential
    Date d'inscription
    April 2008
    Localisation
    Barcelone
    Messages
    84
    Pouvoir de réputation
    10

    Salut,

    Peut être que ce n'est pas le seul problème mais dans la portion de code que tu indiques, voilà le problème que je vois :

    Code:
    int start()
    {
    fracUp0 = iFractals(symbol(), 0, MODE_UPPER,0);
    fracLow0 = iFractals(symbol(), 0, MODE_LOWER,0);
    Dans le shift (dernier élément à droite faisant référence à la barre à partir de laquelle effectuer les calcul), tu as mis 0.

    Dans le cas des fractales, le programme est tout simplement incapable d'effectuer le calcul (il faut si je ne m'abuse au minimum 3 barres si ce n'est plus).

    ton code devrait donc être :

    Code:
    int start()
    {
    fracUp0 = iFractals(symbol(), 0, MODE_UPPER,3);
    fracLow0 = iFractals(symbol(), 0, MODE_LOWER,3);
    Peut être plus que 3 mais avec 3 tu devrais déjà obtenir des résultats différents de 0.

    Essayes la modification et tiens moi au courant.

    Bonne soirée.
    Dernière modification par fxconfidential ; 06/07/2008 à 15h27.

  9. #9
    katymary
    Guest

    re : Utilisation de ifractals re : Utilisation de ifractals

    Salut,
    Merci pour l'info, en fait pour rechercher la dernière fractale, il suffit de monter le temps, avec le shift .

    fracLow0=0;
    i=0;
    while(fracLow0==0)
    { fracLow0 = iFractals(NULL, 0, MODE_LOWER,i);
    i++
    ; }
    Et cela fonctionne.
    Bonne soirée.




    Citation Envoyé par fxconfidential Voir le message
    Salut,

    Peut être que ce n'est pas le seul problème mais dans la portion de code que tu indiques, voilà le problème que je vois :

    Code:
    int start()
    {
    fracUp0 = iFractals(symbol(), 0, MODE_UPPER,0);
    fracLow0 = iFractals(symbol(), 0, MODE_LOWER,0);
    Dans le shift (dernier élément à droite faisant référence à la barre à partir de laquelle effectuer les calcul), tu as mis 0.

    Dans le cas des fractales, le programme est tout simplement incapable d'effectuer le calcul (il faut si je ne m'abuse au minimum 3 barres si ce n'est plus).

    ton code devrait donc être :

    Code:
    int start()
    {
    fracUp0 = iFractals(symbol(), 0, MODE_UPPER,3);
    fracLow0 = iFractals(symbol(), 0, MODE_LOWER,3);
    Peut être plus que 3 mais avec 3 tu devrais déjà obtenir des résultats différents de 0.

    Essayes la modification et tiens moi au courant.

    Bonne soirée.

Discussions similaires

  1. Trading Auto ,Expert Advisors, MT4
    Par Herzou dans le forum Trading Divers
    Réponses: 331
    Dernier message: 05/02/2011, 14h44
  2. Expert Advisors Et Securite
    Par pierre dans le forum Utilisation des Plateformes de Trading
    Réponses: 8
    Dernier message: 17/01/2010, 13h35
  3. Expert Advisor "Dynamic Risk Strategy"
    Par Phil_Lille dans le forum Trading Divers
    Réponses: 2
    Dernier message: 12/06/2008, 15h47
  4. Bourse: Faire le point avec un expert
    Par Edellion dans le forum Comptoir des Traders Forex
    Réponses: 3
    Dernier message: 15/04/2008, 15h30
  5. existe il une réelle confidentialité des programmes Expert Advisor
    Par pierre dans le forum Utilisation des Plateformes de Trading
    Réponses: 1
    Dernier message: 03/01/2008, 17h28

Ajouter aux Favoris | Plan du site | Archives | Forex | Contact