Как определить существует ли позиция в MQL4

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Как определить существует ли позиция в MQL4

Сообщение Haos » 24 янв 2016, 12:59

Часто в советнике необходима информация о существовании открытой позиции по какому-то активу. Функция f_ExistPositions() способна дать ответ на этот вопрос. Причем, наличие позиции может проверяться как по отдельному активу, так и по всем активам; для позиции, открытой в определенную дату, а также позиции, открытой определенным советником.

Алгоритм действий

1. Создать новый советник
2. Скопировать код функции f_ExistPositions() и вставить после
функции OnTick(), т.е. в самый конец кода.
3. Создать переменную для фиксирования факта наличия открытых позиций
в теле функции OnTick():
Код: выделить все
bool bolPos;

Присвоить этой переменной значение функции f_ExistPositions():
Код: выделить все
bolPos = f_ExistPositions("0", -1, -1, 0);

В качестве параметров функции выбраны:
"0" - для текущего инструмента (т.е. на какой валютной паре запущен советник);
-1 - любая операция;
-1 - любой мэджик;
0 - любое время открытия.
4. Сделаем возможность выводить на экран (левый верхний угол) через комментарий количество открытых позиций, написав строку кода:
Код: выделить все
Comment("\n", "Наличие открытых позиций: ", bolPos);

5. Откомпилируем советник.
Советник готов к использованию. Запустив его на какой-нибудь паре, мы получим сообщение о наличие открытых позиций (true - есть, false - нет). Рынок при этом должен быть открыт.
Код советника:
Код: выделить все
//+------------------------------------------------------------------+
//|                                                EA-Example-02.mq4 |
//|                                                             Haos |
//|                                       http://www.investforum.ru/forum/ |
//+------------------------------------------------------------------+
#property copyright "Haos"
#property link      "http://www.investforum.ru/forum/"
#property version   "1.00"
#property strict

//******************************************************************************************

int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}

//******************************************************************************************

void OnDeinit(const int reason)
{
//---
   
}

//******************************************************************************************

void OnTick()
{
   bool bolPos;
   bolPos = f_ExistPositions("0", -1, -1, 0);
   Comment("\n", "Наличие открытых позиций: ", bolPos);
}

//******************************************************************************************

bool f_ExistPositions(string sy, int op, int mn, datetime ot)
{
/*
   Версия   : 12.02.2014                                                     
   Описание : Возвращает флаг существования позиций   
   Сторонних ресурсов не использует                       
   Параметры:
   sy ("" - любой символ, "0" - текущий символ)
   op  - тип ордера {OP_BUY; OP_SELL; -1} ("-1" - любой тип сделки)
   mn ("-1" - любой маджик)
   ot - время открытия сделки (0 - любое время открытия)           
*/
   if (sy == "0") sy = Symbol();
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == sy || sy == "")
         {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
               if(op < 0 || OrderType() == op)
               {
                  if(mn < 0 || OrderMagicNumber() == mn)
                  {
                     if(ot <= OrderOpenTime()) return(True);
                  }
               }
            }
         }
      }
   }
return(False);
}

//*********************************************************************************************
Вложения
01.png
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron