Biblioteca de conectores MQL

O que é a biblioteca de conectores MQL?

A biblioteca MT2Trading permite enviar sinais diretamente do código MQL (de um indicador técnico ou de um 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,
	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
};

Seção de importação de biblioteca

 

MQL4

#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

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:

MQL4

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

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. Expiration time: Tempo de expiração em minutos.
  5. Defina o tipo Martingale que deve ser aplicado (ignorado, se Martingale não é usado).
  6. Martingale Steps: Número de passos Martingale.
  7. Martingale Coefficient: 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. Signal Name: Apenas um nome do sinal que será exibido na tabela de negociações. opcional (opcional)
  10. 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.