Ошибки, баги, вопросы - страница 2247

 
Vladimir Pastushak:

Ребят а это правильно что в индикаторах при смене периода глобальные переменные обнуляются ????

как по мне то что они в советниках не обнуляются - ненормально
 
TheXpert:
как по мне то что они в советниках не обнуляются - ненормально

Обнуляться такие переменные должны при необходимости. 

Глобальная переменная при смене периода не должны обнуляться...

У нас не остается возможности сохранять данные при смене периода...
 
Vladimir Pastushak:

Обнуляться такие переменные должны при необходимости. 

Глобальная переменная при смене периода не должны обнуляться...

У нас не остается возможности сохранять данные при смене периода...

Как же не остается?
Существует масса вариантов.
Самым удобным мне видится через русурсы.
Сам давно уже пользуюсь. 

 
Nikolai Semko:

Как же не остается?
Существует масса вариантов.
Самым удобным мне видится через русурсы.
Сам давно уже пользуюсь. 

Приведите пример пожалуйста...

 
Vladimir Pastushak:

Обнуляться такие переменные должны при необходимости. 

Глобальная переменная при смене периода не должны обнуляться...

У нас не остается возможности сохранять данные при смене периода...

Почему не должны? Новый период --> новый экземпляр индикатора. И какое отношение может иметь переменная удалённого экземпляра индикатора к новому???

 
Vladimir Pastushak:

Приведите пример пожалуйста...

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

А вот сам индикатор, использующий такой класс
пощелкайте ТФ и увидете, что все ок.
#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:

Благодарю, мне нужно сохранить некое значение числовое полученное на одном из периодов и использовать его без изменений на всех других периодах... 

Это значение рассчитывается только один раз, считается долго и тяжело по этому это надо делать один раз. 

А представьте пользователь будет ходить по периодам и терминал просто зависнет...

 

Опечатка в справке Mql5

ChartIndicatorName

index

[in]  Индекс индикатора с списке индикаторов. 

 
Как остановить оптимизацию из функции OnTester() ?
 

Скажите, а почему сет файл с мт5 советника, не загружается в настройки мт4 советника? 

(все имена одинаковые)

только сейчас заметил. Раньше все было ок