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

 

Bon internet et bonne santé à tous.


Question, qu'est-ce que je fais mal ? Les tableaux (STATIC) sont remplis, mais le calcul donne 0 (zéro). Pouvez-vous me dire ce que je n'ai pas dans mon code ? Pourquoi les éléments du tableau ne sont pas comparés et ajoutés... ? Merci


 double Open[60],High[60],Lo[60,Close[60]; int to_copy=60;
if(CopyOpen(NULL,PERIOD_H4,1,to_copy,Open)<to_copy)return(0);
   if(CopyHigh(NULL,PERIOD_H4,1,to_copy,High)<to_copy)return(0);
   if(CopyLow(NULL,PERIOD_H4,1,to_copy,Low)<to_copy)return(0);
   if(CopyClose(NULL,PERIOD_H4,1,to_copy,Close)<to_copy)return(0);
//----   
   //int start=to_copy*PeriodSeconds(PERIOD_H4)/PeriodSeconds(_Period);
   int start=to_copy;
   
   if(Tf==true)
     {
      if(prev_calculated==0)
         for(int j=1; j<=start; j++)
           {
            if(Open[j]>Close[j])
               candle+=Open[j]-Close[j];
            if(Close[j]>Open[j])
               candle+=Close[j]-Open[j];
            candleHL+=High[j]-Low[j];
            br+=1;
           } //for 
Comment(High[10],". ",candle);
candle дает результат 0 ноль
 
kopeyka2:

Bon internet et bonne santé à tous.


Question, qu'est-ce que je fais mal ? Les tableaux (STATIC) sont remplis, mais le calcul donne 0 (zéro). Pouvez-vous me dire ce que je n'ai pas dans mon code ? Pourquoi les éléments du tableau ne sont pas comparés et ajoutés... ? Merci


1) La boucle dépasse le tableau - si la taille du tampon est de 60, le dernier indice est 59, car le premier indice est 0.

2) Le code n'est pas complet - par exemple, comment Tf est-il défini et avec quoi la bougie a-t-elle été initialisée ?


* Lors de la copie des prix, l'indexation est décalée d'une unité, car vous copiez 60 éléments à partir du premier index, c'est-à-dire que les prix de la première barre fermée seront déjà sous l'index 0.

 

Comment fonctionne la fonction

IsStopped();

... et quelle est la liste des tâches qu'il accomplit ?


Dans l'aide il est écrit - "Vérifie la fin forcée du programme mql5". C'est-à-dire qu'il "regarde" en quelque sorte un certain nombre de lignes de code à venir et vérifie si quelque chose est correct ? Comment son domaine de responsabilité est-il fixé (par exemple, par ligne ou 10 lignes) ?


Je pensais que cela empêchait seulement la boucle d'aller au-delà du tableau, mais je l'ai vu dans le code FAMA avant de copier les prix High et Low.

 
Alexandr Sokolov:

Comment fonctionne la fonction

... et quelle est la liste des tâches qu'il accomplit ?


Dans l'aide il est écrit - "Vérifie la fin forcée du programme mql5". C'est-à-dire qu'il "regarde" en quelque sorte un certain nombre de lignes de code à venir et vérifie si quelque chose est correct ? Comment son domaine de responsabilité est-il fixé (par exemple, par ligne ou 10 lignes) ?


Je pensais que cela empêchait seulement la boucle d'aller au-delà du tableau, mais je l'ai vu encore dans le code FAMA avant de copier les prix High et Low

Ça ne ressemble à rien... C'est clairement écrit là. Il vérifie le drapeau... Relisez-le.

Документация по MQL5: Проверка состояния / IsStopped
Документация по MQL5: Проверка состояния / IsStopped
  • www.mql5.com
Возвращает true, если в системной переменной _StopFlag содержится значение, отличное от 0. Ненулевое значение записывается в переменную _StopFlag, если поступила команда завершить...
 
Alexandr Sokolov:

Comment fonctionne la fonction

... et quelle est la liste des tâches qu'il accomplit ?


Dans l'aide il est écrit - "Vérifie la fin forcée du programme mql5". C'est-à-dire qu'il "regarde" en quelque sorte un certain nombre de lignes de code à venir et vérifie si quelque chose est correct ? Comment son domaine de responsabilité est-il fixé (par exemple, par ligne ou 10 lignes) ?


Je pensais que cela empêchait seulement la boucle d'aller au-delà du tableau, mais je l'ai vu dans le code FAMA avant de copier les prix High et Low.

si un arrêt d'un programme MQL a lieu, le drapeau _StopFlag sera activé, et il peut être vérifié en utilisant une variable prédéfinie ou la fonction IsStopped() - si cela vous convient, utilisez-le de cette façon.

après avoir activé _StopFlag , le programme MQL a un peu de temps pour s'arrêter, puis le terminal le décharge de force.

l'utilisation la plus répandue - les scripts en boucle, vous ne devez pas

while(true)
{
...
}

il est préférable de l'écrire de cette façon :

while(!IsStopped())
{
...
}

Eh bien, parfois dans les calculs de coûts ou dans les grands cycles, ils utilisent...

for(int i=0; i<1 e6 && !IsStopped(); i++)
{

}
 

Bonjour à tous.

Pouvez-vous me dire s'il est possible de boucler sur des variables dont les noms sont : L1, L2, L3 ... Ln pour écrire dans un tableau à deux dimensions

