Mira cómo descargar robots gratis
¡Búscanos en Facebook!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Visualizaciones:
123
Ranking:
(5)
Publicado:
Actualizado:
\MQL5\Include\fxsaber\Input_Struct\
System.mqh (0.48 KB) ver
Example.mqh (0.46 KB) ver
Input_Struct.mqh (43.33 KB) ver
\MQL5\Experts\
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Esta biblioteca reduce las acciones rutinarias cuando se trabaja con parámetros de entrada.


POO.

Como ejemplo de uso, tomemos un asesor de trading. Es razonable usar el enfoque OOP cuando se escribe lógica de trading, porque hace más fácil incrustar EA en sistemas más complejos.


Arquitectónicamente, el asesor OOP para el Probador se ve así.

    class SYSTEM
    {
    public:
      virtual void OnTick() {}
    
      // Los datos de entrada se muestran como una cadena.
      virtual string ToString( void ) const = NULL;
      
      // Los datos de entrada se especifican mediante una cadena.
      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;
    }

    Este EA no hace nada. Pero cuando no se trata de lógica de trading, sino sólo de trabajar con parámetros de entrada, el código crece seriamente, lo que empeora la legibilidad y aumenta la probabilidad de error. De hecho, usted está obligado a realizar el trabajo de rutina desagradable.


    Todos los parámetros de entrada como una cadena.
    .

    Desviémonos un poco hacia las líneas resaltadas en el código.

    La práctica comercial muestra que es conveniente guardar/leer los parámetros de entrada en forma de cadena, para que pueda ver rápida y claramente los conjuntos de parámetros de entrada que le interesan (encontrados).

    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

    Por ejemplo, hay dos conjuntos de parámetros de entrada en el texto anterior.


    OOP-clásicos de trabajo con parámetros de entrada.

    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);
      }
      
      // No empecé a escribir.
      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 )
    {
      // Código del Sistema...
     // this.Inputs contiene parámetros de entrada.
    }

    El código engorroso de arriba es el mismo EA vacío, pero sólo con la adición (texto resaltado) de trabajar con parámetros de entrada. El código es desagradable, e incluso sin la implementación del importante método INPUT_STRUCT::FromString.

    Si quieres añadir/eliminar un parámetro de entrada, tendrás que hacer los cambios correspondientes en cinco lugares de este código. ¡Y así es cada vez!


    OOP-alternativa de trabajar con parámetros de entrada.
    .

    #include <fxsaber\Input_Struct\Input_Struct.mqh> // Estructura de los parámetros de entrada.
    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 )
    {
      // Código del Sistema...
     // this.Inputs contiene parámetros de entrada.
    }

    Hay notablemente menos texto resaltado. Al mismo tiempo, todos los métodos están implementados.


    Escenarios de uso.

    • Tiempo mínimo y probabilidad de error al cambiar un conjunto de parámetros de entrada.
    • Más tiempo dedicado a la lógica comercial que a las características técnicas.
    • Almacenamiento/lectura de conjuntos de parámetros de entrada mediante cadenas.
    • Simplificación significativa de la escritura de sistemas complejos (carteras, etc.).
    • Fácil conexión de algoritmos de optimización personalizados.

    Tenga en cuenta que con el enfoque OOP, una gran cantidad de texto repetitivo se puede ocultar en los archivos mqh - como se hace en los dos ejemplos anteriores. La POO también puede ser concisa.


    Características.

    • La estructura de parámetros de entrada propuesta es sencilla, lo que amplía enormemente su aplicabilidad.
    • Las estructuras "modificadas" pueden pasarse unas a otras mediante el operador de asignación. Y siempre tienen el mismo tamaño.
    • La biblioteca es multiplataforma.

    Traducción del ruso realizada por MetaQuotes Ltd
    Artículo original: https://www.mql5.com/ru/code/47932

    Sec-WebSocket-Key Generator Sec-WebSocket-Key Generator

    Generador de claves Sec-WebSocket

    Simple_Pending_Orders_Time Simple_Pending_Orders_Time

    El Asesor Experto trabaja con órdenes pendientes Buy Stop y Sell Stop según el tiempo especificado en sus parámetros de entrada.

    Visualización del precio MA Visualización del precio MA

    El indicador se escribe a petición en el foro.

    Open Trade Open Trade

    Esta función realiza la lógica principal de apertura de una operación. Calcula el precio de apertura, los niveles de take profit y stop loss en base a la información del símbolo y los parámetros proporcionados por el usuario. Prepara una petición de operación (MqlTradeRequest) con la información necesaria, como símbolo, volumen, tipo de orden, desviación, comentario, número mágico, etc. Llama a la función OrderSend para enviar la petición de operación y obtener el resultado. Función SetTypeFillingBySymbol: Determina el tipo de ejecución de la orden (Fill o Kill, Immediate o Cancel, o Return) basándose en la política de ejecución del símbolo. Función GetMinTradeLevel: Calcula el nivel mínimo de operación basándose en el nivel de congelación y el nivel de paradas del símbolo. Ajusta el nivel mínimo para asegurarse de que está dentro de ciertos límites y devuelve el resultado.