Errori, bug, domande - pagina 2247

 
A100:
build 1755\1795 compila senza errori. Quindi tocca al medico... Soprattutto perché va bene senza il template... e come potrebbe influire il template?!

Sto usando il 1816. Sì, compila in 1795 senza problemi. Ho guardato un altro 1881 - non si compila. Quindi, per quanto riguarda il dottore, questo era un punto forte.

 
fxsaber:

Un esempio di usabilità sarebbe bello da vedere.

Dato che STL viene da C++, gli esempi di usabilità possono essere visti lì. Il punto del porting a MQL è quello di replicare il più possibile il principio di astrazione del contenitore e la generalizzazione degli algoritmi. In particolare, è possibile semplificare lo stile di programmazione - scrivere in una riga ciò che altrimenti è solitamente scritto come diversi cicli con calcoli.

 
Stanislav Korotky:

Dato che STL viene da C++, potete vedere esempi di come usarlo lì.

Purtroppo non capisco questa lingua.

 

È corretto che negli indicatori le variabili globali vengono azzerate quando si cambia il periodo ????

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);
  }

In teoria dovrebbe essere come negli EA, non dovrebbero resettare.....

Come faccio a salvare i dati della variabile globale quando cambio periodo?

 
Vladimir Pastushak:

Ragazzi, è corretto che le variabili globali vengono resettate quando si cambia periodo negli indicatori ????

Penso che sia anormale che non siano azzerati in EAs
 
TheXpert:
Trovo anormale che non siano azzerati in EAs

Tali variabili dovrebbero essere reimpostate se necessario.

Una variabile globale non dovrebbe essere resettata quando il periodo viene cambiato...

Non abbiamo modo di salvare i dati quando il periodo cambia...
 
Vladimir Pastushak:

Tali variabili dovrebbero essere reimpostate se necessario.

Una variabile globale non dovrebbe essere resettata quando il periodo viene cambiato...

Non abbiamo la possibilità di salvare i dati quando cambia il periodo...

Come non è possibile?
Ci sono molte opzioni.
Il più conveniente mi sembra essere attraverso una risorsa.
Io stesso lo uso da molto tempo ormai.

 
Nikolai Semko:

Come può non esserlo?
Ci sono molte opzioni.
Il più conveniente per me sembra essere attraverso rusursy.
Io stesso l'ho usato per molto tempo.

Fatemi un esempio per favore...

 
Vladimir Pastushak:

Tali variabili dovrebbero essere reimpostate se necessario.

Una variabile globale non dovrebbe essere resettata quando il periodo viene cambiato...

Non abbiamo la possibilità di salvare i dati quando cambia il periodo...

Perché non dovrebbe? Nuovo periodo --> nuova istanza dell'indicatore. E cosa può avere a che fare una variabile di un'istanza di indicatore cancellata con una nuova?

 
Vladimir Pastushak:

Fatemi un esempio per favore...

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);}
  }
//+------------------------------------------------------------------+

Ed ecco l'indicatore stesso, usando questa classe
Cliccate su TF e vedrete che tutto è a posto.
#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);  
  }
Motivazione: