Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Page 1 sur 2 1 2 DernièreDernière
Affichage des résultats 1 à 10 sur 12
  1. #1
    Membre Performance TAAD est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    164
    Pouvoir de réputation
    6

    iMAOnArray iMAOnArray

    Bonjour,

    J'ai besoin d'utiliser la fonction iMAOnArray mais j'ai un peu de mal...
    Si quelqu'un a de la doc ou un exemple commenté (francais ou anglais) je suis preneur.

    Je ne comprends pas pourquoi les valeurs de l'EA MA0,MA1 et DMA reste à Zéro :

    Code:
    double buffer[];
    double MA0, MA1, DMA;
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    return(0);
      }
     //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
    {
    int limit,i;
    int counted_bars=IndicatorCounted();
    
    //---- last counted bar will be recounted
    if(counted_bars>0) counted_bars--;
    limit=Bars-counted_bars;
    
    //---- MA difference counted in the 1-st buffer
    for(i=0; i<limit; i++)
    {
    buffer[i]=iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,i)*2-iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,i);
    }
    //---- HMA counted in the 0-th buffer
    MA0=iMAOnArray(buffer,0,20,0,MODE_LWMA,0);
    MA1=iMAOnArray(buffer,0,20,0,MODE_LWMA,1);
    DMA=MA0-MA1;
    Comment ("limit :",limit,"\nValeur DMA : ",DMA,"\nValeur MA : ",DoubleToStr(MA0,5),"\nValeur MA1 : ",MA1);
    }
    D'avance merci pour votre aide
    TAAD

  2. #2
    Membre Performance Guonzo deviendra bientot célèbre...
    Date d'inscription
    April 2009
    Messages
    168
    Pouvoir de réputation
    8

    Salut TAAD,

    en fixant la taille du tableau à l'initialisation, cela fonctionne :

    Code:
    double buffer[1003];
    double MA0, MA1, DMA;
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    return(0);
      }
     //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
    {
    int limit,i;
    int counted_bars=IndicatorCounted();
    
    //---- last counted bar will be recounted
    if(counted_bars>0) counted_bars--;
    limit=Bars-counted_bars;
    
    //---- MA difference counted in the 1-st buffer
    for(i=0; i<limit; i++)
    {
    buffer[i]=iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,i);//*2-iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,i);
    //Print(iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,i)*2);
    }
    //---- HMA counted in the 0-th buffer
    MA0=iMAOnArray(buffer,0,20,0,MODE_LWMA,0);
    MA1=iMAOnArray(buffer,0,20,0,MODE_LWMA,1);
    DMA=MA0-MA1;
    Comment ("limit :",limit,"\nValeur DMA : ",DMA,"\nValeur MA : ",DoubleToStr(MA0,5),"\nValeur MA1 : ",MA1);
    }
    PS : 2*a-a = a ...

    bonne soirée,

    Guonzo.

  3. #3
    Membre Performance TAAD est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    164
    Pouvoir de réputation
    6

    Merci guonzo

    je sais que le code de l'ea est stupide, c'est juste un exemple.
    Comment faire pour fixer la taille du tableau sur limit car buffer[limit] ne fonctionne pas ?
    De plus le code vient d' 1 indic dans lequel la taille du tableau n' est pas fixe et ça marche, pourquoi ?

    Merci pour ton aide

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

    Il manque plein de choses.

    J'ai l'impression que vous souhaitez faire un indicateur avec cette fonction.

    Mais bon vous pouvez re-dimentioner le tableau "Buffer[]" suivant "limit" en utilisant la fonction suivante juste avant la boucle "for":
    Code:
    ArrayResize(buffer,limit);
    La documentation MQL4 est super bien faite, vous pouvez tout faire avec elle.
    MQL4 Documentation
    Comme d'hab, faut lire le manuel.

    Bon courage

  5. #5
    Membre Performance TAAD est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    164
    Pouvoir de réputation
    6

    Effectivement, je ne sais pas pourquoi mais j ai oublie d' aller voir le doc officielle.

    En fait, je transforme un indic en ea.
    Le code sur cette partie est identique mais a priori les tableaux ne se gère pas de la même façon dans un indic et dans un ea.
    Je cherche a comprendre pourquoi ?
    Le but est de m'assurer d'avoir le même résultat.

    Je vais essayer de redimensionner le tableau.

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

    Pourquoi aller jusqu'à limit?

    Pour info, le shift 0 correspond à la dernière bougie de l'indice (celle qui est en cours).

    Si vous souhaitez analyser les X dernière bougies de l'indice alors initialisez le tableau à X et faites la boucle for (int i=0 ; i<X;i++).

  7. #7
    Membre Performance TAAD est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    164
    Pouvoir de réputation
    6

    Citation Envoyé par harry le ravi Voir le message
    Pourquoi aller jusqu'à limit?
    Parce que l'indicateur va jusque limit


    A priori le problème vient de: int counted_bars=IndicatorCounted();

    counted_bars=-1 dans l'EA et 2654 dans l'indicateur.

    Y a t'il un équivalent à IndicatorCounted() pour les EA ?
    Dernière modification par TAAD ; 13/04/2010 à 16h25.

  8. #8
    Membre Star louprebel is just really nice louprebel is just really nice louprebel is just really nice louprebel is just really nice Avatar de louprebel
    Date d'inscription
    February 2009
    Messages
    1 065
    Pouvoir de réputation
    42

    Citation Envoyé par TAAD Voir le message
    Parce que l'indicateur va jusque limit


    A priori le problème vient de: int counted_bars=IndicatorCounted();

    counted_bars=-1 dans l'EA et 2654 dans l'indicateur.

    Y a t'il un équivalent à IndicatorCounted() pour les EA ?
    Non, c'est exactement la même chose dans un EA et un indicateur.

    IndicatorCounted() ne peut varier que sur des valeurs positives (>=0) ...

    Alors si counted_bars=-1 il y a un souci

    Cordialement,
    Loup
    --------------------------------------------------------------------------------------
    Gestion des trades : EA Trade Management, par Tanaïs et Loup REBEL
    ----------------------- Indicateur de Money Management
    Chandelier Multi TF : Graphique multi Chandeliers Multi Time Frame

  9. #9
    Membre Performance TAAD est sur la route de la réputation...
    Date d'inscription
    June 2008
    Messages
    164
    Pouvoir de réputation
    6

    effectivement, il doit y avoir un souci...

    J'ai resolu le problème grace à la fonction icustom mais je souhaite tjrs integrer le tableau dans l'EA...

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

    Vous allez utiliser toutes les indications pour faire faire fonctionner l'EA?


    Personnellement je remonte au max à i = 2 pour mettre en place mes stratégies.


    Si vous avez un indice à 10000 bougies, vous allez analyser les 10000 bougies d'après votre méthode.

    Est-ce vraiment necessaire?
    Il va vous falloir une gros puissance de calcul pour que votre EA soit réactif.

    Un indicateur idéalement calcul le i (correspond à une valeur DATETIME) une seule fois, ca veut dire en gros que lorsqu'on place l'indicateur, il va travailler pas mal au début pour faire toutes les barres non indiqués puis il va bosser dès qu'il une nouvelle barre.

    Avec un EA comme vous l'entendez, il va bosser sur toutes les barres à chaque tick.... ca va ramer un max.

    Je ne connais pas votre stratégie mais essayer de voir quelles barres vous analysez au max à chaque tick :
    - de la barre en cours jusqu'à la 10eme.
    - juste la barre en cours
    - juste la dernière barre finie
    - de la dernière barre finie à la 10ème
    - ....

    Une fois cela défini il sera beaucoup plus simple de vous aider.

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