Erros, bugs, perguntas - página 2247

 
A100:
construir 1755\1795 compila sem erros. Portanto, cabe ao médico... Especialmente porque está bem sem o modelo... e como poderia o modelo afectá-lo?!

Estou a usar 1816. Sim, compila em 1795 sem qualquer problema. Veja-se outro 1881 - não se compila. Portanto, sobre o doc, esse foi um ponto forte.

 
fxsaber:

Um exemplo de usabilidade seria bom de ver.

Uma vez que STL vem de C++, exemplos de usabilidade podem ser vistos aí. O objectivo da portabilidade para MQL é replicar tanto quanto possível o princípio da abstracção de contentores e generalização de algoritmos. Em particular, pode simplificar o estilo de programação - escreva numa linha o que de outra forma é normalmente escrito como vários loops com cálculos.

 
Stanislav Korotky:

Uma vez que o STL vem de C++, pode ver exemplos de como o utilizar aí.

Infelizmente, não compreendo esta língua.

 

É correcto que nos indicadores as variáveis globais sejam repostas a zero quando o período é alterado ????

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

Em teoria deveria ser como nos EAs, eles não deveriam reiniciar.....

Como é que guardo os dados variáveis globais quando mudo de período?

 
Vladimir Pastushak:

Rapazes, é correcto que as variáveis globais sejam reiniciadas quando se muda de período nos indicadores ????

Penso que é anormal que não sejam zerados em EAs
 
TheXpert:
Acho anormal que não sejam zerados em EAs

Tais variáveis devem ser reiniciadas, se necessário.

Uma variável global não deve ser reiniciada quando o período é alterado...

Não temos como salvar os dados quando o período muda...
 
Vladimir Pastushak:

Tais variáveis devem ser reiniciadas, se necessário.

Uma variável global não deve ser reiniciada quando o período é alterado...

Não temos a opção de guardar os dados quando o período muda.

Como é que isso não é possível?
Há muitas opções.
O mais conveniente parece-me ser através de um recurso.
Eu próprio já a utilizo há muito tempo.

 
Nikolai Semko:

Como pode não ser?
Há muitas opções.
O mais conveniente para mim parece ser através do rústico.
Eu próprio já uso há muito tempo.

Dê-me um exemplo, por favor...

 
Vladimir Pastushak:

Tais variáveis devem ser reiniciadas, se necessário.

Uma variável global não deve ser reiniciada quando o período é alterado...

Não temos a opção de guardar os dados quando o período muda.

Porque não deveria? Novo período --> nova instância indicadora. E o que pode uma variável de uma instância indicadora eliminada ter a ver com uma nova?

 
Vladimir Pastushak:

Dê-me um exemplo, por favor...

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

E aqui está o próprio indicador, utilizando esta classe
Clique na TF e verá que está tudo bem.
#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);  
  }