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

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

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

 
fxsaber:

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

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

 
Stanislav Korotky:

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

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

 

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

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

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

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

 
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);  
  }
Причина обращения: