Libreria Conector MQL

En este capítulo aprenderemos cómo usar la biblioteca MT2Trading para enviar señales directamente desde código MQL (ya sea indicador o asesor experto).

Requisitos:

Para utilizar la biblioteca MT2Trading, asegúrese de que la biblioteca (mt2trading_library for MT4 / 5) esté copiada en la carpeta de la biblioteca de su terminal MetaTrader (MQL4 / Libraries o MQL5 / Libraries).

Declare las funciones en su indicador o EA en la parte superior de su código con #import

Definiciones
enum broker {
     All = 0,
     IQOption = 1,
     Binary = 2,
     Spectre = 3,
     Alpari = 4
};
enum martingale {
     NoMartingale = 0,
     OnNextExpiry = 1,
     OnNextSignal = 2,
     Anti_OnNextExpiry = 3,
     Anti_OnNextSignal = 4,
     OnNextSignal_Global= 5,
     Anti_OnNextSignal_Global = 6
};

enum result {
     TIE = 0,
     WIN = 1,
     LOSS = 2
};
Importación de librerias
#import "mt2trading_library.ex4" // Por favor use solo la versión de biblioteca 12.4 o superior !!!

bool mt2trading (string symbol, string direction, double amount, int expiryMinutes);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes, string signalname);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes,
                 martingale martingaleType, int martingaleSteps, double martingaleCoef, 
                 broker myBroker, string signalName, string signalid);
int traderesult (string signalid);

#import
#import "mt2trading_library.ex5" // Por favor use solo la versión de biblioteca 12.4 o superior !!!

bool mt2trading (string symbol, string direction, double amount, int expiryMinutes);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes, string signalname);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes,
                 martingale martingaleType, int martingaleSteps, double martingaleCoef, 
                 broker myBroker, string signalName, string signalid);
int traderesult (string signalid);

#import
Parámetros de entrada
extern broker Broker = All;
extern string SignalName = "My Signal";             // Nombre de la señal (opcional)
extern double TradeAmount = 1;                      // Monto de operación
extern int ExpiryMinutes = 5;                       // Tiempo de expiracion [minutos]
extern martingale MartingaleType = NoMartingale;    // Martingala
extern int MartingaleSteps = 2;                     // Pasos de Martingala
extern double MartingaleCoef = 2.0;                 // Coeficiente de Martingala
OnInit () contiene importantes inicializaciones.
  1. sendOnce es una variable de marca de tiempo para evitar el envío de más de una señal por vela.
  2. signalID es el parámetro de identificación que se utiliza para firmar la señal y se puede usar más adelante para recibir el resultado comercial con la función de biblioteca traderesult (signalID). Además, la ID de señal se utiliza para mantener la pista de la secuencia de señales de martingala. Mientras que las señales OnNextExpiry pueden tener una identificación única, las señales OnNextSignal deben tener una identificación única, para que el robot pueda reconocer las señales como una secuencia de martingala.
  3. asset es el par de divisas del gráfico. Debe constar de 6 caracteres (por ejemplo, EURUSD).
int OnInit()
{
     // Inicializar la flag de tiempo
     sendOnce = TimeCurrent();
     // Generar signalID (ID única) para la gestión de señales (según la marca de tiempo, ID del gráfico y un número aleatorio)
     MathSrand(GetTickCount());
     if (MartingaleType == OnNextSignal || MartingaleType == Anti_OnNextSignal)
          signalID = IntegerToString(GetTickCount()) + IntegerToString(MathRand()); // indicator-wide id
     else if (MartingaleType = OnNextSignal_Global || MartingaleType == Anti_OnNextSignal_Global)
          signalID = IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN))
                     + IntegerToString(TerminalInfoInteger(TERMINAL_BUILD))
                     + AccountInfoString(ACCOUNT_NAME);   // terminal-wide id
     if (StringLen(Symbol()) >= 6)
          asset = StringSubstr(Symbol(),0,6);
     else
          asset = Symbol();
}
OnCalculate() – Sección

Ejemplo para colocar operaciones Up/Down en Up_Arrow_Condition y Down_Arrow_Condition:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

// Reinicialización de signalID si no se usa martingala o el tipo de martingala es OnNextExpiry

if (MartingaleType == NoMartingale || MartingaleType == OnNextExpiry || MartingaleType == Anti_OnNextExpiry)
     signalID = IntegerToString(GetTickCount()) + IntegerToString(MathRand()); // candle-wide unique id

//...

bool Up_Arrow_Condition = ...
bool Down_Arrow_Condition = ...

if (UP_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "CALL", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

if (DOWN_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "PUT", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

//...
return(rates_total);
}
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

// Reinicialización de signalID si no se usa martingala o el tipo de martingala es OnNextExpiry

if (MartingaleType == NoMartingale || MartingaleType == OnNextExpiry || MartingaleType == Anti_OnNextExpiry)
     signalID = IntegerToString(GetTickCount()) + IntegerToString(MathRand()); // candle-wide unique id

//...

ArraySetAsSeries(time,true); // ---> only in MQL5

bool Up_Arrow_Condition = ...
bool Down_Arrow_Condition = ...

if (UP_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "CALL", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

if (DOWN_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "PUT", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

//...
return(rates_total);
}
Parámetros de la función MT2Trading:
  1. Asset: Par de divisas (6 caracteres de longitud, por ejemplo, EURUSD).
  2. Direction: «CALL» / «PUT». CALL significa comprar (dirección arriba), PUT significa vender (dirección abajo).
  3. Trade Amount: Monto en la moneda de su cuenta de corredor.
  4. Expiration time: Tiempo de caducidad en minutos.
  5. Martingale Type: Define el tipo de martingala que se debe aplicar.
  6. Martingale Steps: Número de pasos de martingala (Ignorado si no se usa Martingala).
  7. Martingale Coefficient: El coeficiente que se debe aplicar para calcular los montos para cada paso de martingala (Ignorado si no se usa Martingala).
  8. Broker: Defina broker (opcional), o utilice todos los brokers.
  9. Signal Name: Solo un nombre de la señal que se mostrará en la tabla de operaciones. (opcional)
  10. Signal ID: Cada operación tiene una identificación propia que se puede usar para recuperar el resultado de la operación más adelante. También la identificación se utiliza para construir las secuencias de martingala. Todas las operaciones de una secuencia de martingala tienen la misma identificación.