//+------------------------------------------------------------------+
//| Магик_111.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
// https://forexsystemsru.com/threads/izuchaem-jazyk-programmirovanija-mql4.87869/post-1489322
// Напишите функцию, которая на вход принимает значение MagicNumber (уникальный идентификатор ордера).
// Функция должна вернуть суммарную прибыль по всем позициям с соответствующим идентификатором на текущем счете.
//+------------------------------------------------------------------+
input int Magic = 12345; // Летающий слоник
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//+------------------------------------------------------------------+
// Условия открытия ордеров для проверки работы Безубытка |
//+------------------------------------------------------------------+
if(OrdersTotal()<=1) // если оредров меньше 1го
{
int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 0, 0, 0, "Покупка", Magic, 0, Blue);//открываем BAY
}
if(OrdersTotal()<5) // если ордеров меньше 5и
{
int ticket = OrderSend(Symbol(), OP_SELL, 0.05, Bid, 0, 0, 0, "Продажа", 777, 0, Red);//открываем SELL
}
//+------------------------------------------------------------------+
double op = CalculateProfit(OrderMagicNumber()); // присваиваем переменной значение функции, передаем магик
}
//+------------------------------------------------------------------+
// Считаем профит открытых ордеров
//+------------------------------------------------------------------+
double CalculateProfit(int magic) // Название функции
{
double Profit = 0.0; // Задаем значение переменной Profit равное 0
for (int i=OrdersTotal()-1; i>=0; i--) // цикл - определеяем общее количество открытых ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // выбираем ордер для дальнейшей работы
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic)
//if (/*OrderSymbol() == Symbol() && */ // проверяем совпадает ли символ ордера с символом графика на котором установлен советник
// magic == Magic) // проверяем совпадение магик номера ордера с магиком советника
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL) // проверяем являются ли ордера, рыночными ордерами на покупку или продажу
{
Profit += (OrderProfit() + OrderSwap() + OrderCommission());// суммируем профиты всех выбранных ордеров c учетом свопа и комиссии
}
}
}
} Print("Профит = ", DoubleToString(Profit));
return(Profit); // возвращем функции значение суммарного профита
}
//+------------------------------------------------------------------+