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 15
  1. #1
    Membre lvl 25 pymouss est sur la route de la réputation...
    Date d'inscription
    February 2011
    Messages
    29
    Pouvoir de réputation
    3

    Erreur de syntaxe MathPow? Erreur de syntaxe MathPow?

    Bonjour à tous,

    Dans le but d'effectuer un indic qui me permets de visualiser la valeur de l'écart type de ma courbe j'ai fais ce pti script :

    sachant que l'écart type ( ici ET ) =racine(Variance)
    et que variance ( ici VAR ) =1/n(somme( (valeur[x]-moyenne)² )

    Code:
    for(int i=0; i<=limit; i++)   //ini boucle pricipale
    {  
    
      for (int j=0;j<=100;j++)  //ini boucle pour calculer la moyenne
      { 
    
      somme1=(somme1+courbe[j]);   
    
      moyenne=somme1/100;   //valeur moyenne de la courbe pour les 100 derniers pt
     
      }
    
    
    
      for ( j=0;j<=100;j++) //ini boucle pour calculer la variance
      { 
    
      trans=(courbe[j]-moyenne);  // variable de transition qui prend la valeur de 
                                  //la courbe et la soustrait à la moyenne.
    
      somme2=MathPow(trans,2)+somme2; // somme du carré de la variable trans
                                                        // sur les 100 dernier pt.
    
    
      VAR=((1/100)*(somme2));   // car VAR=1/n( somme ((courbe[j]-moyenne)²)
    
      }
    
    
     
    
    ET[i]=MathPow(VAR,0.5); // ecart type=racine (VAR)
    
    }

    Comme résultats j'obtiens une valeur constance de 0 sur l'indic

    Le pb viendrais de la syntaxe de MathPow peut être? ( j'ai pourtant bien fait attention de bien dissocier les opérations ... )

    Qqun aurait une idée svp?

    Merci d'avance, bonne week end!

  2. #2
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    pymous,

    lorsque je dis au programme, pour vérifier le calcul du 1/n :
    double inverse ;
    inverse = 1/10;
    ça me donne pour valeur de inverse : 0.00000000 ; soit 0;

    si je met per = 10;
    inverse = 1/per;
    ça me donne inverse = 0.1 . c'est bon ?

    peut-être ça ça marche, mais il y a un problème, le MA_high[i] est à zéro parce que le marché est fermé ?

    ************************************************** ***********

    MA_high[i] = iMA(NULL, 0, MA, 0, MODE_LWMA, 2,i);
    double somme_MA, moyenne_MA,trans,trans2, VAR,inv, per;
    per = 10;
    for ( i= (per-1);i>=0; i--) somme_MA += MA_high[i];

    moyenne_MA = somme_MA/per;

    trans=MathPow((MA_high[i] - moyenne_MA),2) ;

    trans2 = somme_MA * trans;

    inv = 1/per;

    VAR = inv*trans2; // car VAR=1/n( somme ((courbe[j]-moyenne)²)

    ObjectDelete("inv");
    ObjectCreate ("inv", OBJ_LABEL,0,0,0);
    ObjectSet("inv", OBJPROP_XDISTANCE,555);
    ObjectSet("inv",OBJPROP_YDISTANCE,160);
    ObjectSetText("inv","inv ="+ inv, 14);
    ObjectSet("inv",OBJPROP_COLOR,Ivory);
    ************************************************** *********

    VAR = 1/per *(somme_MA*(MathPow((MA_high[i] - moyenne_MA),2) ) );

  3. #3
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    Dans le calcul des bollinger, ils prennent la différence entre le close de chaque bougie moins la valeur de la MA; La MA est déjà la moyenne des cours.

    x = Close[i] - MA[i]

    ensuite ecart_type = MathSqrt(sum(X²) /per);



    while(i>=0)
    {
    sum=0.0;
    k=i+BandsPeriod-1;
    oldval=MovingBuffer[i];
    while(k>=i)
    {
    newres=Close[k]-oldval;
    sum+=newres*newres;
    k--;
    }
    deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);;
    UpperBuffer[i]=oldval+deviation;
    LowerBuffer[i]=oldval-deviation;
    i--;
    }
    ************************************************** *
    per = nombre de bougie// calcul variance et ecart type

    while(i>=0)
    {
    sum=0.0;
    k=i+Per-1; // on retourne en arrière
    oldval=MA[i];
    while(k>=i) // On fait les comptes vers l'avant
    {
    newres=Close[k]-oldval; // Close[k] - MA[i]
    sum+=newres*newres;
    k--;
    }
    variance = sum/ Per
    ecart_type = MathSqrt(sum/Per);;
    i--;
    }
    Dernière modification par jeanjo ; 03/07/2011 à 15h30.

  4. #4
    Membre lvl 25 pymouss est sur la route de la réputation...
    Date d'inscription
    February 2011
    Messages
    29
    Pouvoir de réputation
    3

    Merci du temps que tu as pris pour répondre!

    J'ai analysé un peu ce que tu m'a posté, en effet j'avais testé le 1/"variable" et avais vu que le résultat était le bon, mais l'idée du marché fermé ne m'avait pas traversé l'idée!

    Je décortique ton message et je te tiens au courant de mon avancé; merci beaucoup pour ton aide, d'autant que certaines syntaxes m'étaient inconnues ( somme_MA += MA_high[i]; )!

  5. #5
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    De rien pymouss, tiens_moi au courant.

    Il faut utiliser la même boucle que celle des bollingers, les calculs se font de l'arrière vers l'avant, la boucle doit être dans ce style :

    k=i+Per-1; // retour en arrière
    while(k>=i) // puis compte vers l'avant
    {
    sum += MA[k];

    // on retourne en arrière , si la periode est 10, k=9 <=> de 0 à 9=10 bougies

  6. #6
    Membre lvl 25 pymouss est sur la route de la réputation...
    Date d'inscription
    February 2011
    Messages
    29
    Pouvoir de réputation
    3

    salut!

    J'en suis à ton premier message :
    ************************************************** ***********

    MA_high[i] = iMA(NULL, 0, MA, 0, MODE_LWMA, 2,i);
    double somme_MA, moyenne_MA,trans,trans2, VAR,inv, per;
    per = 10;
    for ( i= (per-1);i>=0; i--) somme_MA += MA_high[i];

    moyenne_MA = somme_MA/per;

    trans=MathPow((MA_high[i] - moyenne_MA),2) ;

    trans2 = somme_MA * trans;

    inv = 1/per;

    VAR = inv*trans2; // car VAR=1/n( somme ((courbe[j]-moyenne)²)

    ObjectDelete("inv");
    ObjectCreate ("inv", OBJ_LABEL,0,0,0);
    ObjectSet("inv", OBJPROP_XDISTANCE,555);
    ObjectSet("inv",OBJPROP_YDISTANCE,160);
    ObjectSetText("inv","inv ="+ inv, 14);
    ObjectSet("inv",OBJPROP_COLOR,Ivory);
    ************************************************** *********

    VAR = 1/per *(somme_MA*(MathPow((MA_high[i] - moyenne_MA),2) ) );
    Par contre une chose que je pige pas :

    le trans2 = somme_MA * trans;

    Vu que trans2 doit être la somme de tout les trans, j'aurais plus vu :

    for (i=(per-1);i>=0;i--) trans2 +=MathPow((MA_High[i]-moyenne_MA),2)

    Qu'en penses tu stp?

    Merci d'avance

  7. #7
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    Je crois que tu as raison

  8. #8
    Membre lvl 25 pymouss est sur la route de la réputation...
    Date d'inscription
    February 2011
    Messages
    29
    Pouvoir de réputation
    3




    Par contre je suis en train de peter un cable ... je test pour l'instant le :

    MA_high[i] = iMA(NULL, 0, MA, 0, MODE_LWMA, 2,i);
    double somme_MA, moyenne_MA,trans,trans2, VAR,inv, per;
    per = 10;
    for ( i= (per-1);i>=0; i--) somme_MA += MA_high[i];

    moyenne_MA = somme_MA/per;

    trans=MathPow((MA_high[i] - moyenne_MA),2) ;

    trans2 = somme_MA * trans;

    inv = 1/per;

    VAR = inv*trans2; // car VAR=1/n( somme ((courbe[j]-moyenne)²)

    ObjectDelete("inv");
    ObjectCreate ("inv", OBJ_LABEL,0,0,0);
    ObjectSet("inv", OBJPROP_XDISTANCE,555);
    ObjectSet("inv",OBJPROP_YDISTANCE,160);
    ObjectSetText("inv","inv ="+ inv, 14);
    ObjectSet("inv",OBJPROP_COLOR,Ivory);
    D'ailleurs, le fait que le marché soit fermé n'influe pas puisque l'indic lit les valeur des bougies ( sans se soucier des jours ). Par exemple dans une iMA ou un Stoch, l'indic ne prend pas en compte les jours fermés si?

    Je l'étudie étape par étape :

    Code:
    //+------------------------------------------------------------------+
    //| Index.mq4 |
    //| Copyright © 2010, Oluru |
    //| http://www.metaquotes.net |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2010, MetaQuotes Software Corp."
    #property link "http://www.metaquotes.net"
    
    #property indicator_separate_window
    
    #property indicator_buffers 1
    #property indicator_color1 Orange
    
    
    
    
    
    
    
    
    double x;
    double moyenne_MA[];
    
    
    
    extern int periodima=12;
    int period=1440;
    
    
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    
    
    
    //---- indicators
    IndicatorShortName("Indic Co-int");
    
    
    
    
    
    
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,moyenne_MA);
    
    
    
    
    
    
    
    
    
    
    
    
    //----
    
    return(0);
    }
    //+------------------------------------------------------------------+
    //| script program start function |
    //+------------------------------------------------------------------+
    int start()
    {
    int limit;
    int counted_bars=IndicatorCounted();
    //---- check for possible errors
    if (counted_bars<0) return(-1);
    //---- last counted bar will be recounted
    if (counted_bars>0) counted_bars--;
    limit=Bars - counted_bars;
    //----
    
    
    
    double somme_MA,trans,trans2, VAR,inv, per;
    per = 10;
    
    for(int i=(limit-1); i>=1; i--)    // comptage pour chaque bougie
    
    {   
    somme_MA=0;                        
    
    
            for ( int j= (per-1);j>=1; j--)    // comptage de la somme des 10 dernières bougies
    
           {
           x = iClose (NULL,period,j);
           somme_MA += x;
           }
    
    moyenne_MA[i] = somme_MA/per;     //moyenne des 10 dernières bougies.
    
    
    Comment (moyenne_MA[i]);
    
    }
    
    
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    Il ne m'affiche rien du tout ... et le comment indique 1.1663 alors que mes iClose oscillent entre 1.28 et 1.30 ...

    Je ne vois absolument pas d'où pourrai venir l'erreur, aurait tu une idée stp?

    Merci encore pour l'aide apportée!
    Dernière modification par pymouss ; 04/07/2011 à 22h51.

  9. #9
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    J'ai regardé ton programme, je ne comprend pas pourquoi il ne marche pas J'essaierai de voir plus tard, sauf si je suis parti en vacances, (demain ou après demain ) :

    Celui-ci a l'air bien marcher :

    #property indicator_separate_window

    #property indicator_buffers 1
    #property indicator_color1 Orange

    double x;
    double moyenne_MA[];

    extern int period_ma = 10;
    int period=1440;

    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //---- indicators
    IndicatorShortName("Indic Co-int");

    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,moyenne_MA);

    return(0);
    }
    //+------------------------------------------------------------------+
    //| script program start function |
    //+------------------------------------------------------------------+
    int start()
    {
    int i,pos,counted_bar = IndicatorCounted();
    if(counted_bar <0) return(-1); // en cas d'erreur
    i = Bars - period_ma; // ligne sans importance
    if(counted_bar > period_ma) i = Bars - counted_bar -1; // i = index
    // i = bougie 0 (zéro)
    double sum;
    while(i>=0)
    {
    pos = i + period_ma -1; // 0+10-1 = 9;
    // on retourne 9 bougie en arrière; de 0 à 9=10 = period_ma
    sum =0;
    for (int k=pos; k>=i;k--) // marche avant de 9 à 0
    sum+=Close[k]; // fin de la boucle

    moyenne_MA[i]=sum/period_ma;
    //---- zero initial bars
    Comment (moyenne_MA[i]);
    i--;
    }
    //----
    return(0);
    }
    //+-----------------------------------------------+

  10. #10
    Membre Performance jeanjo est sur la route de la réputation...
    Date d'inscription
    November 2010
    Messages
    181
    Pouvoir de réputation
    3

    Pymouss, J'ai fais plusieurs essais, les premiers ne marchaient pas bien, le dernier c'est celui-ci, je ne suis pas sûr non plus pour celui_ci que les résultats soient conformes avec ce qui est recherché, mais il affiche des résultats :

    while(i>=0)
    {
    MA_high[i] = iMA(NULL, 0, period, 0, MODE_LWMA, 2,i);

    double somme_MA, moyenne_MA, trans, trans2, VAR, inv, difference;
    int per, k;

    k = i+per-1;
    for (int z= k; z>=i; z--) somme_MA += MA_high[z];
    moyenne_MA = somme_MA/per; // = moyenne de la courbe sur 10 bars

    .........................// nouvelle boucle pour le carré de la différence

    for (z= k; z>=i; z--) trans2 +=MathPow((MA_high[z]-moyenne_MA),2);

    VAR = trans2 / per; // car VAR=1/n( somme ((courbe[j]-moyenne)²)

    i--;
    }
    //----

Discussions similaires

  1. Erreur 4107 MT4
    Par tyty13 dans le forum Programmation
    Réponses: 1
    Dernier message: 08/11/2010, 21h20
  2. arnaque ou erreur ?
    Par london511 dans le forum Comptoir des Traders Forex
    Réponses: 2
    Dernier message: 24/06/2010, 16h14
  3. erreur ea...
    Par VOL344 dans le forum Programmation
    Réponses: 1
    Dernier message: 14/05/2009, 15h46
  4. Erreur Code MQL
    Par condor666 dans le forum Utilisation des Plateformes de Trading
    Réponses: 2
    Dernier message: 11/02/2009, 22h29

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