//+------------------------------------------------------------------+
//| Магик_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(Magic); // присваиваем переменной op значение функции CalculateProfit,
// передаем входной параметр Magic в формальный параметр magic
}
//+------------------------------------------------------------------+
// Считаем профит открытых ордеров
//+------------------------------------------------------------------+
double CalculateProfit(int magic) // Название функции
{
double Profit = 0.0, // Задаем значение переменной Profit равное 0
Profit_other = 0.0;
int count =0, count777=0;
for (int i=OrdersTotal()-1; i>=0; i--) // цикл - перебираем ордерацикл: кол-во ордеров - 1; пока знач больше или равно 0; уменьшаем на 1
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // выбираем ордер для дальнейшей работы
{
if(OrderSymbol()==_Symbol && // проверяем совпадает ли символ ордера с символом графика на котором установлен советник
OrderMagicNumber()== magic) // проверяем совпадение магик номера ордера с магиком советника
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL) // проверяем являются ли ордера, рыночными ордерами на покупку или продажу
{
count++; // считаем колечество ордеров, которые подходят условиям
Profit += (OrderProfit() + OrderSwap() + OrderCommission());// суммируем профиты всех выбранных ордеров c учетом свопа и комиссии
}
}
else {
Profit_other += (OrderProfit() + OrderSwap() + OrderCommission()); // считаем профит ордеров не подходящих условиям
count777++; // считаем ордера, которые не подходят условиям
}
}
}
Print(IntegerToString(count) + " ордера | Профит = ", DoubleToString(Profit,2));
// выводим в журал колечество и профит ордеров с нашим магиком
Print(IntegerToString(count777) + " ордера | Профит777 = ", DoubleToString(Profit_other,2));
// выводим в журнал количество и профит других ордеров
return(Profit); // возвращем функции значение суммарного профита
}
//+------------------------------------------------------------------+