Unisciti alla nostra fan page
- Visualizzazioni:
- 12
- Valutazioni:
- Pubblicato:
-
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Questa libreria riduce le azioni di routine quando si lavora con i parametri di ingresso.
OOP.
Come esempio di utilizzo, prendiamo un consulente di trading. È ragionevole utilizzare un approccio OOP quando si scrive la logica di trading, perché rende più facile incorporare l'EA in sistemi più complessi.
Dal punto di vista architettonico, il consulente OOP per il Tester ha questo aspetto.
class SYSTEM { public: virtual void OnTick() {} // I dati in ingresso vengono emessi come stringa. virtual string ToString( void ) const = NULL; // I dati di ingresso sono specificati da una stringa. 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; }
Questo EA non fa nulla. Ma quando non si tratta di logica di trading, ma solo di lavorare con i parametri di ingresso, il codice cresce seriamente, peggiorando la leggibilità e aumentando la probabilità di errore. Di fatto, vi viene richiesto di eseguire uno spiacevole lavoro di routine.
Tutti i parametri di input come stringa.
.
Passiamo un po' alle linee evidenziate nel codice.
La pratica commerciale dimostra che è conveniente salvare/leggere i parametri di input in forma di stringa, in modo da poter vedere rapidamente e chiaramente gli insiemi di parametri di input a cui si è interessati (trovati).
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
Ad esempio, nel testo qui sopra sono presenti due serie di parametri di input.
I classici dell'OOP per lavorare con i parametri di input.
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); } // Non ho iniziato a scrivere. 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 ) { // Codice di sistema... // this.Inputs contiene i parametri di ingresso. }
Il codice ingombrante di cui sopra è lo stesso EA vuoto, ma solo con l'aggiunta (testo evidenziato) di lavorare con i parametri di input. Il codice è sgradevole, anche senza l'implementazione dell'importante metodo INPUT_STRUCT::FromString.
Se si vuole aggiungere/rimuovere un parametro di input, è necessario apportare le modifiche corrispondenti in cinque punti di questo codice. E così è ogni volta!
Alternativa OOP per lavorare con i parametri di input.
.
#include <fxsaber\Input_Struct\Input_Struct.mqh> // Struttura dei parametri di ingresso. 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 ) { // Codice di sistema... // this.Inputs contiene i parametri di ingresso. }
Il testo evidenziato è notevolmente inferiore. Allo stesso tempo, tutti i metodi sono implementati.

Scenari di utilizzo.
- Minimo tempo e probabilità di errore quando si modifica un insieme di parametri di input.
- Più tempo dedicato alla logica di trading piuttosto che alle caratteristiche tecniche.
- Salvataggio/lettura dei set di parametri di input tramite stringa.
- Notevole semplificazione della scrittura di sistemi complessi (portafogli, ecc.).
- Facile collegamento di algoritmi di ottimizzazione personalizzati.
Si noti che con l'approccio OOP è possibile nascondere molto testo ripetitivo nei file mqh, come avviene in entrambi gli esempi precedenti. L'OOP può anche essere conciso.
Caratteristiche.
- La struttura dei parametri di ingresso proposta è semplice, il che ne estende notevolmente l'applicabilità.
- Le strutture "modificate" possono essere passate l'una nell'altra tramite l'operatore di assegnazione. E hanno sempre la stessa dimensione.
- La libreria è multipiattaforma.
Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/47932
Sec-WebSocket-Key Generator
Generatore di chiavi Sec-WebSocket
RSI HTF
Una variante classica dell'indicatore tecnico RSI, che può essere individuata fissando il timeframe dell'indicatore a un valore diverso dal timeframe del grafico.
BullsBearsEyes
The sum of Bears Power and Bulls Power technical indicators values averaged using Laguerre algorithm.
MA_AC_Stochastic_Signal
This indicator shows trend direction (Moving Average) and trading signals (Stochastic + Accelerator).