초보자의 질문 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 :

같은 클래스의 다른 속성에 대한 클래스 속성의 액세스를 구성하는 가장 좋은 방법은 무엇입니까?

즉, "이" 대신 "부모"와 같은 것을 사용하고 싶습니다.

mat.chast 배우기)

 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 (다른 쪽 끝에서 계산), 그러나 이것이 올바른 결정인지 확실하지 않습니다.

나는 스스로 대답 할 것입니다 (아마도 누군가가 유용 할 것입니다). Include MovingAverages.mqh(SimpleMAOnBuffer) 예제를 사용하여 데이터 버퍼를 만들(리메이크) 할 수 있으며 예제에 이미 ArrayGetAsSeries가 있으므로 ArraySetAsSeries 를 사용하지 않아도 됩니다.

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


상향:

필드로 작업하는 방법을 구조에 도입하는 것이 더 논리적이지만, 즉 그래서:

 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 :
감사합니다. 일치하는 목록이 없는 마법의 대체 옵션이 있다고 생각했습니다. 그러나 그것은 운명이 아닙니다. 고맙습니다!