初学者的问题 MQL4 MT4 MetaTrader 4 - 页 221

 

将一个类的一个属性访问到同一类的另一个属性的最佳方式是什么?

就是说,我想用 "父 "这样的词来代替 "这个"。

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

我在指标中使用了ArraySetAsSeries( array[], false)。在指标中,我需要使用iMa(...,i),结果是以另一种方式进行索引。我是否也可以将iMa()的索引顺序改为ArraySetAsSeries?

到目前为止,我是这样做的:Rates_total-i(另一端为计数),但我不确定这是否是正确的解决方案?
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:

将一个类的一个属性访问到同一类的另一个属性的最佳方式是什么?

就是说,我想用 "父 "这样的词来代替 "这个"。

学习数学)

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

伙计们。你能不能给我一些代码,把一个指标与一个帐号 绑定,除了与帐号绑定外,你还可以添加一个许可证密钥?

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

一个问题,我如何通过将结构元素的名称替换成字符串来引用它?

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"); ?????????
   }
谁能告诉我,谁就做得很好。
 
Nauris Zukas:

我在指标中使用了ArraySetAsSeries( array[], false)。在指标中,我需要使用iMa(...,i),结果是以另一种方式进行索引。我是否也可以将iMa()的索引顺序与ArraySetAsSeries相反?

到目前为止,我是这样做的:Rates_total-i(从另一端算起),只是不确定这是否是正确的解决方案?

让我自己来回答(也许有人也会需要它)。你可以通过例子创建(重塑)数据缓冲区,包括MovingAverages.mqh(SimpleMAOnBuffer),甚至不用理会ArraySetAsSeries,因为它在例子中已经有ArrayGetAsSeries。

//+------------------------------------------------------------------+
//| 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:

一个问题,我如何通过将结构元素的名称替换成字符串来引用它?

谁会提示,它将被很好地完成!

编译后没有变量名。

我需要发明一些宏伟的替代物。

我不喜欢字符串类型,我总是期待它有很多惊喜。

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。

尽管把处理字段的方法放在结构中会更符合逻辑,即这样。

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:

编译后将没有变量名。

我明白了,伊戈尔,我猜它不会优雅地工作。我想我应该缩短数据的路径,以达到清晰的目的,但我将得到几张大小写和 宏的替换。 我可能会解决一个长的记录。不过我会考虑的,这是个有趣的解决方案。 谢谢!

 
Aleksei Stepanenko:

一个问题,我如何通过将结构元素的名称替换成字符串来引用它?

谁能告诉我,谁就做得很好。
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:
谢谢,我以为有一个神奇的替换选项,没有匹配的列表。但我想这并不是命中注定的。谢谢你!