Questions des débutants MQL5 MT5 MetaTrader 5 - page 205

 
torblin:
bonjour à tous, on dirait que le post n'est pas pour les questions des débutants oh gee whiz où demander avec dp 200 quel conseiller va marcher ?
n'importe qui de façon pratique.
 

Messieurs, je demande à avoir un œil expérimenté sur la "tentative numéro un". Le sujet est : J'ai obtenu un code en "croisant" un indicateur fractal écrit en MQL5 et l'indicateur azzx_larry-2.0, dont l'essence est d'exclure les soi-disant "barres intérieures" lors de la recherche d'un extremum (ci-joint). Lors de la compilation, nous obtenons quatre erreurs, toutes dans la partie du code empruntée à azzx et écrite en "4". Des questions se posent quant à l'interprétation des "erreurs" :

1. Pourquoi est-il proposé de placer l'instruction for (emplacement dans le code - souligné) dans Global. ('for' - les expressions ne sont pas autorisées sur une portée globale).


2. Pourquoi le compilateur considère-t-il que High[bar] et Low[bar] (également soulignés dans le code) ne sont pas déclarés, alors que plusieurs lignes plus haut dans le code il y a High[i] et Low[i] qu'il ne considère pas comme des erreurs.

('High' - identifiant non déclaré, 'Low' - identifiant non déclaré).


3) Il en va de même pour la limite - pourquoi le compilateur la considère comme non déclarée. ("limite" - identifiant non déclaré).

PS : une partie du code (indicateur fractal) est dérivé de la documentation mql5, et une partie du code de l'indicateur azzx_larry2.0 est dérivé de la codobase mql4, auteur azzx


//+------------------------------------------------------------------+
//|                                                     azzx 2.0.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_ARROW
#property  indicator_type2   DRAW_ARROW
#property  indicator_color1  White
#property  indicator_color2  White
#property  indicator_label1  "azzx Up"
#property  indicator_label2  "azzx Down"
//---- indicator buffers
double max[];
double min[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,max,INDICATOR_DATA);
   SetIndexBuffer(1,min,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,108);
   PlotIndexSetInteger(1,PLOT_ARROW,108);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,0);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//---
   if(rates_total<3)
      return(0);
//---
   if(prev_calculated<3)
     {
      limit=1;
      //--- clean up arrays
      ArrayInitialize(max,EMPTY_VALUE);
      ArrayInitialize(min,EMPTY_VALUE);
     }
   else limit=rates_total-1;

   for(i=limit;i<rates_total-1 && !IsStopped();i++)
     {
      //---- Up azzx
      if(High[i]>High[i+1] && High[i]>=High[i-1])
         max[i]=High[i];
      else max[i]=EMPTY_VALUE;

      //---- Low azzx
      if(Low[i]<Low[i+1] && Low[i]<=Low[i-1])
         min[i]=Low[i];
      else min[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 
   {
    l = left_bar(i);
    r = right_bar(i);
    
    if((l>0) && (r>0)) 
      {
      if(((Low[l]>=Low[i]) && (Low[r]>Low[i])) ||
         ((Low[l]>Low[i]) && (Low[r]>Low[i]))) 
      {
        min[i] =1;
      }
    }
 
    if((l>0) && (r>0)) 
      {
      if(((High[l]<= High[i]) && (High[r]<High[i])) ||
         ((High[l]<High[i]) && (High[r]<High[i]))) 
      {
        max[i] =1;
      }
    }

  // Отметка экстремумов.
  ArrayInitialize(buf_st_min,0);
  ArrayInitialize(buf_st_max,0);

  
  for(i=limit-1;i>0;i--) 
  {
    switch(min[i]) 
    {
      case 1 : buf_st_min[i]=Low[i]; break;
    }
 
    switch(max[i]) 
    {
      case 1 : buf_st_max[i]=High[i]; break;
    }
  }
  
  return(0);
}
 
// Проверка, что заданный бар - внутренний.
bool is_internal(int bar) 
{
  return((High[bar] < High[bar + 1]) && 
         (Low [bar] > Low [bar + 1]));
}
 
// Возвращает бар слева от заданного бара или -1.
int left_bar(int bar) 
    {
  int i;
  
  for(i=bar+1;i<limit-2;i++) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
 
// Возвращает бар справа от заданного бара или -1.
int right_bar(int bar) {
  int i;
  
  for(i=bar-1;i>0;i--) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- почистим график при удалении индикатора
   Comment("");
  }
Je pense que le code a High[i] et Low[i] quelques lignes au-dessus qu'il ne considère pas comme des erreurs. 3. De même pour la limite - pourquoi le compilateur la considère comme non déclarée
 

Reshetov:
А робот случаем не из Маркета?
только один.  что там продается - ужас. хотя наверное все они такие
 
beginner_mql:

il y a des High[i] et Low[i] dans le code, qu'il ne compte pas comme des erreurs. 3. Il en va de même pour la limite - pourquoi le compilateur la considère comme non déclarée

Vous avez un crochet de fermeture précoce ici :

   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 

Ou bien plusieurs lignes manquent, car elles ne sont pas déclarées.

    l = left_bar(i);
    r = right_bar(i);
 
vicmos:

Vous avez un crochet de fermeture précoce ici :

Ou bien plusieurs lignes manquent parce qu'elles ne sont pas annoncées

Merci de votre participation. La parenthèse a été déplacée à la fin du code, la compilation a donné 16 erreurs - quelque chose à travailler.

 
Bonjour à tous, pouvez-vous dire aux utilisateurs du forum qui travaillent avec le produit logiciel ITrade Chaos de G. Stanilevich ? Je l'aime beaucoup, mais il y a certaines choses que je ne comprends pas. Si cela ne vous dérange pas, qui travaille ou a travaillé avec ce produit, veuillez me contacter sur Skype. Mon skype est Furkat1962 Merci d'avance. Cordialement, Furkat
 
torblin:
je ne pense pas que ce post soit pour les débutants alors pourquoi ne pas me dire où demander à un débutant avec un 200dpa ce que fera le conseiller ?
Vous ne voulez pas comprendre que le FOREX n'est pas un commerce gratuit, mais c'est le même travail que n'importe quel autre commerce, seulement le retour est plus élevé quand vous mettez le travail !
 
J'ai ajouté un indicateur au graphique à partir de l'EA - comment puis-je colorer cet indicateur maintenant ? L'indicateur utilise 3 lignes, je voudrais qu'elles aient toutes 3 couleurs et épaisseurs différentes.
 
YAndrey:
J'ai ajouté un indicateur au graphique à partir de l'EA - comment puis-je colorer cet indicateur maintenant ? L'indicateur utilise 3 lignes, je voudrais qu'elles aient toutes 3 couleurs et épaisseurs différentes.
Vous pouvez utiliser des feutres sur l'écran).
 
zfs:
Vous pouvez utiliser des feutres sur l'écran).
Oui, vous pourriez le faire. Mais je ne voudrais pas le faire. Et j'aimerais entendre des gens intelligents ;). J'ai trouvé une solution en créant un indicateur personnalisé avec des paramètres d'entrée sous forme de couleurs pour chaque ligne, mais comment puis-je le rendre plus simple ? Donc, à nouveau une question. Je suis en train de créer un indicateur iBands dans mon Expert Advisor. Je le joins au tableau. Je voudrais dessiner ses 3 lignes avec des couleurs différentes. Est-ce possible ?