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

 
Bonjour, veuillez me conseiller... Après la mise à niveau vers la dernière version, des erreurs dans "SmoothAlgorithms" ont commencé à apparaître. Et les moyennes de sma, lwma, parma, vidya ont cessé de fonctionner. Il jure sur cette ligne : "array out of range in 'SmoothAlgorithms.mqh' (3394,9)". Comment dois-je le réparer ? Merci !
Dossiers :
 
007yurik:
Bonjour, veuillez me conseiller... Après la mise à niveau vers la dernière version, des erreurs dans "SmoothAlgorithms" ont commencé à apparaître. Et les moyennes de sma, lwma, parma, vidya ont cessé de fonctionner. Il jure sur cette ligne : "array out of range in 'SmoothAlgorithms.mqh' (3394,9)". Comment dois-je le réparer ? Merci !
Écrivez à l'auteur sur la page de discussion de sa bibliothèque :
Библиотеки: SmoothAlgorithms
Библиотеки: SmoothAlgorithms
  • 2017.01.31
  • www.mql5.com
SmoothAlgorithms: Автор: Nikolay Kositsin...
 
Artyom Trishkin:
Écrivez à l'auteur sur la page de discussion de sa bibliothèque :
Merci, mais il n'a pas répondu. Dans un autre fil, je vais essayer celui qui est proposé.
 

Il est nécessaire d'utiliser des valeurs numériques comme éléments d'énumération.

enum ENUM_HOURS
{
 0,
 1,
 ..,
 23
};

Ceci n'est pas autorisé. Erreur de compilation identifiant attendu. Y a-t-il un moyen de contourner ce problème (en ne laissant que des valeurs numériques) ?

 
Juer:

Il est nécessaire d'utiliser des valeurs numériques comme éléments d'énumération.

Ceci n'est pas autorisé. Erreur de compilation identifiant attendu. Y a-t-il un moyen de contourner ce problème (en ne laissant que des valeurs numériques) ?

//+------------------------------------------------------------------+
enum ENUM_HOURS
  {
   HOUR_0,  // 0
   HOUR_1,  // 1
   HOUR_2,  // 2
   HOUR_3,  // 3
   HOUR_4,  // 4
   HOUR_5,  // 5
   HOUR_6,  // 6
   HOUR_7,  // 7
   HOUR_8,  // 8
   HOUR_9,  // 9
   HOUR_10, // 10
   HOUR_11, // 11
   HOUR_12, // 12
   HOUR_13, // 13
   HOUR_14, // 14
   HOUR_15, // 15
   HOUR_16, // 16
   HOUR_17, // 17
   HOUR_18, // 18
   HOUR_19, // 19
   HOUR_20, // 20
   HOUR_21, // 21
   HOUR_22, // 22
   HOUR_23  // 23
  };
//+------------------------------------------------------------------+
 

Pouvez-vous me donner un lien vers la documentation sur la signification de ces symboles <>?

_GlobalVariableGet<string>("ResourceName")
 

Existe-t-il un moyen de définir par programme une liste de paramètres à optimiser ?

Le fait est que j'ai beaucoup de paramètres. Des milliers d'entre eux. Je les ai mis dans un programme séparé. EA les charge pendant l'initialisation par le biais d'un fichier externe. Ma tâche consiste donc maintenant à optimiser ces paramètres.

Il s'agit par exemple d'une liste de paramètres optimisables avec des valeurs et des plages dans un fichier. Lisez à partir de là et écrivez le résultat là aussi.

 

J'écris une fonction pour fermer les graphiques sans EAs ou scripts. Je récupère le nom du conseiller expert et du script sur le graphique en utilisant la fonction ChartGetString. Si les deux sont vides, je les ferme. Le problème est dans la ligne avec le graphique qui se ferme selon la condition. La condition n'est jamais satisfaite. Voici le code.

 if( ExpertName == "" && ScriptName == "" ){ChartClose ( prevChart );}
 else Print("Не закрываем график . Имя эксперта =",ExpertName,"= ScriptName =",ScriptName,"=");

Voici ce que montre Print

Не закрываем график . Имя эксперта == ScriptName ==

Je comprends que nous pouvons modifier la condition comme suit

StringLen(ExpertName) == 0 && StringLen(ScriptName) == 0

Comment faire autrement pour comparer la variable chaîne avec une chaîne vide ?

 

Bonjour, j'ai fait un .mqh pour le traitement et le stockage des données dans la ressource. Tout fonctionne, mais il y a une nuance, si je compile l'indicateur, le .mqh est réinitialisé et refait le processus de pondération pour le stockage. Cible - tant qu'il y a des données dans la ressource , elle n'est pas réinitialisée. Où se trouve l'erreur, comment la réparer ?

// Сохранение данных
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
#include <GlobalVariables.mqh> 

const RESOURCEDATA<MqlTick>m_Resource("::"+__FILE__); // Ресурс для передали данных (тики)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CMyTicks
  {
protected:
public:
   //+------------------------------------------------------------------+
   //| Constructor.                                                     |
   //+------------------------------------------------------------------+      
   void CMyTicks()
     {
      _GlobalVariableSet("ResourceName",m_Resource.GetFullName()); // Записали в глобальную переменную полное имя ресурса (read-only)      
     }
   //+------------------------------------------------------------------+
   //| Destructor.                                                     |
   //+------------------------------------------------------------------+      
   void ~CMyTicks()
     {
      //_GlobalVariableDel("ResourceName");
     }

   //+------------------------------------------------------------------+  
   void CollectTicks()
     {
      MqlTick m_Ticks[];
      CopyTicks(_Symbol,m_Ticks,COPY_TICKS_ALL,0,5); // Сформировали данные
      m_Resource=m_Ticks; // Записали данные
     }
  };
//+------------------------------------------------------------------+
// Получение данных
#property indicator_chart_window
#property indicator_plots 0

#include <Test_Keep_Info_13.mqh>
CMyTicks  Test;

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166
#include <GlobalVariables.mqh> 

static const RESOURCEDATA<MqlTick>Resource(_GlobalVariableGet<string>("ResourceName")); // Создали ресурс на основе переданного в глобальной переменной полного имени  
MqlTick Ticks[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const int,const double &[])
  {
   if(prev_calculated==0)
     {
      Resource.Get(Ticks); // Считали данные из ресурса.
      ArrayPrint(Ticks);   // Распечатали полученные данные

      if(ArraySize(Ticks)<1)
        {
         Test.CollectTicks();
         Print(" SAVE TICKS ");
        }

      Resource.Get(Ticks); // Считали данные из ресурса.
      ArrayPrint(Ticks);   // Распечатали полученные данные
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
pivomoe:

Comment comparer correctement une chaîne variable avec une chaîne vide ?

Il existe deux chaînes vides normales - "" et NULL. Et il peut aussi y avoir des chaînes vides personnalisées.