Прошлая статья Определение тренда на основе одной МА и цены.
1. Введем две глобальные переменные советника (размер торгового лота и величину проскальзывания):
- Код: выделить все
input double dblQ0 = 0.1; // Размер торгового лота
input int intSI = 3; // Проскальзывание цены (slippage) (пнт.)
2. Ниже объявления глобальных переменных советника введем идентификатор советника:
- Код: выделить все
int intMagic = 13062017; // Идентификатор эксперта
Он необходим для однозначной идентификации сделок, открытых данным советником. Это необходимо для того, чтобы во-первых можно было торговать вручную на активе, на котором работает советник и во-вторых, советник только отслеживал сделки открытые им.
Идентификатор задается переменной типа int и для удобства я задаю эту переменную в виде набора цифр календарной даты, когда советник начал создаваться. Таким образом, исключается совпадения идентификаторов различных экспертов, так как маловероятно что за один день можно создать больше одного эксперта да еще забыть о том, что нужно присвоить им разные значения переменной.
3. Поскольку советник работает на открытие очередного бара (осуществляется проверка на возможность входа в сделку на основе данных цены закрытия прошлого бара и значения скользящей средней), то нужно не на каждом тике грузить советник лишними проверками на выполнение торговых условий, упомянутых выше, а делать их только один раз при открытии бара.
Для этого нужно:
3.1 Разместить в коде советника функцию которая контролирует наступление нового бара:
- Код: выделить все
bool f_IsNewBar()
{
// Функция определяет факт наступления нового бара
static datetime dtm_LastTime = 0;
if(Time[0] == dtm_LastTime)
{
return (false);
}
dtm_LastTime = Time[0];
return(true);
}
3.2 В коде функции OnTick() прописать условный оператор,
- Код: выделить все
if(f_IsNewBar())
{
//.........
}
внутри тела которого и будем прописывать торговый алгоритм советника.
Этот вопрос рассмотрен подробно в статье Как определить наступление нового бара
4. Определяем количество открытых покупок и продаж (см. статью Как определить количество открытых позиций в MQL4 ):
- Код: выделить все
// количество открытых покупок и продаж
int intBuys = f_GetNumberOfPositions("0", OP_BUY, intMagic);
int intSells = f_GetNumberOfPositions("0", OP_SELL, intMagic);
(продолжение следует)