Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 9

 
-Aleks-:

J'essaie de donner un sens à tout ça. Donc, à votre avis, l'option correcte est SVA_03, n'est-ce pas ?

Oui, je suppose. Mais _02 est définitivement faux.
 
Dmitry Fedoseev:
Oui, je suppose. Mais _02 est définitivement faux.

Hmmm... j'ai trouvé une erreur en moi, maintenant il n'y a presque plus de divergence, voici l'original

//+------------------------------------------------------------------+
//|                                                       SVA_04.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property strict

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow

//---- input parameters
extern int RSIPeriod=14;
extern int Levl=50;
extern int TF=0;
//---- buffers
double MABuffer[];
double PosBuffer[];
double NegBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(1);
   SetIndexBuffer(0,MABuffer);
   SetIndexBuffer(1,PosBuffer);
   SetIndexBuffer(2,NegBuffer);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//----
//---- name for DataWindow and indicator subwindow label
//   short_name="RSI("+IntegerToString(RSIPeriod)+")";
   short_name="RSI("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   SetIndexLabel(1,"U");
   SetIndexLabel(2,"D");
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double rel,negative,positive,sma,x,y,Pos,Neg;
//----
   if(Bars<=RSIPeriod) return(0);
   if(TF!=0)
     {
      string name=WindowExpertName();
      for(i=0; i<Bars-counted_bars+1; i++)
        {
         int barIndex=iBarShift(NULL,TF,Time[i],false);
         MABuffer[i]=iCustom(Symbol(),TF,name,RSIPeriod,Levl,0,0,barIndex);
        }
      return(0);
     }

   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumn=0.0,sump=0.0;
      if(i==Bars-RSIPeriod-1)
        {
         int k=Bars-2;
         //---- initial accumulation
         while(k>=i)
           {
            rel=Close[k]-Close[k+1];
            if(rel>0) sump+=rel;
            else      sumn-=rel;
            k--;
           }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
        }
      else
        {
         //---- smoothed moving average
         rel=Close[i]-Close[i+1];
         if(rel>0) sump=rel;
         else      sumn=-rel;
         positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
         negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
        }
      PosBuffer[i]=positive;
      NegBuffer[i]=negative;
      i--;
     }
   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {

      x=PosBuffer[i+1];
      y=NegBuffer[i+1];
      if(x>0)sma=Close[i+1]+x;
      else sma=Close[i+1]-y;
      MABuffer[i]=sma;
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Voici la version de SVA_03 avec la correction.

//+------------------------------------------------------------------+
//|                                                       SVA_03.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property strict

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

//---- input parameters
extern int RSIPeriod=14;
extern int Levl=50;
extern int TF=0;
//---- buffers
double MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(1);
   SetIndexBuffer(0,MABuffer);

//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//----
//---- name for DataWindow and indicator subwindow label
//   short_name="RSI("+IntegerToString(RSIPeriod)+")";
   short_name="RSI("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);

   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double rel,negative,positive,sma,x,y,Pos,Neg;
//----
   if(Bars<=RSIPeriod) return(0);
   if(TF!=0)
     {
      string name=WindowExpertName();
      for(i=0; i<Bars-counted_bars+1; i++)
        {
         int barIndex=iBarShift(NULL,TF,Time[i],false);
         MABuffer[i]=iCustom(Symbol(),TF,name,RSIPeriod,Levl,0,0,barIndex);
        }
      return(0);
     }

   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumn=0.0,sump=0.0;
      if(i==Bars-RSIPeriod-1)
        {
         int k=Bars-2;
         //---- initial accumulation
         while(k>=i)
           {
            rel=Close[k]-Close[k+1];
            if(rel>0) sump+=rel;
            else      sumn-=rel;
            k--;
           }
         positive=sump/RSIPeriod;
         negative=sumn/RSIPeriod;
        }
      else
        {
         //---- smoothed moving average
         rel=Close[i]-Close[i+1];
         if(rel>0) sump=rel;
         else      sumn=-rel;
         positive=(Pos*(RSIPeriod-1)+sump)/RSIPeriod;
         negative=(Neg*(RSIPeriod-1)+sumn)/RSIPeriod;
        }

      x=Pos;
      y=Neg;
      Pos=positive;
      Neg=negative;
      if(x>0)sma=Close[i+1]+x;
      else sma=Close[i+1]-y;
      MABuffer[i]=sma;

      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

