초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1308

 
여기요!!! 열거형 데이터 형식을 클래스 메서드 에 전달하는 방법을 알려주실 수 있습니까? 시간 프레임을 이전하고 싶다고 가정해 보겠습니다. Advisor 헤더에 열거형을 생성합니다.
   enum frame1 // перечисление именованных констант
     {
       PERIOD_M1 ,
       PERIOD_M5 ,
       PERIOD_M15 ,
       PERIOD_M30 ,
       PERIOD_H1 ,
       PERIOD_H4 ,
       PERIOD_D1 ,
       PERIOD_W1 ,
       PERIOD_MN1
     };


다음으로 클래스에서 메서드를 선언합니다.
 public :
                     Signal_Line();
                    ~Signal_Line();
   double                Time_Frame( double &Trend_Line_Down[][], int Frame, int Down);

   int                Short_Proboy( double &Trend_Line_Down[][], string Name_Static, int Down, ENUM_TIMEFRAMES );
그리고 Expert Advisor에서 메서드를 호출할 때 열거형 - 프레임 - PERIOD_M30의 세 번째 값을 전달해야 하는 경우 아래 코드 질문에 무엇을 입력해야 하나요?
         Trend_Line_Down[Timer_Down][ 1 ]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, ???);     // Флаг пробоя трендовой нулевой свечой
 
생각해보면 거기에 글을 써달라는 것 같다.
 Trend_Line_Down[Timer_Down][ 1 ]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, frame1 3);     // Флаг пробоя трендовой нулевой свечой

그러나 컴파일할 때 오류를 씁니다. 캐치 뭔데?

 
Kira27 :
여기요!!! 열거형 데이터 형식을 클래스 메서드 에 전달하는 방법을 알려주실 수 있습니까? 시간 프레임을 이전하고 싶다고 가정해 보겠습니다. Advisor 헤더에 열거형을 생성합니다.
다음으로 클래스에서 메서드를 선언합니다.
그리고 Expert Advisor에서 메서드를 호출할 때 열거형 - 프레임 - PERIOD_M30의 세 번째 값을 전달해야 하는 경우 아래 코드 질문에 무엇을 입력해야 하나요?

질문 1: 표준 ENUM_TIMEFRAMES 가 있는 경우 고유한 열거를 만드는 이유

 

틱 가격에 대한 질문입니다.

이 비용은 어떤 계약 크기(로트 크기)에 대해 고려됩니까?

예를 들어 EURUSD 통화 쌍에 대한 이 스크립트는 동일한 값을 제공하지만 금속의 경우 차이는 10배입니다. 어디서, 왜, 어떻게 알 수 있습니까?

 int OnStart ()
  {
//---
     // цена тика для символа
     double symb_tick_price = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE );
     // рассчитаная цена символа (для Forex, CFD - формула из справки)
     // Profit  = (close_price - open_price) * Contract_Size * Lots
     // т.е. берем размер тика и считаем по этой формуле
     // -> TickPrice  = TickSize * Contract_Size * Lots
     double symb_lot_size = 1.0 ;
     double symb_tick_size = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_SIZE );
     double symb_contract_size = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
     double calc_symb_tick_price = symb_tick_size * symb_contract_size * symb_lot_size;
     PrintFormat ( "Цена тика SYMBOL_TRADE_TICK_VALUE=%f, Цена тика ВЫЧИСЛЕННАЯ=%f" , symb_tick_price, calc_symb_tick_price);
//---
   return ( INIT_SUCCEEDED );
  }


NG       0        13 : 31 : 42.450     testTickPrice (EURUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE = 1.000000 , Цена тика ВЫЧИСЛЕННАЯ= 1.000000
OE       0        13 : 31 : 56.924     testTickPrice (XAGUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE = 0.500000 , Цена тика ВЫЧИСЛЕННАЯ= 5.000000
CE       0        13 : 40 : 00.848     testTickPrice (XAUUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE = 0.100000 , Цена тика ВЫЧИСЛЕННАЯ= 1.000000
 
Kira27 :
생각해보면 거기에 글을 써달라는 것 같다.

그러나 컴파일할 때 오류를 씁니다. 캐치 뭔데?

그런 열거를 하면

 enum frame1 // перечисление именованных констант
 {
  m1  = PERIOD_M1 ,
  m5  = PERIOD_M5 ,
  m15 = PERIOD_M15 ,
  m30 = PERIOD_M30 ,
  h1  = PERIOD_H1 ,
  h4  = PERIOD_H4 ,
  d1  = PERIOD_D1 ,
  W1  = PERIOD_W1 ,
  MN1 = PERIOD_MN1
 };

그런 다음 다음과 같이 작성하려고 할 수 있습니다.

 Trend_Line_Down[Timer_Down][ 1 ]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, ( ENUM_TIMEFRAMES )m30);     // Флаг пробоя трендовой нулевой свечой
 
Alexey Viktorov :

그런 열거를 하면

그런 다음 다음과 같이 작성하려고 할 수 있습니다.

... 그리고 한 달 안에 그것이 의미하는 바를 이해하려고 노력할 것입니다)))

