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

 
Dmitry Belov:

Bonjour, pouvez-vous me dire pourquoi ZigD[0] ne sort pas dans sommente ?

Est-ce que ZigM[0] fonctionne ?

 
Alexey Viktorov:

Est-ce que ZigM[0] sort ?

Oui, c'est vrai...


	          
 
Dmitry Belov:

Oui, c'est vrai...

Désolé, je n'ai pas regardé le code attentivement...

Lorsque zzz>0, cela signifie que la valeur peut être égale à la barre haute ou basse. Respectivement, cette valeur doit être comparée à ces valeurs et, selon le résultat, placée dans l'un ou l'autre tableau.

 
Alexey Viktorov:

Désolé, je n'ai pas regardé le code attentivement...

Lorsque zzz>0, cela signifie que la valeur peut être égale à la barre haute ou basse. En conséquence, cette valeur doit être comparée à ces valeurs et, selon le résultat, placée dans l'un ou l'autre tableau.

C'est ce que je fais, mais pour une raison quelconque, il ne sort pas ZigD[] et ne sort pas du tout si j'ajoute ZigD, si je le commente, il sort tout.

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz;
double HZZ[], ZigM[];
int ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
//---
   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 shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
     if(IsStopped()) 
     break; 
     }
    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1]);
    Comment(ZigD[0]);
   return(0);
  }
  //+-  
 

Bonjour à tous !

Je n'ai pas trouvé de "fenêtre" plus appropriée pour aborder une question sur MT4.

A l'ouverture du terminal, la "ligne d'état", le "standard", les "graphiques", les"instruments graphiques" et les"périodes graphiques" disparaissent soudainement. Je l'éteins et la prochaine fois que je l'ouvre à nouveau, j'obtiens un terminal vide, uniquement le graphique actuel.

Je n'ai jamais vu un tel bug auparavant et je ne sais pas quoi faire. Veuillez me conseiller. Je ne sais pas quoi faire.

 
Vadens:

Bonjour à tous !

Je n'ai pas trouvé de "fenêtre" plus appropriée pour aborder une question sur MT4.

A l'ouverture du terminal, la "ligne d'état", le "standard", les "graphiques", les"instruments graphiques" et les"périodes graphiques" disparaissent soudainement. Je l'éteins et la prochaine fois que je l'ouvre à nouveau, j'obtiens un terminal vide, uniquement le graphique actuel.

Je n'ai jamais vu un tel bug auparavant et je ne sais pas quoi faire. Veuillez me conseiller. Je ne sais pas quoi faire.

Il semble que vous ayez un problème de droits d'écriture dans le répertoire où se trouve le terminal. Si vous vous exécutez en tant qu'utilisateur restreint, déplacez le terminal dans un répertoire où vous pouvez accéder aux fichiers/dossiers.

 
Vadens:

Bonjour à tous !

Je n'ai pas trouvé de "fenêtre" plus appropriée pour aborder une question sur MT4.

A l'ouverture du terminal, la "ligne d'état", le "standard", les "graphiques", les"instruments graphiques" et les"périodes graphiques" disparaissent soudainement. Je l'éteins et la prochaine fois que je l'ouvre à nouveau, j'obtiens un terminal vide, uniquement le graphique actuel.

Je n'ai jamais vu un tel bug auparavant et je ne sais pas quoi faire. Veuillez me conseiller. Je ne sais pas quoi faire.

Vous disposez du mode plein écran (F11)
 
Dmitry Belov:

C'est ce que je fais, mais pour une raison quelconque, il n'affiche pas ZigD[] et n'affiche rien du tout si j'ajoute ZigD, mais si je le commente, il affiche tout.

Encore une fois, mon inattention...

J'espère que ce sera différent maintenant :))))

Le commentaire ne clignote pas ? ?? Il est préférable de l'écrire comme ceci

    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1],"\n" // Это перенос комментария на следующую строку
           , ZigD[0]);
 
Alexey Viktorov:

Encore une fois, mon inattention...

J'espère que ce sera différent maintenant :))))

Le commentaire ne clignote pas ? ?? C'est mieux de l'écrire comme ça.

Merci, j'ai déjà trouvé moi-même, j'avais juste besoin d'initialiser le tableau en tant que double et ça a marché. Voici le code de l'indicateur si vous voulez, mais c'est encore brut, j'ai d'autres idées... Dites-moi, savez-vous comment vous pouvez afficher un somment dans le coin inférieur gauche ou au milieu en haut ?

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz, SredDlin;
double HZZ[], ZigM[];
double ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexBuffer(2,ZigD);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
   SredDlin=0.0;
//---
   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 shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
   //  if(IsStopped()) 
  //   break; 
     }
     for(dd=0;dd<=nn;dd++)
     {
        if(ZigD[dd]>0.0){SredDlin+=(ZigD[dd+1]-ZigD[dd]);}
        if(IsStopped()) 
     break;
     } 
    Comment("Средний размах = ",SredRazmax/nn,"//","Средняя продолжительность = ",SredDlin/nn,"//",ZigM[0],"//",ZigM[1],"//",ZigD[0],"//",ZigD[1]);
    return(0);
  }
  //+-  
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Машинное обучение в трейдинге: теория и практика...
 
Dmitry Belov:

Merci, j'ai pu le comprendre moi-même, j'avais juste besoin d'initialiser le tableau en tant que double et tout a fonctionné. Voici le code de l'indicateur si vous voulez, mais c'est encore brut, il y a d'autres idées... Dites-moi, savez-vous comment vous pouvez afficher le somment dans le coin inférieur gauche ou au milieu en haut ?

Ce n'est pas possible. Seulement si vous utilisez l'objet graphique OBJ_LABEL