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
    Membre Star harry le ravi est très intéressant
    Date d'inscription
    November 2009
    Messages
    208
    Pouvoir de réputation
    9

    Soucis avec calcul indicateur OsMa Soucis avec calcul indicateur OsMa

    Bonjour à tous,

    Je suis en train de travailler sur un EA utilisant l'indicateur fourni par MT4 nommé OsMA.

    Cet indicateur créé un histogramme avec comme fonctions:

    Code:
    extern int FastEMA=12;
    extern int SlowEMA=26;
    extern int SignalSMA=9;
    
    .....
    
    for(int i=0; i<limit; i++)
          MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
    for(i=0; i<limit; i++)
          SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
    for(i=0; i<limit; i++)
          OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
    
    ....
    J'essais d'obtenir une valeur de OsmaBuffer[i] avec ce script:

    Code:
    double MacdBuffer[3];
    double SignalBuffer[3];
    double OsmaBuffer[3];
    int start()
      {
       MacdBuffer[0]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,1)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,1);
       SignalBuffer[0]=iMAOnArray(MacdBuffer,Bars,9,0,MODE_SMA,1);
       OsmaBuffer[0]=MacdBuffer[1]-SignalBuffer[1];
       string a = DoubleToStr(MacdBuffer[0],8);
       string b = DoubleToStr(SignalBuffer[0],8);
       string c = DoubleToStr(OsmaBuffer[0],8);
       MessageBox (a);
       MessageBox (b);
       MessageBox (c);
       return(0);
      }
    Normalement la valeur de OsmaBuffer[0] est de -0.0004052 or j'obtient 0.0000000. J'ai testé aussi dans des cas de OsmaBuffer[0]>0, c'est la même chose.

    J'ai peut être fait une erreure.

    Pouvez-vous m'aider?

    Merci

  2. #2
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    L'osma étant fourni dans les indicateurs par défauts, tu peux faire appel à lui avec la fonction "Iosma";
    Plus d'info ici : docs.mql4.com/indicators/iOsMA

    tu pourras donc faire un code un peux plus simple, en évitant de créer un MACD et donc de refaire le calcul de l'osma
    Dernière modification par Edellion ; 26/12/2009 à 19h58.
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

  3. #3
    Membre lvl 75 trader24 est actif et passionnant
    Date d'inscription
    August 2008
    Localisation
    Sarlat
    Messages
    87
    Pouvoir de réputation
    13

    Bonjour

    Je pense que l'ereur viens de là :
    OsmaBuffer[0]=MacdBuffer[1]-SignalBuffer[1];
    Tu dois mettre 0 car l'indice 1 n'est pas initialisé.
    PHIL

  4. #4
    Membre Star harry le ravi est très intéressant
    Date d'inscription
    November 2009
    Messages
    208
    Pouvoir de réputation
    9

    Aie oui j'ai fait une erreur sur mes fonctions.

    Maintenant j'ai écrit cela:

    Code:
    double MacdBuffer[1];
    double SignalBuffer[1];
    double OsmaBuffer[1];
    double OSMA[1];
    int i;
    int start()
      {
       i=1;
       MacdBuffer[0]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
       SignalBuffer[0]=iMAOnArray(MacdBuffer,Bars,9,0,MODE_SMA,i);
       OsmaBuffer[0]=MacdBuffer[0]-SignalBuffer[0];
       OSMA[0]=iOsMA(NULL,Bars,12,26,9,PRICE_OPEN,i);
       string a = DoubleToStr(MacdBuffer[0],8);
       string b = DoubleToStr(SignalBuffer[0],8);
       string c = DoubleToStr(OsmaBuffer[0],8);
       string d = DoubleToStr(OSMA[0],8);
       MessageBox (a);
       MessageBox (b);
       MessageBox (c);
       MessageBox (d);
       return(0);
      }
    On avance mais je n'obtient pas le résultat indiqué sur l'indicateur graphique.

    Voici ce que j'obtient sur les différents MessageBox:
    a = 0.00183284
    b = 0.00000000
    c = 0.00183284
    d = 0.00000000

    Même la fonction iOsMA ne me donne pas le bon résultat.

    Il dois y avoir quelque chose que je fait mal.

    Si vous avez des idées...

    Merci d'avance.

  5. #5
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    essaye en remplaçant la "i" par un 0, sur toutes les données "i"

    comme ça :
    iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,0)
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

  6. #6
    Membre Star harry le ravi est très intéressant
    Date d'inscription
    November 2009
    Messages
    208
    Pouvoir de réputation
    9

    J'ai utilisé la variable i pour aller plus vite afin de tester plusieures valeures.

    Si l'index de ces fonctions est égal à 0, alors on calcul ces fonction pour la valeur actuelle de la cotation, la derniere (1= avant dernière valeur , 2= avant avant derniere,..., Bars=derniere valeur).

    Je ne pense pas que cela vienne de là.

    Si vous utilisez l'indicateur OsMA sur un graph, vous devez obtenir un histogramme avec des barres positives et négatives.
    Or si je souhaite obtenir la valeure numérique de cet indicateur en faisant un Alert(iOsMA(Symbol(),Bars,12,26,9,PRICE_OPEN,1)); ou un MessageBox (DoubleToStr(iOsMA(Symbol(),Bars,12,26,9,PRICE_OPE N,i),8)); j'obtient respectivement 0 et 0.00000000 .

    Je ne penses pas mal utiliser la fonction iOsMA(), peut être que cette fonction n'est utilisable que en tant qu'indicateur?

  7. #7
    Membre Star pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice pipsforever is just really nice Avatar de pipsforever
    Date d'inscription
    November 2008
    Localisation
    Londres
    Messages
    1 340
    Pouvoir de réputation
    42

    peut être en essayant "NULL" à la place de "symbol()", sinon, ne ne vois pas du tout d'ou ça peut venir
    Chaque trade doit avoir seul et unique but ...... faire un nouveau plus haut sur votre équity!!!
    Chez moi, la prog c'est une affaire de famille!
    Même notre chien s'y met

  8. #8
    Membre Star harry le ravi est très intéressant
    Date d'inscription
    November 2009
    Messages
    208
    Pouvoir de réputation
    9

    Dans ce type de fonction NULL correspond à la cotation du graph. la fonction Symbol() fait la même chose.

    J'ai testé les deux et j'ai le même résultat.

  9. #9
    Membre Star harry le ravi est très intéressant
    Date d'inscription
    November 2009
    Messages
    208
    Pouvoir de réputation
    9

    Olé!

    Sa y est j'ai trouvé mon erreur pour la fonction iOsMA.

    Voici la fonction avant qui ne marchait pas:
    iOsMA(Symbol(),Bars,12,26,9,PRICE_OPEN,1);

    Voici les arguments:
    - la paire à étudier (ici Symbol() pour la paire du graphique associé au code)
    - la période du graphique (Ici je me trompe, j'indique tous les points du graphique, donc à changer).
    - la période courte
    - la période longue
    - la période du signal de la fonction iOsMA
    - sur quel prix appliquer la fonction (ici la cloture)
    - à quel emplacement appliquer la fonction (ici l'avant dernière)

    Donc je me suis trompé sur le deuxime argument.
    J'ai changé Bars par 0. 0 correspond à la période du graphique en cours mais on peut utiliser M1, M5, ....

    Donc voici ma fonction:
    iOsMA(Symbol(),0,12,26,9,PRICE_OPEN,1);

    Et la les résultats sont nikels.

    Merci à tous en tout cas de m'avoir aidé à avancer.

Discussions similaires

  1. Fichier de calcul avec des taux de réussite divers
    Par towan dans le forum Novice sur le Forex
    Réponses: 2
    Dernier message: 31/10/2009, 17h12
  2. Petit soucis plateforme/internet
    Par Weirdo dans le forum Novice sur le Forex
    Réponses: 7
    Dernier message: 27/03/2009, 19h35
  3. Petit soucis avec Excel et MT4
    Par gizmo dans le forum Novice sur le Forex
    Réponses: 10
    Dernier message: 03/03/2009, 10h55
  4. soucis entre zulutrade et fxdd
    Par taowill dans le forum Broker Forex
    Réponses: 0
    Dernier message: 10/02/2009, 21h36
  5. soucis sur MT4
    Par gvgh dans le forum Utilisation des Plateformes de Trading
    Réponses: 2
    Dernier message: 06/10/2008, 09h36

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