Bu kütüphane, giriş parametreleri ile çalışırken rutin işlemleri azaltır.
Bir kullanım örneği olarak, bir ticaret danışmanını ele alalım. Ticaret mantığı yazarken OOP yaklaşımını kullanmak mantıklıdır, çünkü EA'yı daha karmaşık sistemlere yerleştirmeyi kolaylaştırır.
Mimari olarak, Test Cihazı için OOP-danışmanı şöyle görünür.
class SYSTEM { public: virtual void OnTick() {} // Giriş verisi bir dize olarak çıkarılır. virtual string ToString( void ) const = NULL; // Giriş verileri bir dize ile belirtilir. virtual int FromString( const string Str ) = NULL; }; SYSTEM* System = NULL; void OnInit() { System = new SYSTEM; } void OnTick() { System.OnTick(); } void OnDeinit( const int ) { delete System; }
Bu EA hiçbir şey yapmaz. Ancak ticaret mantığı değil, yalnızca giriş parametreleriyle çalışmak söz konusu olduğunda, kod ciddi şekilde büyür, bu da okunabilirliği kötüleştirir ve hata olasılığını artırır. Aslında, hoş olmayan rutin işler yapmanız gerekir.
Biraz da kodda vurgulanan satırlara yönelelim.
Ticari uygulamalar, giriş parametrelerini dize biçiminde kaydetmenin/okumanın uygun olduğunu gösterir, böylece ilgilendiğiniz (bulunan) giriş parametreleri kümelerini hızlı ve net bir şekilde görebilirsiniz.
Amount = 1, Count = 2, Period = 3, Koef = 4.5, Log = 6.7, Flag = true Amount = 2, Count = 3, Period = 4, Koef = 4.56, Log = 7.89, Flag = false
Örneğin, yukarıdaki metinde iki giriş parametresi kümesi vardır.
input int inAmount = 1; input int inCount = 2; input int inPeriod = 3; input double inKoef = 4.56; input double inLog = 7.89; input bool inFlag = true; struct INPUT_STRUCT { int Amount; int Count; int Period; double Koef; double Log; bool Flag; string ToString( void ) const { string Str = NULL; #define TOSTRING(A) Str += (::StringLen(Str) ? ", " : NULL ) + #A + " = " + (string)(this.A); TOSTRING(Amount); TOSTRING(Count); TOSTRING(Period); TOSTRING(Koef); TOSTRING(Log); TOSTRING(Flag); #undef TOSTRING return(Str); } // Yazmaya başlamadım. int FromString( const string Str ) { return(0); } } inInputs = {inAmount, inCount, inPeriod, inKoef, inLog, inFlag}; #include <fxsaber\Input_Struct\Example_OnTick.mqh> void EXAMPLE::OnTick( void ) { // Sistem Kodu... // this.Inputs giriş parametrelerini içerir. }
Yukarıdaki hantal kod aynı boş EA'dır, ancak yalnızca giriş parametreleriyle çalışma eklenmiştir (vurgulanan metin). Kod, önemli INPUT_STRUCT::FromString yönteminin uygulanması olmadan bile hoş değildir.
Bir girdi parametresi eklemek/kaldırmak isterseniz, bu kodun beş yerinde ilgili değişiklikleri yapmanız gerekecektir. Ve bu her zaman böyledir!
#include <fxsaber\Input_Struct\Input_Struct.mqh> // Giriş parametrelerinin yapısı. INPUT_STRUCT inInputs; MACROS_INPUT(int, Amount, 1); MACROS_INPUT(int, Count, 2); MACROS_INPUT(int, Period, 3); MACROS_INPUT(double, Koef, 4.56); MACROS_INPUT(double, Log, 7.89); MACROS_INPUT(bool, Flag, true); #include <fxsaber\Input_Struct\Example_OnTick.mqh> void EXAMPLE::OnTick( void ) { // Sistem Kodu... // this.Inputs giriş parametrelerini içerir. }
Gözle görülür şekilde daha az vurgulanmış metin vardır. Aynı zamanda tüm yöntemler uygulanmaktadır.

OOP yaklaşımıyla, yukarıdaki her iki örnekte de yapıldığı gibi, mqh dosyalarında çok sayıda tekrarlayan metnin gizlenebileceğini unutmayın. OOP aynı zamanda özlü de olabilir.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/47932
Sec-WebSocket-Key Generator
Sec-WebSocket-Anahtar Oluşturucu
RSI HTF
Gösterge zaman çerçevesini grafik zaman çerçevesinden farklı bir değere sabitleyerek bulunabilen RSI teknik göstergesinin klasik bir çeşidi
TandemInstrument
Bir enstrümanın grafiğini başka bir enstrümanın ana penceresinin grafiğinde görmenizi sağlar.
i-BB-Genişlik
Bollinger Bant Genişliği Göstergesi. Uygulama yöntemlerinden biri FOREX Dergisi №123 Haziran 2006 sayfa 47'de açıklanmıştır.