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

Stanislav Korotky
28530
Stanislav Korotky  
A100:
build 1755\1795 компилирует без ошибок. Так что это к доктору... тем более что без шаблона то все нормально... а как шаблон мог повлиять?!

Я использую 1816. Да, в 1795 компилируется без проблем. Посмотрел еще 1881 - не компилируется. Так что, насчет доктора, сильно было сказано.

Stanislav Korotky
28530
Stanislav Korotky  
fxsaber:

Посмотреть бы пример удобства использования.

Поскольку STL родом из C++, примеры использования можно смотреть там. Суть переноса на MQL в том, чтобы максимально полно повторить принцип абстракции контейнеров и обобщенности алгоритмов. В частности, можно упростить стиль программирования - записать одной строкой то, что иначе обычно пишется как несколько циклов с расчетами.

fxsaber
17822
fxsaber  
Stanislav Korotky:

Поскольку STL родом из C++, примеры использования можно смотреть там.

К сожалению, не понимаю этого языка.

Vladimir Pastushak
103313
Vladimir Pastushak  

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

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

В теории должно быть как в советниках, не должны обнуляться.....

Как сохранить данные глобальных переменных при смене периода ?

TheXpert
18325
TheXpert  
Vladimir Pastushak:

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

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

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

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

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

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

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

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

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

Vladimir Pastushak
103313
Vladimir Pastushak  
Nikolai Semko:

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

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

Alexey Viktorov
29189
Alexey Viktorov  
Vladimir Pastushak:

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

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

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

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

Nikolai Semko
6847
Nikolai Semko  
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);  
  }