По мере изучения MQL и перевода своих стратегий на код сталкиваюсь с некоторыми типовыми задачами, решение которых планирую выкладывать в данной группе.
Итак, первое, с чем я столкнулся — это необходимость открытия только одной сделки в текущем баре. Т.е. получили сигнал в текущем баре и после открытия сделки больше в этом баре новых сделок не открываем.
Есть разные способы решения задачи. От использования предопределенной переменной Bars в данном случае предостерегают, т.к. Bars может изменяться, например, при докачке истории.
Выбрал следующий способ.
1.Добавляем функцию IfOrderYetOpen
//+------------------------------------------------------------------+
//| Проверяет был ли открыт уже ордер на этой же свече |
//+------------------------------------------------------------------+
bool IfOrderYetOpen(int magic = 0, int typ = -1,string symb = "",int per = 0){
if(symb == ""){symb = Symbol();}
if(per==0){per=Period();}
for(int i = OrdersTotal(); i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()!=symb){continue;}
if(OrderType()==typ||typ==-1){
if(OrderMagicNumber()==magic||magic==0){
if(OrderOpenTime()>iTime(symb,per,0)){return(true);}
}
}
}
}
return(false);
}
2. Затем в начале start делаем проверку
if(IfOrderYetOpen()) return;
Таким образом добиваемся поставленной цели — если ордер на текущем баре открыт, то терминируем start.
Комментарии (7)
[ 7 ] kickЗарегистрирован: 23 февраля 2011 | Сообщений: 625
[ 5 ] amyrgan145Зарегистрирован: 22 февраля 2011 | Сообщений: 358 - Амыр
[ 1 ] uskov34Зарегистрирован: 19 ноября 2010 | Сообщений: 7
Входные параметры моего эксперта были такими:
вот такое выдает в тестере:
[ 5 ] amyrgan145Зарегистрирован: 22 февраля 2011 | Сообщений: 358 - Амыр
[ 6 ] KaurЗарегистрирован: 28 сентября 2009 | Сообщений: 298 - Руслан Каюмов
[ 5 ] amyrgan145Зарегистрирован: 22 февраля 2011 | Сообщений: 358 - Амыр
Так переменные:
абсолютно равнозначные
Зато вспоминать какая переменная к чему относится гораздо легче
[ 5 ] amyrgan145Зарегистрирован: 22 февраля 2011 | Сообщений: 358 - Амыр
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий