Алгоритм действий
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);
}
//*********************************************************************************************