Хочу поделиться очень полезным скриптом для MetaTrader 4, который отправляет сообщение на вашу электронную почту с информацией об открытой и закрытой сделке. Для меня это очень актуально, т.к. всю торговлю выполняют роботы. Но для понимания их действий и осуществления контроля, такие сообщения для меня необходимы. Скрипт сам понимает когда открылась и закрылась сделка.
Сообщения приходят в таком виде:
ОТКРЫТ Order=84281010, OpenTime=2026.10.06 06:11, Symbol=AUDCAD, Type(1=sell,0=buy)=1, Lots=2.1, Magic=4411, Spred=0.00018, OpenPrice=0.99444
ЗАКРЫТ Order=84281010, CloseTime=2026.10.07 13:14, Symbol=AUDCAD, Type(1=sell,0=buy)=1, Lots=2.1, Magic=4411, Spred=0.00018, ClosePrice=0.99064, Profit=561.05
Предварительно настройте отправку почтовых сообщений на своем терминале MT4 и запускайте данный скрипт как советника на любом графике.
int Order=0, // переменная для открытых ордеров
TicketClose=0, // переменная для закрытых ордеров
r, // переменная для открытых ордеров
q, // переменная для вычисления кол-ва секунд между текщим временем и временем открытия посл. <a name="cut"></a> ордера
Ticket, // переменная для закрытых ордеров
p1=-1; // переменная, для "НЕ срабатывания" после запуска скрипта
double Spred; // переменная для вычисления Спреда
int init()
{
return;
}
int GetTicketLastPos() // последний открытый ордер
{
datetime o;
int i, k=OrdersTotal(), r=-1;
for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (o<OrderOpenTime())
{
o=OrderOpenTime();
r=OrderTicket();
}
}
}
return®;
}
int GetLastOrderHist(int type = -1) // последний закрытый ордер
{
int ticket = -1;
datetime dt = 0;
int cnt = OrdersHistoryTotal();
for (int i=0; i < cnt; i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderCloseTime() > dt)
{
dt = OrderCloseTime();
ticket = OrderTicket();
}
}
return (ticket);
}
int start()
{
//Обращаемся к функции определения последнего Открытого ордера
r=GetTicketLastPos();
if (r!=Order && r!=-1)
{
Order=r;
Spred=(MarketInfo(OrderSymbol(),MODE_ASK))-(MarketInfo(OrderSymbol(),MODE_BID)); //Считаем Спред
q=(TimeCurrent()-OrderOpenTime()); //вычисляем кол-во секунд между текщим временем и временем открытия посл. ордера
if (p1>5 && (q<300)) SendMail("Серввер №1 Открыт ордер", "ОКРЫТ Order="+OrderTicket()+", OpenTime="+TimeToStr(OrderOpenTime())+", Symbol="+OrderSymbol()+", Type(1=sell,0=buy)="+OrderType()+", Lots="+OrderLots()+", Magic="+OrderMagicNumber()+", Spred="+DoubleToStr(Spred,5)+", OpenPrice="+OrderOpenPrice());
}
//Обращаемся к функции определения последнего Закрытого ордера
Ticket=GetLastOrderHist();
if (Ticket!=TicketClose && Ticket!=-1)
{
TicketClose=Ticket;
Spred=(MarketInfo(OrderSymbol(),MODE_ASK))-(MarketInfo(OrderSymbol(),MODE_BID)); //Считаем Спред
if (p1>5) SendMail("Серввер №1 Закрыт ордер", "ЗАКРЫТ Order="+OrderTicket()+", CloseTime="+TimeToStr(OrderCloseTime())+", Symbol="+OrderSymbol()+", Type(1=sell,0=buy)="+OrderType()+", Lots="+OrderLots()+", Magic="+OrderMagicNumber()+", Spred="+DoubleToStr(Spred,5)+", ClosePrice="+OrderClosePrice()+", Profit="+OrderProfit());
}
Sleep(5000); // задержка 5 секунд
p1=p1+1; //
//+------------------------------------------------------------------+
return;
}
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.