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

 
yiduwi:

Merci. Pouvez-vous me dire pourquoi la flèche est placée sur la deuxième barre et non sur la première.

Vous avez donc placé la flèche sur la deuxième barre et non sur la première - elle ne se dessine pas toute seule, n'est-ce pas ? )))

Vous avez dû en ajouter un supplémentaire ici BufferDN[i+1]=high[i+1] ;

 
Igor Makanu:

vous avez donc placé la flèche sur la deuxième barre et non sur la première - elle ne se dessine pas toute seule, n'est-ce pas ? )))

Je suppose que vous avez dû en ajouter un supplémentaire ici BufferDN[i+1]=high[i+1] ;

Euh, sans l'un, en général la flèche est placée sur la troisième barre, Code petit, où ai-je foiré ?

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//--- indicator buffers
double         BufferUP[];
double         BufferDN[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);

//---

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<3) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-3;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if (fabs(high[i+1]-high[i+2]) <= 0.0*_Point)
        {
         BufferDN[i]=high[i];
        }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
Il va à la première barre, si c'est le cas.
BufferDN[i+2]=high[i+2];
Je ne comprends pas.
 
Igor Makanu:

Voici la solution, mais je pense qu'il n'y a rien que je n'ai envisagé.

La logique dit que c'est juste.

 
yiduwi:

Ugh, pas d'unité, en général la flèche est mise sur la troisième barre, Code petit, où est-ce que je me suis trompé ?

C'est mis sur la première barre, si c'est le cas je ne comprends pas.

Probablement oui, mais je ne l'écris pas bien sous MT5, je peux me tromper

//+------------------------------------------------------------------+
//|                                                          tst.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

input int Pips=5;
//--- indicator buffers
double         BufferUP[];
double         BufferDN[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit=rates_total-prev_calculated;
   if(limit>1 || prev_calculated==0)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

Probablement, mais je n'écris pas sous MT5, je peux me tromper.

Aussi, sur la deuxième barre me met)

 
Igor Makanu:

Merci, c'est un des bugs, mais je n'arrive toujours pas à trouver comment passer de 159,002 secondes à 44 heures 10 minutes 2 secondes (calculatrice en ligne )) )


Voici la solution, mais je pense qu'il me manque quelque chose.

2019.06.18 11:46:22.691 tstss EURUSD,H1 : h = 44 , m = 10 , s = 2

Cela me semble plus simple

 int timeinsec = 159002;
 int sec = timeinsec%60;
 int min = ((timeinsec-sec)%3600)/60;
 int hou = (timeinsec-sec-min)/3600;
 
yiduwi:

Aussi, sur la deuxième barre me met)

La flèche ne doit être placée que là où la condition est remplie, oui d'ailleurs je me souviens que pour MT5 il est préférable d'avoir une condition de relâchement complet :

if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i]; else BufferDN[i]=EMPTY_VALUE;
Alexey Viktorov:

Je pense que c'est plus facile.

Je l'ai eu ! Merci ! C'est exactement ce que je voulais !

 
Il y a un code avec beaucoup d'appels d'impression. Y a-t-il un moyen de les désactiver rapidement sans enlever Print du code et de les réactiver ensuite ? C'est la seule option que je vois pour l'instant :
bool L=true;
if(L)Print("123");

Par exemple, remplacer tous les "Print(" par "if(L)Print(", ou d'autres options ?

 
pivomoe:
Il y a un code où beaucoup d'appels d'impression sont faits. Existe-t-il un moyen de les désactiver rapidement sans supprimer Print du code et sans le réintégrer ? Pour l'instant, je ne vois que cette option :

Par exemple, remplacer tous les "Print(" par "if(L)Print(", et peut-être d'autres options ?

Dans les paramètres d'entrée, sortez le drapeau "Print". Il fonctionnera comme votre code, mais le drapeau lui-même (variable bool) sera dans les paramètres d'entrée.

 

Bonjour !

L'optimisation par tous les symboles dans le testeur MT5 refuse de fonctionner...

Pouvez-vous m'éclairer sur la manière de le faire fonctionner ?

MERCI.