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

 
Vitaly Muzichenko:

---

P.S. En général, il y a beaucoup de choses qui ne vont pas avec le même tableau, par exemple.

Merci pour l'aide et pour le conseil !!! Voici comment il se compile

//+------------------------------------------------------------------+
//|                                                        Funct.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int UP; //Глобальная переменная

//_____________________________________Массивы для Handleлов____________________________________
double HandleFractalDown_W1[],HandleFractalUP_W1[];    // одномерный динамический массив

//_____________________________________Массивы для фракталов____________________________________
double FractalDown_W1[],FractalUP_W1[];    // одномерный динамический массив

//-----------------------------------------------------------------------------------------------
int  Fractal_W1=iFractals(Symbol(),PERIOD_W1); //Хендл индикатора

//----------------------------------------------------------------------
void OnStart()
  {
   CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries(FractalUP_W1,true);  //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

  Search_Fractal(PERIOD_W1, HandleFractalUP_W1, FractalUP_W1); //Пользовательская функция заполнения массива FractalUP_W1 значениями
                                                               //верхних фракталов  

  }
//+------------------------------------------------------------------+

//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике
   
   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
        }
     }
  }
//+------------------------------------------------------------------+
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • 2021.02.13
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
J'ai modifié un peu le système, il fonctionne presque comme il faut, mais avant 51.20, il se bloque avec une erreur.

Tableau de fonctions (BRN, W1) hors limites

//+------------------------------------------------------------------+
//|                                                        Funct.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int UP; //Глобальная переменная

//_____________________________________Массивы для Handleлов____________________________________
double HandleFractalDown_W1[],HandleFractalUP_W1[];    // одномерный динамический массив

//_____________________________________Массивы для фракталов____________________________________
double FractalDown_W1[],FractalUP_W1[];    // одномерный динамический массив

//-----------------------------------------------------------------------------------------------
int  Fractal_W1=iFractals(Symbol(),PERIOD_W1); //Хендл индикатора

//----------------------------------------------------------------------
void OnStart()
  {
   CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries(HandleFractalUP_W1,true);  //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries(HandleFractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

  Search_Fractal(PERIOD_W1, HandleFractalUP_W1, FractalUP_W1); //Пользовательская функция заполнения массива FractalUP_W1 значениями
                                                               //верхних фракталов  
  }
//+------------------------------------------------------------------+



//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике

   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert("Frakt= ",fract_mass[UP]);
        }
     }
  }
//+------------------------------------------------------------------+
Qu'est-ce que ça peut être ?
 
Kira27:
Je l'ai un peu modifié, il fonctionne presque comme il faut, jusqu'à 51.20 où il se plante avec une erreur.

Tableau de fonctions (BRN, W1) en dehors de la plage autorisée

Qu'est-ce que ça peut être ?

Essayez de cette façon, vous n'avez pas défini la dimensionnalité du tableau.

void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике
   ArrayResize(fract_mass,i+1);
   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert("Frakt= ",fract_mass[UP]);
        }
     }
  }

En général, ce n'est pas une bonne solution

 
Kira27:
Je l'ai un peu modifié, il fonctionne presque comme il faut, mais avant 51.20, il se bloque avec une erreur.

Tableau de fonctions (BRN, W1) hors limites

Qu'est-ce que ça peut être ?

La ligne qui a résolu le crash.

 ArrayResize(handle,i,0);//*------Строчка решившая проблему
//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике

//***************************
   ArrayResize(handle,i,0);//*------Строчка решившая проблему
//***************************

   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert("Frakt= ",fract_mass[UP]);
        }
     }
  }
//+------------------------------------------------------------------+

Correct maintenant ? Correct si ça ne vous dérange pas.

 
Kira27:
Je l'ai modifié un peu, il fonctionne presque comme il le devrait, jusqu'à 51.20 où il se plante avec une erreur.

Tableau de fonctions (BRN, W1) en dehors de la plage autorisée

Qu'est-ce que ça peut être ?

En même temps, vous copiez un certain nombre d'éléments dans le tableau HandleFractalUP_W1, mais vous ne contrôlez pas exactement combien.

