Библиотека коннекторов MQL

В этой главе мы узнаем, как использовать библиотеку MT2Trading для отправки сигналов непосредственно из кода MQL (индикатор или эксперт-консультант).

Требования:

Для того, чтобы использовать библиотеку MT2Trading, убедитесь, что библиотека (mt2trading-библиотека для MT4/5) скопирована в папку библиотеки вашего терминала MetaTrader (MQL4/Библиотеки или MQL5/Библиотеки).

Объявить о функциях в индикаторе или EA в верхней части кода с помощью #import

Определяет раздел
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
};
Секция импорта библиотек
#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
Секция входных параметров
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() содержит важные инициализации.
  1. sendOnce является переменной метки времени для того, чтобы предотвратить отправку более одного сигнала на свечу.
  2. signalID является параметром идентификации, который используется для подписания сигнала и может быть использован позже для получения результата торговли с функцией библиотеки traderesult (signalID). Также signalID использован для того чтобы держать след последовательности сигнала martingale. В то время как сигналы OnNextEx могут могут иметь уникальный идентификатор, сигналы OnNextSignal должны иметь уникальный идентификатор, для того, чтобы бот мог распознавать сигналы как одну последовательность мартингейла.
  3. актив является валютной парой графика. Он должен состоять из 6 символов (например, 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();
}
На расчет () — Раздел

Пример для размещения Up/Down сделок на Up’Arrow-Condition и 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);
}
Параметры функции MT2Trading:
  1. Активы: Валютная пара (6 символов длиной, например EURUSD).
  2. Направление: «ЗВОНОК» / «ПУТ». Торговля звонока намеревается купить (направление вверх), середины торговли положенных продадут (направление вниз).
  3. Сумма торговли: Сумма в валюте вашего брокерного счета.
  4. Срок действия: Время истечения минут.
  5. Тип Мартингале: Определите тип мартингейла, который должен быть применен (игнорирован, если мартингейл не используется).
  6. Мартингале Шаги: Количество мартингейлных шагов.
  7. Коэффициент Мартингейла: Коэффициент, который должен применяться для расчета торговых сумм для каждого шага мартингейла (игнорируется, если мартингейл не используется).
  8. Брокер: Определите брокера (по желанию) или всех брокеров.
  9. Название сигнала: Просто имя сигнала, который будет отображаться в таблице торгов. (необязательно)
  10. Идентификатор сигнала: Каждая сделка имеет собственный идентификатор, который может быть использован для того, чтобы получить результат сделки позже. Также идентификатор используется для построения последовательности мартингейла. Все сделки одной последовательности мартингейла имеет один и тот же идентификатор.