extern string L1       = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475;";
extern string L2       = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465;"; 
extern string L3       = "0.94947;0.93222;0.91472;0.90077;0.89075;0.88658;0.86814;0.84687;0.82795;0.81132;0.79022;0.75976;"; 

...

extern string Ln      = " ... ";    
 
Alexandr Sokolov:

1) Dans la boucle, il y a un dépassement du tableau - si la taille du tampon est de 60, alors le dernier indice est 59, car le premier indice est 0.

2) Le code n'est pas complet - par exemple, comment Tf est-il défini et avec quoi la bougie a-t-elle été initialisée ?


* Lors de la copie des prix, l'indexation est décalée d'une unité, puisque vous copiez 60 éléments en commençant par le premier index, c'est-à-dire que les prix de la première barre fermée seront déjà sous l'index 0.

MERCI pour votre réponse. Code complet. Augmente la taille statique du tableau. Suppression de l'entrée du contrôle zéro dans les opérateurs. Un "mannequin" commun. J'essaie toujours de comprendre pourquoi ça ne s'ajoute pas. Qu'est-ce qui n'est pas dans mon code maintenant ? Merci pour les conseils. Je n'ai pas encore travaillé avec des tableaux statiques dans mql5......

J'AI MIS À JOUR LE CODE. La question est la même...

//+------------------------------------------------------------------+
//|                                                          123.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, "
//---- номер версии индикатора
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
//----
input int       nBars = 20;
//----
int    limit=0,br=0,to_copy=nBars;
double corrHL,corrOC;
double averpips,averpipsH;
double candle,candleHL;
double opn,hgh,lw,cls;
double Open[65],High[65],Low[65],Close[65];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
   Comment("");
  }
//+------------------------------------------------------------------+
//| 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(CopyOpen(NULL,PERIOD_H4,0,to_copy,Open)<to_copy)
      return(0);
   if(CopyHigh(NULL,PERIOD_H4,0,to_copy,High)<to_copy)
      return(0);
   if(CopyLow(NULL,PERIOD_H4,0,to_copy,Low)<to_copy)
      return(0);
   if(CopyClose(NULL,PERIOD_H4,0,to_copy,Close)<to_copy)
      return(0);
     int indexmass=ArraySize(Open);
//----
   if(Tf==true)
     {
      if(prev_calculated==0)
         for(int j=1; j<=to_copy; j++) // поменять на ноль?????
           {
            opn=Open[j];
            hgh=High[j];
            lw=Low[j];
            cls=Close[j];
            if(opn>cls)
               candle+=opn-cls;
            if(cls>opn)
               candle+=cls-opn;
            candleHL+=hgh-lw;
            br+=1;
           } //for j
      if(br>0)
        {
         averpips=candle/br;
         averpips=NormalizeDouble(averpips,_Digits);
         averpipsHL=candleHL/br;
         averpipsHL=NormalizeDouble(averpipsHL,_Digits);
        }
      }
   Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpipsHL ",averpipsHL);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpips ",averpips);
Les valeurs des éléments du tableau sont supérieures à zéro. Dans les calculs, zéro
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
stepystr:

Bonjour à tous.

Pouvez-vous me dire s'il est possible de boucler sur des variables dont les noms sont : L1, L2, L3 ... Ln pour écrire dans un tableau à deux dimensions

supprimé le post - vous connaissez les tableaux

mais toujours pas possible

comme option pour écrire une macro de substitution, écrivez un exemple spécifique - peut-être que quelqu'un écrira une macro pour votre tâche, je suis mauvais pour écrire des macros.

 

Les gens ! !! (Indice ... )))

Code complet. Augmentation de la taille du tableau statique. Suppression du contrôle de l'écriture zéro dans les opérateurs... Un "mannequin" commun. Je veux toujours comprendre pourquoi l'addition ne compte pas. Qu'est-ce qui n'est pas dans mon code maintenant ? Merci pour les conseils. Je n'ai pas encore travaillé avec destableaux statiques dans mql5......

J'AI MIS À JOUR LE CODE. La question est la même...

Les valeurs des éléments du tableau sont supérieures à zéro. Dans les calculs, zéro
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
kopeyka2:

MERCI pour la réponse. Code complet. Augmentation de la taille du tableau statique. Suppression de l'entrée du contrôle zéro dans les opérateurs... Un "mannequin" commun. J'essaie toujours de comprendre pourquoi ça ne s'ajoute pas. Qu'est-ce qui n'est pas dans mon code maintenant ? Merci pour les conseils. Je n'ai pas encore travaillé avec des tableaux statiques dans mql5......

J'AI MIS À JOUR LE CODE. La question est la même...

Je ne connais pas les indicateurs, mais c'est tout simplement inutile. Je l' ai déjà ))))

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(CopyOpen(NULL,PERIOD_H4,0,to_copy,Open)<to_copy)
      return(0);
   if(CopyHigh(NULL,PERIOD_H4,0,to_copy,High)<to_copy)
      return(0);
   if(CopyLow(NULL,PERIOD_H4,0,to_copy,Low)<to_copy)
      return(0);
   if(CopyClose(NULL,PERIOD_H4,0,to_copy,Close)<to_copy)
      return(0);
     int indexmass=ArraySize(Open);
Raison: