Okul çocukları için OOP. - sayfa 18

 
Alexey Viktorov :

Evet? Yeni, bağımsız bir nesne yaratmıyor mu?

Şimdi kontrol edelim - Aşağıdaki satırları ekleyeceğim:

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

birlikte

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


ve test komut dosyası:

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


Sonuç:

 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


Bir nesne oluşturuldu, ardından İKİNCİ nesne (yeniden yaratma olmadığı ortaya çıktı - yeni bir tane oluşturuldu), SATIN AL pozisyonları sihirli "0" ile açıldı - yani ikinci "ticaret" ile açıldı nesne.

Ardından, iki nesnenin ters sırada yok edildiğini görebilirsiniz: önce ikincisi (sihirli "0" ile) ve sonra birincisi (sihirli "123" ile).

 
Alexey Viktorov :

Evet? Yeni, bağımsız bir nesne yaratmıyor mu?

evet, CTrade sınıfının yeni bir örneği olacak

kapsam normal bir değişkenle aynıdır ve dahası void OnTick() çıktığında, CTrade yıkıcı çağrılacak ve bir sonraki OnTick()'te CTrade yapıcısı yeniden çağrılacak

 
Igor Makanu :

evet, CTrade sınıfının yeni bir örneği olacak

kapsam normal bir değişkenle aynıdır ve dahası void OnTick() çıktığında, CTrade yıkıcı çağrılacak ve bir sonraki OnTick()'te CTrade yapıcısı yeniden çağrılacak

Evet, bunu Artyom'un cevabından hemen sonra anladım.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Okul çocukları için OOP.

Artyom Trishkin , 2019.10.08 20:23

Her şey değişkenlerle tamamen aynıdır.

Ve odaklan:

 #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 :

Benim düşünceme göre, mql, OOP kullanılarak çözülmesi gereken çok dar bir dizi göreve sahiptir. Bana öyle geliyor ki dilin kendisi C++'daki OOP'den veya başka bir şeyden başka bir şey değil. Ve bu OOP, OOP'yi standart bir kitaplık olarak sunar. Ve OOP'den bu OOP'ye, onu mahvetmeniz önerilir, aksi takdirde başka bir OOP diyemezsiniz. Ve sonra bir adım daha ... Büyücü doğru bir şekilde söyledi, kötü olsa da, ama iyiliksever olsa da, görevlerim için OOP bir köpek için bir dönüş gibidir. Ve eğer bu görev prosedürel bir tarzda sorunsuz bir şekilde çözülebiliyorsa, bir görev belirlemenin ve ardından OOP aracılığıyla uygulamanın kullanımı nedir?

Örneğin, MT5 ve MT4 için kod yazmak için fxsaber'dan .mqh alın. Belki birinin ihtiyacı vardır, ama bakın kim... mql5'i istemeyenler veya kesinlikle yapamayanlar için. Veya iCanvas'ı Nikolay'dan alın ..., soyadını unuttum, anlıyorsunuz. Yararlı bir kütüphane gibi görünüyor, ancak bunu anlamak kolay değil ve belge yok, en azından biraz açıklama. Bu bir şikayet değil, üzgünüm Nikolai, bu bir gerçek. Bu yüzden bir grafik etiket yazmayı denemeye karar verdiğimde, ne standart kütüphaneye ne de Nikolai'nin kütüphanesine başvurmadan yazmak benim için daha kolay oldu.

Aslında Alexey, KB'deki açıklama sayfasında iCanvas hakkında yeterince bilgi edinebilirsin. https://www.mql5.com/ru/code/22164 . Koddaki yorumları dikkatlice incelemeniz gerekir. Tüm işlevlerin anlamı adlarından sezgiseldir.

   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

Ama belki de haklısın. iCanvas kullanarak basit ama kullanışlı bir gösterge yazarak bir video kaydetmek ve bu sınıfın bazı özelliklerini net bir şekilde açıklamak gerekir. Hala nüanslar var.

Doğru, dürüst olmak gerekirse, iCanvas'ın yazılma şekli, artık kendimden gerçekten hoşlanmıyorum. Onu buruşturmak, çöpe atmak ve daha doğru bir üslupla yeniden yazmak istiyorum.

Bu kitaplıktaki kodun %70'i, koordinatlarla ve veri erişimiyle çalışmak için gereken bazı standart işlevlerin hızlandırılmasıdır.

Bu nedenle, bu sınıf kullanılırsa, grafikler CCanvas ile "head-on" yapıldığından daha hızlı olacaktır. Bu onun ana özelliği ve avantajıdır. Ve elbette, onunla grafikler, şekiller, yorumlar oluşturmak gerçekten daha kolay.

Ayrıca şunu da eklemek isterim Alexey, CodeBase'deki fxsaber ve benim yayınlarım da dahil olmak üzere birçok yayının amacı, ilgisiz "sadece paylaşın - kimin ihtiyacı varsa onu çözer". Bu nedenle, genellikle ayrıntılı talimatlarla zaman kaybetmek basitçe bozulur.

Özellikle forumda iCanvas kullanarak çok sayıda kısa ve açıklayıcı örnek yayınladım.
Örneğin:
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/en/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/en/forum/321704#comment_13131995

https://www.mql5.com/en/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 :

Aslında Alexey, KB'deki açıklama sayfasında iCanvas hakkında yeterince bilgi edinebilirsin. https://www.mql5.com/ru/code/22164 . Koddaki yorumları dikkatlice incelemeniz gerekir. Tüm işlevlerin anlamı adlarından sezgiseldir.

Nicholas, sözlerime aldırma. Programlama öğrencileri arasında benim gibi o kadar az insan var ki, yalnız değilsem, onlara hiç dikkat etmeye değmez.

Benim için koddaki yorumları öğrenmek için önce İngilizceyi öğrenmelisiniz.)))

Acil bir ihtiyaç olurdu, zaman harcamak ve tüm yorumları çevirmek, makine çevirisini anlamaya çalışmak ve düzeltmek mümkün olurdu. Ama böyle bir ihtiyaç yok.

 
Alexey Viktorov :

Örneğin, MT5 ve MT4 için kod yazmak için fxsaber'dan .mqh alın. Belki birinin ihtiyacı vardır, ama bakın kim... mql5'i istemeyenler veya kesinlikle yapamayanlar için.

Muhtemelen MQL5'i oldukça iyi biliyorum, ancak bir ticaret kitaplığına ihtiyaç var. Bu, MT4 stiliyle ilgili değil, MT5 için çalışmak için uygun ve hızlı olacak bir ticaret kitaplığı ile ilgili. Ve gerçek ticarette hiçbir hatanın olmadığı.

Halk arasında böyle bir kütüphane olmadığı için (var mı bilmiyorum) kendi heykelimi kendim yapmak zorunda kaldım. Bunu yapmak için, bir dizi ticaret işlevi şeklinde hangi bisikletin icat edileceğine karar vermek gerekiyordu. Oldukça iyi olduğu için bir MT4 kiti ödünç aldım. Ne bir bonus, kütüphane için belge yazmamayı ve çalışmamayı mümkün kıldı. Peki, diğer güzellikler.

Bu nedenle, MQL5 bilgisi bazen kullanıcılar arasında yüksek düzeydedir.