ЧТО БЫ ЭТО МОГЛО БЫТЬ????????
Неужели трудно распринтовать данные и проследить их в журнале?
На мой взгляд неверно устроено сравнение дробных чисел.
Неожиданно столкнулся сос ледующей проблемой:
Написал советник, одна из функций которого открывать отложенные ордера. Но прежде чем открыть очередной отложенный ордер, программа опрашивает уже выставленные ордера (цену) и открывает новый только если нет уже выставленного с такой ценой. Работаю по паре EURUSD.
for (Price=Max_Price-Step*Point; Price>Ask+10*Point; Price=Price-Step*Point) // идем от максимума к текущей цене
{
jurist70:
Неожиданно столкнулся сос ледующей проблемой:
Написал советник, одна из функций которого открывать отложенные ордера. Но прежде чем открыть очередной отложенный ордер, программа опрашивает уже выставленные ордера (цену) и открывает новый только если нет уже выставленного с такой ценой. Работаю по паре EURUSD.
for (Price=Max_Price-Step*Point; Price>Ask+10*Point; Price=Price-Step*Point) // идем от максимума к текущей цене
{
Используйте функцию KimIV:
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 30.07.2008 | //| Описание : Возвращает флаг существования ордеров по цене установки | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| pp - цена (-1 - любая цена) | //+----------------------------------------------------------------------------+ bool ExistOrdersByPrice(string sy="", int op=-1, int mn=-1, double pp=-1) { int d, i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if (OrderType()>1 && OrderType()<6) { d=MarketInfo(OrderSymbol(), MODE_DIGITS); pp=NormalizeDouble(pp, d); if (pp<0 || pp==NormalizeDouble(OrderOpenPrice(), d)) { if (mn<0 || OrderMagicNumber()==mn) return(True); } } } } } return(False); }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Неожиданно столкнулся сос ледующей проблемой:
Написал советник, одна из функций которого открывать отложенные ордера. Но прежде чем открыть очередной отложенный ордер, программа опрашивает уже выставленные ордера (цену) и открывает новый только если нет уже выставленного с такой ценой. Работаю по паре EURUSD.
for (Price=Max_Price-Step*Point; Price>Ask+10*Point; Price=Price-Step*Point) // идем от максимума к текущей цене
{
int N=0; //счетчик ордеров
for (int i=1; i<=OrdersTotal(); i++) // цикл перебора ордеров
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) //выбор ордера
{ //анализ открытого ордера
if (Price==OrderOpenPrice()) //если цена совпадает
{
N=N+1;
}
} //выбираем следующий открытый ордер
}
if(N==0) //если ордеров с такой ценой не нашлось
{ //открываем ордер
Alert("Новый BUYSTOP ", Price);
int Ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, 0, Price+TP*Point);
if (GetLastError()>0)
Alert("Ошибка ", GetLastError());
}
} //Пришли к рынку
пока максимум находится до 1,3980 все идет нормально, но стоит поставить 1,4000 - программа перестает видеть ордера с одинаковой ценой (счетчик N остается нулевым) и штампует одинаковые ордера.
интересно, что если максимум поставить 1,5000, то до 1,4000 все нормально, а начиная с 1,3980 начинается дублирование ордеров с одинакой ценой
ЧТО БЫ ЭТО МОГЛО БЫТЬ????????