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

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

Библиотека MT2Trading позволяет отправлять торговые сигналы непосредственно из кода MQL (либо из технического индикатора, либо из EA).

Требования:

Для использования библиотеки MT2Trading убедитесь, что библиотека (mt2trading_library для MT4/5) скопирована в папку библиотеки вашего терминала MetaTrader (MQL4/Libraries или MQL5/Libraries).
Declare the functions in your indicator or EA at the top of your code with #import.

Определяет раздел

enum broker {
	All = 0,
	IQOption = 1,
	Binary = 2,
	Spectre = 3,
	Alpari = 4,
	InstaBinary = 5,
	OptionField = 6,
	CLMForex = 7,
	DukasCopy = 8,
	GCOption = 9,
	StrategyTester = 10,
	CapitalCore = 11,
	PocketOption = 12,
	Bitness = 13
};
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
};

Секция импорта библиотек

МQL4

#import "mt2trading_library.ex4" 
	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);
	double tradeprofit (string signalid);
#import

MQL5

#import "mt2trading_library.ex5"
	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);
	double tradeprofit (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 используется для
    отслеживания мартингейла
    последовательности сигналов. А на следующей экспирации сигналы могут иметь уникальный идентификатор, the 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();
	}

OnCalculate() – Section

Пример для размещения Up/Down сделок на Up_Arrow_Condition и Down_Arrow_Condition:

МQL4

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);
}

MQL5

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. Direction: “CALL” / “PUT”. Торговля звонока намеревается купить (направление вверх), середины торговли положенных продадут (направление вниз).
  3. Сумма сделки: сумма в валюте вашего брокерского счета.
  4. Время экспирации: время экспирации в минутах.
  5. Тип мартингейла: Определите тип мартингейла, который должен быть применен (игнорирован, если мартингейл не используется).
  6. Шаги мартингейла: Количество шагов мартингейла.
  7. Martingale Coefficient: The coefficient that should be applied for calculation trade amounts for every
    martingale step (ignored, if martingale is not used).
  8. Брокер: Определите брокера (по желанию) или всех брокеров.
  9. Название сигнала: Имя сигнала, который будет отображаться в таблице торгов. (необязательно)
  10. Идентификатор сигнала: Каждая сделка имеет собственный идентификатор, который может быть использован для того, чтобы получить результат сделки позже. Кроме того, идентификатор
    используется для построения последовательности мартингейла. Все сделки одной последовательности мартингейла имеет один и тот же идентификатор.