Puis boucle à travers int i=Bars(Symbol(),period) ; //Nombre de barres sur le graphique W1

Comme résultat, vous obtiendrez à nouveau une sortie en dehors du tableau, mais danshandle[n]

Travaillez sur la logique du remplissage, prenez votre temps.

----

Kira27:

La ligne qui a résolu le crash.

C'est correct maintenant ? Corrigez-le si vous voulez bien.

C'est tellement compliqué, mais tu vas y arriver.

 
Kira27:

La ligne qui a résolu le problème du crash

C'est maintenant ? Corrigez-le si vous voulez bien.

Sauf qu'il y a moins de fractales que de barres dans la fenêtre du graphique hebdomadaire, et lorsqu'on remplit le tableau avec les valeurs de prix des fractales, seules 90 cellules sont remplies, et le reste de la disposition de la mémoire est redondant. Cela signifie-t-il que le nombre de fractales doit être calculé en premier, et qu'ensuite seulement ArrayResize doit être appliqué pour la réservation de la mémoire ?

 
Vitaly Muzichenko:

En même temps, vous copiez un certain nombre d'éléments dans le tableau HandleFractalUP_W1, mais vous ne contrôlez pas exactement combien.

Puis boucle à travers int i=Bars(Symbol(),period) ; //Nombre de barres sur le graphique W1

Comme résultat, vous obtiendrez à nouveau une sortie en dehors du tableau, mais danshandle[n]

Travaillez sur la logique du remplissage, prenez votre temps.

----

C'est tellement compliqué, mais tu vas y arriver.

Merci ! !!

 

Bon après-midi à tous. Aidez-moi à comprendre pourquoi je ne peux pas obtenir l'historique des volumes. J'ai essayé de le faire de deux façons.

Premier moyen :

MqlRates mrate5[] ;

if(CopyRates(_Symbol,PERIOD_M5,1,bars_used,mrate5)<0)

{

Alert("Erreur dans la copie des données historiques pour M5 - erreur :",GetLastError()," !!") ;

retour ;

}

for (int i=0;i<bars_used;i++) {

Print(mrate5[i].real_volume)

}

Deuxième voie :

long volumes5[] ;

if(CopyRealVolume(_Symbol,PERIOD_M5,1,bars_used,volumes5)<0)

{

Alert("Erreur de copie de volumes pour M5 - erreur :",GetLastError()," !") ;

retour ;

}

for (int i=0;i<bars_used;i++) {

Print(volumes5[i])

}

Dans les deux cas, le tableau des volumes ne contient toujours que des zéros. Vous ne pouvez pas obtenir d'informations significatives...


 
seleand:

Bon après-midi à tous. Aidez-moi à comprendre pourquoi je ne peux pas obtenir l'historique des volumes. J'ai essayé de le faire de deux façons.

Premier moyen :

MqlRates mrate5[];
      if(CopyRates(_Symbol,PERIOD_M5,1,bars_used,mrate5)<0)
        {
            Alert("Ошибка копирования исторических данных для М5 - ошибка:",GetLastError(),"!!");
            return;
        }
for (int i=0;i<bars_used;i++) {
Print(mrate5[i].real_volume)
}

La deuxième voie :

long volumes5[];
      if(CopyRealVolume(_Symbol,PERIOD_M5,1,bars_used,volumes5)<0)
        {
            Alert("Ошибка копирования объемов для М5 - ошибка:",GetLastError(),"!!");
            return;
        }
for (int i=0;i<bars_used;i++) {
Print(volumes5[i])
}

Dans les deux cas, la matrice de volume ne contient toujours que des zéros. Je n'arrive pas à obtenir d'informations significatives...


  1. Apprenez à insérer du code.
  2. En forex, il n'y a pas de volumes réels du tout.
 

Merci. Ai-je bien compris qu'il existe un volume en ticks?

Lorsque j'ai téléchargé l'historique des cotations pour le forex depuis le site finam, il y avait le vol en plus de l'ouverture, du haut, du bas et de la fermeture. Vous n'avez pas dit exactement quel volume c'était. C'est un volume de ticks ?