Biblioteca do conector MQL

Neste capítulo, aprenderemos como usar a biblioteca MT2Trading para enviar sinais diretamente do código MQL (indicador ou Expert Advisor).

Requisitos:

Para usar a biblioteca MT2Trading, certifique-se de que a biblioteca (mt2trading_library para MT4/5) seja copiada para a pasta da biblioteca do seu terminal MetaTrader (MQL4/Libraries ou MQL5/Libraries).

Declare as funções em seu indicador ou EA na parte superior do seu código com #import

Define a seção
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
};
Seção de importação de biblioteca
#import "mt2trading_library.ex4" // Please use only library version 12.4 or higher !!!

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" // Please use only library version 12.4 or higher !!!

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
Seção parâmetros de entrada
extern broker Broker = All;
extern string SignalName = "My Signal";             // Signal Name (optional)
extern double TradeAmount = 1;                      // Trade Amount
extern int ExpiryMinutes = 5;                       // Expiry Time [minutes]
extern martingale MartingaleType = NoMartingale;    // Martingale
extern int MartingaleSteps = 2;                     // Martingale Steps
extern double MartingaleCoef = 2.0;                 // Martingale Coefficient
OnInit () seção contém inicializações importantes.
  1. SendOnce é uma variável timestamp, a fim de evitar o envio de mais de um sinal por vela.
  2. SignalID é o parâmetro de identificação que é usado para assinar o sinal e pode ser usado posteriormente para receber o resultado comercial com a função de biblioteca traderesult (signalid). Também o signalID é usado para manter a faixa de seqüência de sinal Martingale. Enquanto os sinais OnNextExpiry podem ter um ID exclusivo, os sinais OnNextSignal devem ter ID exclusivo, para que o bot possa reconhecer os sinais como uma sequência de Martingale.
  3. asset (ativo) é o par de moedas do gráfico. Ele deve consistir de 6 caracteres (por exemplo, EURUSD).
int OnInit()
{
     // Initialize the time flag
     sendOnce = TimeCurrent();
     // Generate a unique signal id for signals management (based on timestamp, chart id and some random number)
     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 ()-seção

Exemplo para a colocação de trades up/down em Up_Arrow_Condition e 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[])
{

// Reinitialization of signalID if no martingale is used or martingale type is 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[])
{

// Reinitialization of signalID if no martingale is used or martingale type is 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 da função MT2Trading:
  1. Asset: Par de moedas (6 caracteres de comprimento, por exemplo, EURUSD).
  2. Direção: “CALL”/”PUT”. Um comércio da chamada significa a compra (sentido acima), um comércio põr significa a venda (sentido para baixo).
  3. Trade amount: Valor do operação na moeda da conta do corretor.
  4. ExpiryMinutes: Tempo de expiração em minutos.
  5. MartingaleType: Defina o tipo Martingale que deve ser aplicado (ignorado, se Martingale não é usado).
  6. MartingaleSteps: Número de passos Martingale.
  7. MartingaleCoef: O coeficiente que deve ser aplicado para os montantes de comércio de cálculo para cada passo Martingale (ignorado, se Martingale não é usado).
  8. Broker: Defina o corretor (opcional), ou todos os corretores.
  9. SignalName: Apenas um nome do sinal que será exibido na tabela de negociações. opcional
  10. signalID: Cada comércio tem a própria identificação que pode ser usada a fim recuperar mais tarde o resultado de comércio. Também o ID é usado para construir uma seqüência Martingale. Todos os comércios de uma seqüência Martingale tem o mesmo ID.