Fehler, Irrtümer, Fragen - Seite 2247

 
A100:
Build 1755\1795 kompiliert ohne Fehler. Es liegt also an dem Arzt... Vor allem, weil es auch ohne die Vorlage funktioniert... und wie könnte die Vorlage es beeinflussen?

Ich verwende 1816. Ja, es lässt sich problemlos in 1795 kompilieren. Ich habe mir eine andere 1881 angesehen - sie lässt sich nicht kompilieren. Was den Arzt angeht, so war das ein starker Punkt.

 
fxsaber:

Ein Beispiel für die Benutzerfreundlichkeit wäre schön zu sehen.

Da STL aus C++ stammt, sind dort Beispiele für die Benutzerfreundlichkeit zu sehen. Bei der Portierung auf MQL geht es darum, das Prinzip der Containerabstraktion und der Verallgemeinerung von Algorithmen so weit wie möglich zu reproduzieren. Insbesondere können Sie den Programmierstil vereinfachen - schreiben Sie in einer Zeile, was sonst üblicherweise als mehrere Schleifen mit Berechnungen geschrieben wird.

 
Stanislav Korotky:

Da STL aus C++ stammt, finden Sie dort auch Beispiele für die Verwendung von STL.

Leider verstehe ich diese Sprache nicht.

 

Ist es richtig, dass in Indikatoren globale Variablen auf Null zurückgesetzt werden, wenn der Zeitraum geändert wird ????

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

Theoretisch sollte es wie in EAs sein, sie sollten nicht zurückgesetzt werden.....

Wie speichere ich die Daten globaler Variablen, wenn ich den Zeitraum ändere?

 
Vladimir Pastushak:

Leute, ist es richtig, dass die globalen Variablen zurückgesetzt werden, wenn man die Periode in den Indikatoren ändert ????

Ich denke, es ist abnormal, dass sie in EAs nicht auf Null gesetzt werden.
 
TheXpert:
Ich finde es abnormal, dass sie in EAs nicht auf Null gesetzt werden

Solche Variablen sollten bei Bedarf zurückgesetzt werden.

Eine globale Variable sollte nicht zurückgesetzt werden, wenn der Zeitraum geändert wird...

Wir haben keine Möglichkeit, die Daten zu speichern, wenn sich der Zeitraum ändert...
 
Vladimir Pastushak:

Solche Variablen sollten bei Bedarf zurückgesetzt werden.

Eine globale Variable sollte nicht zurückgesetzt werden, wenn der Zeitraum geändert wird...

Wir haben nicht die Möglichkeit, Daten zu speichern, wenn sich der Zeitraum ändert...

Warum ist das nicht möglich?
Es gibt eine Vielzahl von Möglichkeiten.
Der bequemste Weg scheint mir der über eine Ressource zu sein.
Ich selbst benutze es schon seit langem.

 
Nikolai Semko:

Wie könnte es anders sein?
Es gibt eine Vielzahl von Möglichkeiten.
Die bequemste für mich scheint durch rusursy zu sein.
Ich selbst benutze sie schon lange.

Geben Sie mir bitte ein Beispiel...

 
Vladimir Pastushak:

Solche Variablen sollten bei Bedarf zurückgesetzt werden.

Eine globale Variable sollte nicht zurückgesetzt werden, wenn der Zeitraum geändert wird...

Wir haben nicht die Möglichkeit, die Daten zu speichern, wenn sich der Zeitraum ändert...

Warum sollte es das nicht? Neuer Zeitraum --> neue Indikatorinstanz. Und was kann eine Variable einer gelöschten Indikatorinstanz mit einer neuen Instanz zu tun haben?

 
Vladimir Pastushak:

Geben Sie mir bitte ein Beispiel...

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

Und hier ist der Indikator selbst, der diese Klasse verwendet
Klicken Sie auf die TF und Sie werden sehen, dass alles in Ordnung ist.
#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);  
  }