Erreurs, bugs, questions - page 2247

 
fxsaber:

Il serait bon de voir un exemple de convivialité.

La STL étant issue du C++, on peut y voir des exemples d'utilisation. L'intérêt du portage vers MQL est de reproduire autant que possible le principe d'abstraction des conteneurs et de généralisation des algorithmes. En particulier, vous pouvez simplifier le style de programmation - écrire en une seule ligne ce qui, autrement, est habituellement écrit comme plusieurs boucles avec des calculs.

 
Stanislav Korotky:

La STL étant issue du C++, vous pouvez y voir des exemples d'utilisation.

Malheureusement, je ne comprends pas cette langue.

 

Est-il exact que dans les indicateurs, les variables globales sont remises à zéro lorsque la période est modifiée ? ???.

string test="";
int OnInit()
  {
   Print("N 1 = ",test);
   test="Rezult";
   Print("N 2 = ",test);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   Print("N 3 = ",test);
   return(rates_total);
  }

En théorie, cela devrait être comme dans les EA, ils ne devraient pas réinitialiser......

Comment sauvegarder les données de la variable globale lorsque je change de période ?

 
Vladimir Pastushak:

Les gars, est-il exact que les variables globales sont réinitialisées lorsque vous changez de période dans les indicateurs ? ???.

Je pense qu'il est anormal qu'ils ne soient pas à zéro dans les EA.
 
TheXpert:
Je trouve anormal qu'il n'y ait pas de zéro dans les EA.

Ces variables doivent être réinitialisées si nécessaire.

Une variable globale ne doit pas être réinitialisée si la période est modifiée...

Nous n'avons aucun moyen de sauvegarder les données lorsque la période change...
 
Vladimir Pastushak:

Ces variables doivent être réinitialisées si nécessaire.

Une variable globale ne doit pas être remise à zéro lorsque la période est modifiée...

Nous n'avons pas la possibilité de sauvegarder les données lorsque la période change...

Comment cela n'est-il pas possible ?
Il y a beaucoup d'options.
Le plus pratique me semble être de passer par une ressource.
Je l'utilise moi-même depuis longtemps.

 
Nikolai Semko:

Comment pourrait-il en être autrement ?
Il y a beaucoup d'options.
Le plus pratique pour moi semble être de passer par Rusursy.
Je l'utilise moi-même depuis longtemps.

Donnez-moi un exemple s'il vous plaît...

 
Vladimir Pastushak:

Ces variables doivent être réinitialisées si nécessaire.

Une variable globale ne doit pas être remise à zéro lorsque la période est modifiée...

Nous n'avons pas la possibilité de sauvegarder les données lorsque la période change...

Pourquoi ne le ferait-elle pas ? Nouvelle période --> nouvelle instance d'indicateur. Et qu'est-ce qu'une variable d'une instance d'indicateur supprimée peut avoir à faire avec une nouvelle instance ?

 
Vladimir Pastushak:

Donnez-moi un exemple s'il vous plaît...

union DoubleUint { double d; uint u[2]; };


class Cdouble
  {
private:
   string            Name;
   uint              Var[2];
   uint              w;
   uint              h;
   DoubleUint        du;

public:
                     Cdouble(const string name,double var);
                    ~Cdouble();
   bool              Ok;
   bool              Set(double var);
   double            value;
  };

Cdouble::Cdouble(const string name,double var)
  {
   w=2;
   h=1;
   Ok=false;
   Name="::"+name+ IntegerToString(ChartGetInteger(0,CHART_WINDOW_HANDLE));
   if(ResourceReadImage(Name,Var,w,h))
     {
      du.u[0]=Var[0];
      du.u[1]=Var[1];
      value=du.d;
      Ok=true;
     }
   else
     {
      du.d=var;
      Var[0]=du.u[0];
      Var[1]=du.u[1];
      value=var;
      if(!ResourceCreate(Name,Var,2,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) printf("Error create Resource: "+DoubleToString(GetLastError(),0));
      else Ok=true;
     }
  }

Cdouble::~Cdouble()
  {
   if(_UninitReason!=REASON_RECOMPILE && _UninitReason!=REASON_CHARTCHANGE) ResourceFree(Name);
  }
//+------------------------------------------------------------------+
bool Cdouble::Set(double var)
  {
   du.d=var;
   Var[0]=du.u[0];
   Var[1]=du.u[1];
   value=var;
   Ok=false;
   if(!ResourceCreate(Name,Var,2,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) {printf("Error create Resource: "+DoubleToString(GetLastError(),0)); return(false);}
   else { Ok=true; return(true);}
  }
//+------------------------------------------------------------------+

Et voici l'indicateur lui-même, utilisant cette classe
Cliquez sur le TF et vous verrez que tout est en ordre.
#include <CVar\Variable.mqh>

Cdouble d ("abracadabra",-898767.98798);

int OnInit()
  {
   EventSetMillisecondTimer(1000);
   return(INIT_SUCCEEDED);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }

void OnTimer()
  {
   Comment(DoubleToString(d.value,5));
   d.Set(d.value+0.01);  
  }
 
Nikolai Semko:

Merci, j'ai besoin de sauvegarder une valeur numérique obtenue dans une des périodes et de l'utiliser inchangée dans toutes les autres périodes...

Cette valeur n'est calculée qu'une fois, c'est long et difficile, donc il faut le faire une fois.

Imaginez que l'utilisateur traverse les périodes et que le terminal se fige...

Raison: