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