학생을 위한 OOP. - 페이지 18

 
Alexey Viktorov :

예? 새롭고 독립적인 객체를 생성하지 않습니까?

이제 확인하겠습니다. 다음 줄을 삽입하겠습니다.

 //+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade( void ) : m_async_mode( false ),
   m_magic( 0 ),
   m_deviation( 10 ),
   m_type_filling( ORDER_FILLING_FOK ),
   m_log_level(LOG_LEVEL_ERRORS)

  {
   SetMarginMode();
//--- initialize protected data
   ClearStructures();
//--- check programm mode
   if ( MQL5InfoInteger ( MQL5_TESTING ))
      m_log_level=LOG_LEVEL_ALL;
   if ( MQL5InfoInteger ( MQL5_OPTIMIZATION ))
      m_log_level=LOG_LEVEL_NO;
//---
   Print ( __FUNCTION__ , ", magic " , IntegerToString (m_magic));
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CTrade::~CTrade( void )
  {
//---
   Print ( __FUNCTION__ , ", magic " , IntegerToString (m_magic));
  }

만큼 잘

 //+------------------------------------------------------------------+
//| Buy operation                                                    |
//+------------------------------------------------------------------+
bool CTrade::Buy( const double volume, const string symbol= NULL , double price= 0.0 , const double sl= 0.0 , const double tp= 0.0 , const string comment= "" )
  {
//---
   Print ( __FUNCTION__ , ", magic " , IntegerToString (m_magic));


및 테스트 스크립트:

 //+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   trade.SetExpertMagicNumber( 123 );
//---
   CTrade trade;
   trade.Buy( 0.1 );
  }
//+------------------------------------------------------------------+


결과:

 2019.10 . 09 11 : 25 : 44.645 Test_ru (EURUSD,H1)     CTrade::CTrade, magic 0
2019.10 . 09 11 : 25 : 44.645 Test_ru (EURUSD,H1)     CTrade::CTrade, magic 0
2019.10 . 09 11 : 25 : 44.645 Test_ru (EURUSD,H1)     CTrade::Buy, magic 0
2019.10 . 09 11 : 25 : 44.645 Test_ru (EURUSD,H1)     CTrade:: OrderSend : instant buy 0.10 EURUSD at 1.09862 [auto trading disabled by client]
2019.10 . 09 11 : 25 : 44.645 Test_ru (EURUSD,H1)     CTrade::~CTrade, magic 0
2019.10 . 09 11 : 25 : 44.645 Test_ru (EURUSD,H1)     CTrade::~CTrade, magic 123


하나의 개체가 생성된 다음 두 번째 개체(재창조가 없는 것으로 판명됨 - 새 개체가 생성됨), BUY 위치가 마법 "0"으로 열립니다. 즉, 두 번째 "trade" 개체에 의해 열렸습니다. .

그러면 두 개체가 역순으로 파괴되는 것을 볼 수 있습니다. 첫 번째 개체(마법 "0" 사용)와 첫 번째 개체(마법 "123" 사용)입니다.

 
Alexey Viktorov :

예? 새롭고 독립적인 객체를 생성하지 않습니까?

예, CTrade 클래스의 새 인스턴스가 있습니다.

범위는 일반 변수의 범위와 동일하며 void OnTick()이 종료되면 CTrade 소멸자가 호출되고 다음 OnTick()에서 CTrade 생성자가 다시 호출됩니다.

 
Igor Makanu :

예, CTrade 클래스의 새 인스턴스가 있습니다.

범위는 일반 변수의 범위와 동일하며 void OnTick()이 종료되면 CTrade 소멸자가 호출되고 다음 OnTick()에서 CTrade 생성자가 다시 호출됩니다.

예, Artyom의 답변 직후에 이해했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

학생을 위한 OOP.

Artyom Trishkin , 2019.10.08 20:23

모든 것은 변수와 완전히 동일합니다.

그리고 초점:

 #include <Trade\Trade.mqh>
CTrade trade;   // Объект trade в глобальной области программы

int OnInit ()
{
 trade.SetExpertMagicNumber( 123 );
}

void OnTick ()
{
 CTrade *trade_ptr=GetPointer(trade);  // Указатель на объект trade
 trade_ptr.Buy( 0.1 );
}

 
Alexey Viktorov :

제 생각에 mql에는 OOP를 사용하여 해결해야 하는 매우 좁은 작업 세트가 있습니다. 내가 보기에 언어 자체는 C ++의 OOP 또는 다른 것에 지나지 않습니다. 그리고 이 OOP는 OOP를 표준 라이브러리로 제공합니다. 그리고 OOP의 이 OOP에 대해 망칠 것을 제안합니다. 그렇지 않으면 다른 OOP를 말할 수 없습니다. 그리고 한 걸음 더 ... The Sorcerer는 비록 사악하지만 자비로운 내 일을 위해 OOP는 개 차례와 같다고 올바르게 말했습니다. 그리고 이 작업이 절차적 방식으로 문제 없이 해결될 수 있다면 작업을 설정하고 OOP를 통해 구현하는 것이 무슨 소용이겠습니까?

예를 들어, fxsaber에서 .mqh를 가져와 MT5 및 MT4용 코드를 작성합니다. 누군가가 그것을 필요로 할 수도 있지만 누가 ... mql5를 마스터하기를 원하지 않거나 절대적으로 마스터 할 수없는 사람들에게. 또는 Nikolay의 iCanvas를 가져오십시오 ..., 나는 그의 성을 잊어 버렸습니다. 이해합니다. 유용한 라이브러리인 것 같지만 알아내기가 쉽지 않고, 설명서도 없고 최소한의 설명도 없습니다. 이것은 불만이 아닙니다. 죄송합니다. Nikolai, 이것은 사실입니다. 그래서 그래픽 레이블을 작성하려고 했을 때 표준 라이브러리나 Nikolai의 라이브러리를 참조하지 않고 작성하는 것이 더 쉬웠습니다.

사실 Alexey, KB의 설명 페이지에서 iCanvas에 대한 충분한 정보를 얻을 수 있습니다. https://www.mql5.com/ru/code/22164 . 코드의 주석을 주의 깊게 연구해야 합니다. 모든 기능의 의미는 이름에서 직관적입니다.

   double             X( double bar);         // The X coordinate by the bar number. The bar number must be of type double, otherwise, the bar will be interpreted as time.
   double             X( datetime Time);     // The X coordinate by the time.
   double             Y( double Price);       // The Y coordinate by the price.
   double             Price( int y);         // Price by the Y coordinate
   double             Bar( int x);           // bar number by coordinate X                                                                      
   datetime           TimePos( int x);       // time by coordinate X 
   double             Close( int x);     
   double             Open( int x);    
   double             High( int x);     
   double             Low( int x);     
 
   void               Comm( string text);                 // Print comment
   void               TextPosition( int x, int y);         // Setting the XY position for comment output in pixels
   void               TextPosition( double x, double y);   // Setting the XY position for outputting comments as a percentage of the width and height of the window
   void               CurentFont( string FontName= "Courier New" , int size= 18 , int LineStep= 20 , color clr= clrDarkOrchid , double transp= 1.0 );   // Set font options for comment. LineStep - step between lines. transp - transparency from 0 to 1
   void               LineD( double x1, double y1, double x2, double y2, const uint clr); // тоже самое что и Line в CCanvas, только без глюков и с double координатами
   int                TextPosX;       // Position X for comment text
   int                TextPosY;       // Position Y for comment text
   int                StepTextLine;   // line spacing for comment
   uint               TextColor;     // Font color for comment

그러나 아마도 당신이 옳을 것입니다. iCanvas를 사용하여 간단하지만 유용한 지표를 작성하여 비디오를 녹화하고 이 클래스의 일부 기능을 명확하게 설명해야 합니다. 아직 뉘앙스가 있습니다.

사실, 솔직히 말해서 iCanvas가 작성되는 방식은 지금 제 자신이 정말 마음에 들지 않습니다. 구겨서 쓰레기통에 버리고 좀 더 정확한 스타일로 다시 쓰고 싶다.

이 라이브러리에 있는 코드의 70%는 좌표 및 데이터 액세스 작업에 필요한 일부 표준 기능의 가속입니다.

따라서 이 클래스를 사용하면 CCanvas로 "정면"으로 수행하는 것보다 그래픽이 더 빠릅니다. 이것이 주요 특징이자 장점입니다. 그리고 물론 그래프, 그림, 주석을 만드는 것이 더 쉽습니다.

또한 Alexey는 fxsaber와 제 간행물을 포함하여 CodeBase에 있는 많은 간행물의 목표가 무관심한 "그냥 공유 - 필요한 사람이 알아낼 것"이라고 덧붙이고 싶습니다. 따라서 자세한 지침에 시간을 낭비하는 경우가 많습니다.

특히 포럼에서는 iCanvas를 사용하여 짧고 설명적인 예제를 많이 게시했습니다.
예를 들어:
https://www.mql5.com/ru/code/25929

https://www.mql5.com/ru/code/25113

https://www.mql5.com/ru/code/25414

https://www.mql5.com/en/code/24798

https://www.mql5.com/ru/forum/227736/page41#comment_13259627

https://www.mql5.com/ru/forum/227736/page24#comment_12836622

https://www.mql5.com/en/forum/323629#comment_13442470

https://www.mql5.com/ru/forum/321704#comment_13131995

https://www.mql5.com/ru/forum/317257/page3#comment_12341593

https://www.mql5.com/en/forum/229521/page2#comment_10258148


Easy Canvas
Easy Canvas
  • www.mql5.com
Данная библиотека и класс iCanvas упростит написание программ с применением Canvas. Вот пример простого индикатора с применением данной библиотеки и его демонстрация. Обратите внимание, что в данном примере в теле индикатора отсутствует функция обработки событий OnChartEvent. Но она также может и присутствовать. Особенности данной библиотеки...
 
Nikolai Semko :

사실 Alexey, KB의 설명 페이지에서 iCanvas에 대한 충분한 정보를 얻을 수 있습니다. https://www.mql5.com/ru/code/22164 . 코드의 주석을 주의 깊게 연구해야 합니다. 모든 기능의 의미는 이름에서 직관적입니다.

니콜라스, 내 말에 신경 쓰지 마. 프로그래밍을 하는 학생들 중에는 나 같은 사람이 너무 적어서 혼자가 아니라면 그들에게 관심을 기울일 가치가 전혀 없다.

저에게 코드의 주석을 배우려면 먼저 영어를 배워야 합니다.)))

긴급한 필요가있을 것입니다. 시간을 보내고 모든 의견을 번역하고 기계 번역을 이해하고 수정하려고 노력할 수 있습니다. 그러나 그런 필요는 없습니다.

 
Alexey Viktorov :

예를 들어, fxsaber에서 .mqh를 사용하여 MT5 및 MT4용 코드를 작성합니다. 누군가는 그것을 필요로 할 수도 있지만 누가 봐... mql5를 마스터하기를 원하지 않거나 완전히 마스터할 수 없는 사람들을 위해.

MQL5를 꽤 잘 알고 있는 것 같지만 트레이딩 라이브러리가 필요합니다. 이것은 MT4 스타일에 관한 것이 아니라 MT5를 위한 거래 라이브러리에 관한 것입니다. 이 라이브러리는 작업하기에 편리하고 빠릅니다. 그리고 실제 거래에는 버그가 없습니다.

대중에게 그런 도서관이 없었기 때문에(있는지 모르겠습니다), 제가 직접 조각해야 했습니다. 이를 위해서는 일련의 거래 기능 형태로 어떤 자전거를 발명 할지 결정해야 했습니다. MT4 키트가 꽤 괜찮아서 빌렸습니다. 도서관에 대한 문서를 작성하지 않고 연구할 수 있게 된 것은 얼마나 큰 보너스였습니다. 글쎄, 다른 좋은 것들.

따라서 MQL5에 대한 지식은 때때로 사용자들 사이에서 높은 수준에 있습니다.