Как это выглядит на примере? Рассмотрим случай, когда для работы советника важно значение количества открытых позиций на покупку и продажу.
Открытие и закрытие позиций может происходить как при поступлении очередного тика, так и при открытии очередного бара. В первом случае код для анализа ситуации прописывается в функции OnTick(), а во втором случае - в функции, посвященной выполнению команд при открытии нового бара. Реализация такой функции рассмотрена в статье Как определить наступление нового бара?. В случае, когда речь идет о коде внутри функции OnTick(), мы должны инициализировать значения переменных кол-ва покупок и продаж следующим образом:
- Код: выделить все
void OnTick()
{
// количество открытых покупок и продаж:
int intBuys = f_GetNumberOfPositions("0", OP_BUY, intMagic);
int intSels = f_GetNumberOfPositions("0", OP_SELL, intMagic);
...
}
Функция f_GetNumberOfPositions() - пользовательская и рассматривалась в статье Как определить количество открытых позиций в MQL4. Она возвращает кол-во позиций по указанному символу с учетом параметра intMagic.
Далее, в коде обычно используется условный оператор if для определения необходимых действий, зависящих от кол-ва открытых позиций. Это выглядит примерно так:
- Код: выделить все
void OnTick()
{
// количество открытых покупок и продаж:
int intBuys = f_GetNumberOfPositions("0", OP_BUY, intMagic);
int intSels = f_GetNumberOfPositions("0", OP_SELL, intMagic);
if(intSels > 0) // ... выполняем необходимые действия
if(intBuys == 0)
{
// ... выполняем необходимые действия
}
...
}
Также определяются и другие параметры, претерпевшие изменения со времени работы советника и значения которых были потеряны при разрыве связи.
Например, если нам нужно чтобы советник "знал" какой тип позиции был открыт с минимальным лотом, то запускается соответствующая пользовательская функция по определению этого параметра. Если нужно определить какой тип был у последней позиции - также нужно использовать соответствующую функцию.
Здесь сложности даже не в самой разработке кода, а в том, чтобы разработчик не упускал эти важные процедуры для правильного функционирования своего творения.