il a été remplacé

      x=positive;;
      y=negative;

à .

      x=Pos;
      y=Neg;
L'histoire se tient, mais les problèmes se posent à la barre zéro - il y a un écart, comment les racheter ?
Dossiers :
SVA_03.mq4  3 kb
SVA_04.mq4  4 kb
 
Mauvais fichier posté par erreur - modifié ci-dessus...
 
-Aleks-:
История сходится, но проблемы на нулевом баре - имеется расхождение, как их купировать?
Je comprends bien que le problème est dû à un surcalcul sur la barre de zéro, mais je n'arrive pas à trouver comment le résoudre ?
 

Bonjour !

Au secours ! J'ai besoin d'un code pour ouvrir un ordre en attente. Et dans 20 minutes après l'ouverture de l'ordre, s'il n'est pas fermé, le SL passera à 50 pips. Merci !

 

Bon après-midi

Veuillez m'aider à répondre à une question très simple (probablement). Il existe une fonction standard :

int  ArraySize(const void& array[]);

Que signifie "const void &" et comment l'utiliser ? ? Même une simple tentative d'écrire une fonction similaire conduit à une erreur de compilation :

int test(const void& array[]) {
    return ArraySize(array);
}

Erreur de compilation :'const' - utilisation illégale du type 'void'.

Comment utiliser correctement "const void &" lorsque j'écris mon propre code? Est-il possible de le faire ?

 
mql4-2016:

Bon après-midi

Veuillez m'aider à répondre à une question très simple (probablement). Il existe une fonction standard :

int  ArraySize(const void& array[]);

Que signifie "const void &" et comment l'utiliser ? ? Même une simple tentative d'écrire une fonction similaire conduit à une erreur de compilation :

int test(const void& array[]) {
    return ArraySize(array);
}

Erreur de compilation :'const' - utilisation illégale du type 'void'.

Comment utiliser correctement "const void &" lorsque j'écris mon propre code? Ou peut-on l'utiliser tout court ?

Remplacez void par le type de données qui doit stocker le tableau. La fonction standard est conçue comme un modèle.

En fait, cette fonction système est une fonction surchargée, et l'implémentation complète d'une telle surcharge est cachée au développeur de MQL4 :

intArraySize(
void&array[]// tableau à vérifier
);

En fait, le compilateur MQL4 insère une implémentation nécessaire pour chaque appel de cette fonction, par exemple, pour les tableaux de type entier comme ceci

intArraySize(
int&array[]// tableau avec des éléments de type int
);

Et pour un tableau de type MqlRates permettant de travailler avec des cotations au format de données historiques, la fonction ArraySize() peut être représentée comme suit

intArraySize(
MqlRates&array[]// tableau rempli de valeurs de type MqlRates
);

 
Kot:

Bonjour !

Au secours ! J'ai besoin d'un code qui ouvre un ordre en attente. Et dans 20 minutes après l'ouverture de l'ordre, s'il n'est pas fermé, le SL passera à 50 pips. Merci !

Comment puis-je vous aider ? Écrire pour vous ? Freelance, s'il vous plaît.
 
Artyom Trishkin:

Remplacez void par le type de données qui doit stocker le tableau. La fonction standard est conçue comme un modèle.

En fait, cette fonction système est une fonction surchargée, et l'implémentation complète d'une telle surcharge est cachée au développeur de programmes dans MQL4.

Ai-je bien compris qu'en MQL4/MQL5, la construction "const void &"... - est en fait une notation symbolique pour la référence et en pratique, elle ne peut pas être utilisée dans vos propres fonctions ?

Merci d'avance

 
mql4-2016:

Ai-je bien compris qu'en MQL4/MQL5, la structure "const void &"... - est en fait une notation symbolique pour le livre de référence et en pratique, elle ne peut pas être utilisée dans vos propres fonctions ?

Merci d'avance

Non.
Raison: