MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 50

 
Sergey Gritsay :

이렇게 될 수 있을까


...

감사합니다 기록이 낯설지만 알아내겠습니다 이걸로 다시 만들어야겠네요
 
trader781 :
감사합니다 기록이 낯설지만 알아내겠습니다 이걸로 다시 만들어야겠네요

3줄에 쏙쏙 들어가고 이런 심플한 디자인에 족발 길이의 코드를 작성할 필요가 없어요

int BBars= 0 ;
void OnTick ()
  {
   if (BBars!= Bars )
     {BBars= Bars ;
       // код....
     }
  }
 
trader781 :
감사합니다 기록이 낯설지만 알아내겠습니다 이걸로 다시 만들어야겠네요

P 항목은 매우 간단하며 CNevBar 클래스는 하나의 new_bar 메소드로 작성됩니다. new_bar s 메소드는 지정된 기호 및 기간에 대한 새 막대 이벤트를 생성합니다. 새 막대 이벤트가 발생하면 new_bar 메서드는 true를 반환하고 그렇지 않으면 false를 반환합니다.

class CNevBar
  {
private :
   datetime           curbar;
   datetime           lastbar;
public :
                     CNevBar();
                    ~CNevBar();
   bool               new_bar( string symbol, ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar( void )
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar( string symbol, ENUM_TIMEFRAMES period)
  {
   curbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar== 0 )lastbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar!=curbar)
     {
      lastbar=curbar;
       return ( true );
     }
   return ( false );
  }


다음에 클래스 선언

CNevBar newbar;

코드에서 클래스 메서드의 추가 사용

if (newbar.new_bar( _Symbol , PERIOD_CURRENT ))

다음은 다른 악기와 기간에 이 클래스를 사용하는 예입니다.

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CNevBar
  {
private :
   datetime           curbar;
   datetime           lastbar;
public :
                     CNevBar();
                    ~CNevBar();
   bool               new_bar( string symbol, ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar( void )
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar( string symbol, ENUM_TIMEFRAMES period)
  {
   curbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar== 0 )lastbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar!=curbar)
     {
      lastbar=curbar;
       return ( true );
     }
   return ( false );
  }

CNevBar nb_1;
CNevBar nb_2;
CNevBar nb_3;
CNevBar nb_4;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (nb_1.new_bar( "EURUSD" , PERIOD_M5 )) Alert ( "Новый бар на EURUSD M5" );
   if (nb_2.new_bar( "GBPUSD" , PERIOD_M15 )) Alert ( "Новый бар на GBPUSD M15" );
   if (nb_3.new_bar( "USDJPY" , PERIOD_M30 )) Alert ( "Новый бар на USDJPY M30" );
   if (nb_4.new_bar( "AUDCAD" , PERIOD_H1 )) Alert ( "Новый бар на AUDCAD H1" );


  }
//+------------------------------------------------------------------+


이 수업의 결과

2016.12 . 27 20 : 00 : 02.827 test03 EURUSD,M1: Alert : Новый бар на USDJPY M30
2016.12 . 27 20 : 00 : 01.663 test03 EURUSD,M1: Alert : Новый бар на AUDCAD H1
2016.12 . 27 20 : 00 : 01.663 test03 EURUSD,M1: Alert : Новый бар на GBPUSD M15
2016.12 . 27 20 : 00 : 01.663 test03 EURUSD,M1: Alert : Новый бар на EURUSD M5
2016.12 . 27 19 : 55 : 01.999 test03 EURUSD,M1: Alert : Новый бар на EURUSD M5
...
 
Sergey Gritsay :


왜 클래스를 여기로 끌어야 하는지 이해가 되지 않습니다.
비탈리 무지첸코 :

3줄에 쏙쏙 들어가고 이런 심플한 디자인에 족발 길이의 코드를 작성할 필요가 없어요

int BBars= 0 ;
void OnTick ()
  {
   if (BBars!= Bars )
     {BBars= Bars ;
       // код....
     }
  }
즉, 대략적으로 말하면 OnTick모든 틱 을 확인하고 이전과 같이 60-90 쌍에서 리소스를 먹습니다.
 
trader781 :
왜 클래스를 여기로 끌어야 하는지 이해가 되지 않습니다.

클래스로 프로그래밍하는 것이 더 편리합니다. 현재 기호와 마침표에만 사용하면 클래스를 사용할 수 없으며 사용자 정의 함수로 얻을 수 있습니다.

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"
#property strict

datetime           curbar;
datetime           lastbar;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (new_bar( _Symbol , PERIOD_CURRENT )) Alert ( "Новый бар" );

  }
//+------------------------------------------------------------------+
bool new_bar( string symbol, ENUM_TIMEFRAMES period)
  {
   curbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar== 0 )lastbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar!=curbar)
     {
      lastbar=curbar;
       return ( true );
     }
   return ( false );
  }
//+------------------------------------------------------------------+
....
 
Sergey Gritsay :

수업은 프로그래밍하기 더 쉽습니다.


....
이유를 알 수 있습니까?
 

안녕하세요.

나중에 계산에 사용하기 위해 차트가 배치된 기간(기간)의 분 값의 제곱근 을 계산하고 싶습니다.

마침표()를 찾았지만 이것을 사용하여 수학 연산을 수행하는 방법은 무엇입니까?

말해 주세요.

 
AleksandrKr :

안녕하세요.

나중에 계산에 사용하기 위해 차트가 배치된 기간(기간)의 분 값의 제곱근을 계산하고 싶습니다.

마침표()를 찾았지만 이것을 사용하여 수학 연산을 수행하는 방법은 무엇입니까?

말해 주세요.

https://www.mql5.com/ru/docs/math
Документация по MQL5: Математические функции
Документация по MQL5: Математические функции
  • www.mql5.com
Математические функции - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
trader781 :
왜 클래스를 여기로 끌어야 하는지 이해가 되지 않습니다.
즉, 대략적으로 말하면 OnTick모든 틱 을 확인하고 이전과 같이 60-90 쌍에서 리소스를 먹습니다.

리소스가 도대체 무엇인지, 여기에 내 터미널에서 49자를 처리하기 위한 인증 코드가 있습니다. 기본적으로 200밀리초 미만이 소요됩니다.

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CNevBar
  {
private :
   datetime           curbar;
   datetime           lastbar;
public :
                     CNevBar();
                    ~CNevBar();
   bool               new_bar( string symbol, ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar( void )
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar( string symbol, ENUM_TIMEFRAMES period)
  {
   curbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar== 0 )lastbar=( datetime ) SeriesInfoInteger (symbol,period, SERIES_LASTBAR_DATE );
   if (lastbar!=curbar)
     {
      lastbar=curbar;
       return ( true );
     }
   return ( false );
  }

CNevBar *nb[];
int SymbolTotal= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   SymbolTotal= SymbolsTotal ( false );
   ArrayResize (nb,SymbolTotal);

   for ( int i= 0 ;i<SymbolTotal;i++)
     {
      nb[i]= new CNevBar();
       //Print("Экземпляр класса = ",nb[i]);
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   for ( int i= 0 ;i<SymbolTotal;i++) delete (nb[i]);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   ulong Start= 0 ;
   Start= GetMicrosecondCount ();
   for ( int i= 0 ;i<SymbolTotal;i++)
     {
       string symbol= SymbolName (i, false );
       if (nb[i].new_bar(symbol, PERIOD_M1 )) Print ( "Новый бар на " ,symbol, " M1" );
     }
   Print ( "На обработку всех символов в терминале ушло: " , GetMicrosecondCount ()-Start, " миллисекунд" );
  }
//+------------------------------------------------------------------+

결과

2016.12 . 27 22 : 24 : 01.182 Expert test03 EURUSD,M1: loaded successfully
2016.12 . 27 22 : 24 : 05.046 test03 EURUSD,M1: initialized
2016.12 . 27 22 : 24 : 39.497 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 66522 миллисекунд
2016.12 . 27 22 : 24 : 42.819 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд
2016.12 . 27 22 : 24 : 47.743 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд
2016.12 . 27 22 : 24 : 48.658 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 172 миллисекунд
2016.12 . 27 22 : 25 : 03.367 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд
2016.12 . 27 22 : 25 : 10.051 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12 . 27 22 : 25 : 10.051 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 183 миллисекунд
2016.12 . 27 22 : 25 : 17.232 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12 . 27 22 : 25 : 17.232 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 191 миллисекунд
2016.12 . 27 22 : 25 : 19.668 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 162 миллисекунд
2016.12 . 27 22 : 25 : 19.788 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 130 миллисекунд
2016.12 . 27 22 : 25 : 23.064 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 160 миллисекунд
2016.12 . 27 22 : 25 : 25.579 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12 . 27 22 : 25 : 57.800 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12 . 27 22 : 25 : 57.800 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12 . 27 22 : 25 : 57.800 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд
2016.12 . 27 22 : 25 : 58.510 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12 . 27 22 : 25 : 58.610 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 176 миллисекунд
2016.12 . 27 22 : 25 : 58.850 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд
2016.12 . 27 22 : 25 : 58.892 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 136 миллисекунд
2016.12 . 27 22 : 25 : 59.043 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 138 миллисекунд
2016.12 . 27 22 : 26 : 00.252 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 147 миллисекунд
2016.12 . 27 22 : 26 : 19.801 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12 . 27 22 : 26 : 19.801 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 156 миллисекунд
2016.12 . 27 22 : 26 : 26.219 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12 . 27 22 : 26 : 26.219 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12 . 27 22 : 26 : 26.219 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 170 миллисекунд
2016.12 . 27 22 : 26 : 35.065 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12 . 27 22 : 26 : 35.065 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 204 миллисекунд
2016.12 . 27 22 : 26 : 41.118 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 135 миллисекунд
2016.12 . 27 22 : 26 : 49.655 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 239 миллисекунд
2016.12 . 27 22 : 26 : 49.745 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12 . 27 22 : 26 : 56.357 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд
2016.12 . 27 22 : 26 : 56.467 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12 . 27 22 : 27 : 01.395 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12 . 27 22 : 27 : 01.395 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12 . 27 22 : 27 : 01.395 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд
2016.12 . 27 22 : 27 : 02.204 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12 . 27 22 : 27 : 02.204 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд
2016.12 . 27 22 : 27 : 02.304 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12 . 27 22 : 27 : 02.464 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12 . 27 22 : 27 : 03.143 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 134 миллисекунд
2016.12 . 27 22 : 28 : 33.018 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12 . 27 22 : 28 : 33.018 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12 . 27 22 : 28 : 33.018 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12 . 27 22 : 28 : 33.018 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 174 миллисекунд
2016.12 . 27 22 : 28 : 33.308 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд
2016.12 . 27 22 : 28 : 33.509 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12 . 27 22 : 28 : 33.509 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд
2016.12 . 27 22 : 28 : 44.137 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12 . 27 22 : 28 : 45.088 test03 EURUSD,M1: uninit reason 1
2016.12 . 27 22 : 28 : 45.158 Expert test03 EURUSD,M1: removed
 
고맙습니다.