그런 코드를 작성한다면 적어도 int로 가져오세요.

 enum frame1 // перечисление именованных констант
 {
  m1  = ( int ) PERIOD_M1 ,
  m5  = ( int ) PERIOD_M5 ,
  m15 = ( int ) PERIOD_M15 ,
  m30 = ( int ) PERIOD_M30 ,
  h1  = ( int ) PERIOD_H1 ,
  h4  = ( int ) PERIOD_H4 ,
  d1  = ( int ) PERIOD_D1 ,
  W1  = ( int ) PERIOD_W1 ,
  MN1 = ( int ) PERIOD_MN1
 };

최소한 작성자가 출력에서 얻을 수 있는 것을 이해할 수 있도록

... 비록 변태는 여전히))))

 
Igor Makanu :

... 그리고 한 달 안에 그것이 의미하는 바를 이해하려고 노력할 것입니다)))

그런 코드를 작성한다면 적어도 int로 가져오세요.

최소한 작성자가 출력에서 얻을 수 있는 것을 이해할 수 있도록

... 비록 변태는 여전히))))

왜 int로 번역합니까? 실제로 mql5에서 H1부터 시작 하여 열거 값 은 분 수와 동일하지 않습니다. 그리고 제 생각에는 오히려 지속적인 오해를 불러일으킬 것입니다.

 
Alexey Viktorov :

왜 int로 번역합니까? 실제로 mql5에서 H1부터 시작 하여 열거 값 은 분 수와 동일하지 않습니다. 그리고 제 생각에는 오히려 지속적인 오해를 불러일으킬 것입니다.

열거형의 이름이 4바이트 상수이기 때문에 = int

분이 아니라

 
Vladimir Karputov :

질문 1: 표준 ENUM_TIMEFRAMES 가 있는 경우 고유한 열거를 만드는 이유

답)) 30번째 차트에 그래픽 개체를 그린 후, 개체 이름에는 이 개체가 생성된 위치를 나타내는 M30 부분 문자열이 포함되어 있으며, 개체 데이터를 이중 배열에 쓸 때 이름을 부분 문자열로 분할하여 0 인덱스를 비교합니다. 배열을 반복하여 깨진 이름을 가진 배열의

//____________________string Массив таймфреймов______________________________
   NameFrame_Trend_Line[1]="M1";
   NameFrame_Trend_Line[2]="M5";
   NameFrame_Trend_Line[3]="M15";
   NameFrame_Trend_Line[4]="M30";
   NameFrame_Trend_Line[5]="H1";
   NameFrame_Trend_Line[6]="H4";
   NameFrame_Trend_Line[7]="Daily";
   NameFrame_Trend_Line[8]="Weekly";
   NameFrame_Trend_Line[9]="Monthly"; 

배열에서 동일한 문자열 의 인덱스 찾기

NameFrame_Trend_Line

인덱스를 int 배열과 연결

 //___________________int Массив таймфреймов__________________________________________
   TimeFrame[ 1 ]= 1 ;
   TimeFrame[ 2 ]= 5 ;
   TimeFrame[ 3 ]= 15 ;
   TimeFrame[ 4 ]= 30 ;
   TimeFrame[ 5 ]= 60 ;
   TimeFrame[ 6 ]= 240 ;
   TimeFrame[ 7 ]= 1440 ;
   TimeFrame[ 8 ]= 10080 ;
   TimeFrame[ 9 ]= 43200 ;

결과 값을 그래프의 특성을 저장하는 이중 배열에 씁니다. 사물. 또한, 라인의 브레이크아웃, 고정 및 테스트를 추적하기 위해 라인이 서로 다른 시간대에 생성되기 때문에 기록된 이중 배열에서 timeframe 매개변수를 전달해야 하는 방법을 사용합니다. , 테스트는 이러한 객체가 생성된 시간에 따라 계산되어야 하며, 외부에서는 현재 차트에 있는 기간에 따라 계산되어야 합니다. 어레이 값을 연관시킬 계획

TimeFrame

어레이 특성 그래프에 작성되었습니다. 객체, 배열에서 인덱스로 추출

   enum frame1 // перечисление именованных констант
     {
       PERIOD_M1 ,
       PERIOD_M5 ,
       PERIOD_M15 ,
       PERIOD_M30 ,
       PERIOD_H1 ,
       PERIOD_H4 ,
       PERIOD_D1 ,
       PERIOD_W1 ,
       PERIOD_MN1
     };
고장, 수리 및 테스트를 계산하는 방법으로 전달합니다.
 
Igor Makanu :

열거형의 이름이 4바이트 상수이기 때문에 = int

분이 아니라

그래서 무엇? ENUM_TIMEFRAMES 열거에 다른 것이 있습니까? 아니면 기억력 부족에 대한 두려움이 있습니까? 그렇게 귀찮아서 안되는데...


추신; 오, 내가 얼마나 천천히 타이핑하고 있는지…)))) 한 줄을 타이핑하는 동안 Kira27이 얼마나 타이핑했는지……… 그리고 내가 의심하는 것은 mql4에서 사용될 것입니다.

사유: