Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 221

 

Qual é a melhor maneira de acessar uma propriedade de uma classe a outra propriedade da mesma classe?

Isto é, ao invés de "isto", eu gostaria de usar algo como "pai".

struct _Seeker {
        int holder;
        void Get(){holder = parent.prize;};
};
class Map {
        _Seeker seekerForPrize;
        int prize;
};
 

Usei o ArraySetAsSeries( array[], falso) em indicador. No indicador eu preciso usar o iMa(...,i), ele acaba sendo indexado de outra forma. Posso também alterar a ordem de indexação do iMa() como ArraySetAsSeries?

Até agora eu fiz assim: rates_total-i (contar na outra ponta), mas não tenho certeza se esta é a solução certa?
ArraySetAsSeries(ExtMapBuffer4,Series);      
...
while(i<rates_total-1)
        {
         double maf=iMA(NULL,Used_Period,FAST_MA,0,Fmode,Fprice,i); // rates_total-i
         ExtMapBuffer4[i]=maf; // test 
...
 
Evgeny Potapov:

Qual é a melhor maneira de acessar uma propriedade de uma classe a outra propriedade da mesma classe?

Isto é, ao invés de "isto", eu gostaria de usar algo como "pai".

Aprenda a matemática)

class Map;

struct _Seeker {
        Map* parent;
        int holder;
        _Seeker(Map* _parent):parent(_parent){}
        void Get(){holder = parent.prize;};
};

class Map {
        _Seeker seekerForPrize;
public:
        int prize;
        Map():seekerForPrize(&this){}
};
 

Gente. Você pode me dar o código para vincular um indicador a um número de conta e, além de vincular a uma conta, você poderia adicionar uma chave de licença?

Форум трейдеров - MQL5.community
Форум трейдеров - MQL5.community
  • www.mql5.com
MQL5: форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
 

Uma pergunta, como me refiro a um elemento da estrutura substituindo seu nome por um fio?

struct My
   {
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   } my;

datetime val=GetValue(my,"time3");


datetime GetValue(My &my, string name)
   {
   return(my."name"); ?????????
   }
Quem puder me dizer, bem feito!
 
Nauris Zukas:

Usei o ArraySetAsSeries( array[], falso) em indicador. No indicador eu preciso usar o iMa(...,i), ele acaba sendo indexado de outra forma. Posso também inverter a ordem de indexação do iMa() como ArraySetAsSeries?

Até agora eu fiz isto: rates_total-i (contar do outro lado), só não tenho certeza se esta é a solução certa?

Deixe-me responder a mim mesmo (talvez alguém também precise). Você pode criar (refazer) o buffer de dados através do exemplo, incluindo MovingAverages.mqh (SimpleMAOnBuffer) e nem se preocupe com o ArraySetAsSeries, porque ele já tem o ArrayGetAsSeries no exemplo.

//+------------------------------------------------------------------+
//| Data on array                                              |
//+------------------------------------------------------------------+
int DataBuffer(const int rates_total,const int prev_calculated,const int begin,
               const double& data[],double& buffer[])
  {
   int i,limit;
//--- check for data
//--- save as_series flags
   bool as_series_data=ArrayGetAsSeries(data);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
   if(as_series_data)
      ArraySetAsSeries(data,false);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,false);
//--- first calculation or number of bars was changed
   if(prev_calculated==0) // first calculation
     {
      limit=begin+1;
      //--- set empty value for first bars
      for(i=0; i<limit-1; i++)
         buffer[i]=0.0;
      //--- calculate first visible value
      double firstValue=0;
      for(i=begin; i<limit; i++)
         firstValue=data[i];
      buffer[limit-1]=firstValue;
     }
   else
      limit=prev_calculated-1;
//--- main loop
   for(i=limit; i<rates_total-1; i++)
      buffer[i]=data[i];
//--- restore as_series flags
   if(as_series_data)
      ArraySetAsSeries(data,true);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,true);
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Aleksei Stepanenko:

Uma pergunta, como me refiro a um elemento da estrutura substituindo seu nome por um fio?

Quem o solicitará, será bem feito!

Nenhum nome variável após a compilação,

Preciso inventar algo com macrossubstituições.

Não gosto dotipo de fio, sempre espero muitas coisas inesperadas com ele:

struct My
{
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   enum ENUM_FILDS {TIME_1, TIME_2, TIME_3, TIME_4};
} my;
#define  TIME_1 My::TIME_1
#define  TIME_2 My::TIME_2
#define  TIME_3 My::TIME_3
#define  TIME_4 My::TIME_4
datetime GetValue(My &MyStruct, My::ENUM_FILDS name)
{
   datetime result = 0;
   switch(name)
   {
      case TIME_1: result = MyStruct.time1; break;
      case TIME_2: result = MyStruct.time2; break;
      case TIME_3: result = MyStruct.time3; break;
      case TIME_4: result = MyStruct.time4; break;
   }
   return(result);
}
//+------------------------------------------------------------------+
void OnStart()
{
   GetValue(my,TIME_1);
}
//+------------------------------------------------------------------+


UPD:

embora fosse mais lógico colocar um método de trabalho com campos na estrutura, ou seja, assim:

struct My
{
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   enum ENUM_FILDS {TIME_1, TIME_2, TIME_3, TIME_4};
   datetime GetValue(ENUM_FILDS name)
   {
      datetime result = 0;
      switch(name)
      {
         case TIME_1: result = time1; break;
         case TIME_2: result = time2; break;
         case TIME_3: result = time3; break;
         case TIME_4: result = time4; break;
      }
   return(result);
   }
} my;
#define  TIME_1 My::TIME_1
#define  TIME_2 My::TIME_2
#define  TIME_3 My::TIME_3
#define  TIME_4 My::TIME_4

//+------------------------------------------------------------------+
void OnStart()
{
   my.GetValue(TIME_1);
}
//+------------------------------------------------------------------+
 
Igor Makanu:

não haverá nomes variáveis após a compilação,

Estou vendo, Igor, acho que não vai funcionar graciosamente. Pensei em encurtar o caminho para os dados para maior clareza, mas vou obter fichas de substituição de casos e macros. Provavelmente vou me contentar com um longo registro. Mas vou pensar sobre isso, é uma solução interessante. Obrigado!

 
Aleksei Stepanenko:

Uma pergunta, como me refiro a um elemento da estrutura substituindo seu nome por um fio?

Quem puder me dizer, bem feito!
struct My
{
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   
   datetime operator[]( const string name )
   {
      if( name == "time1" )
         return time1;
      if( name == "time2" )
         return time2;
      if( name == "time3" )
         return time3;
      if( name == "time4" )
         return time4;
      return datetime( 0 );
   }
};

datetime GetValue( My& my, const string name )
{
   return my[name];
}

void OnStart()
{
   My my;
   datetime val = GetValue( my, "time3" );
}
 
Koldun Zloy:
Obrigado, pensei que houvesse uma opção de substituição mágica, sem a lista de correspondência. Mas acho que não estava destinado a ser. Obrigado!
Razão: