4107. Моя ошибка или глюк?

 
В тестере иногда выскакивает ошибка 4107 (ERR_INVALID_PRICE_PARAM 4107 Неправильный параметр цены для торговой функции)
Команда абсолютно стандартная:
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TP*Point,"g8.3_SELL",MAGIC01,0,Red)
В журнале видим соответствующую запись:
2007.06.28 17:17:51 2004.11.30 01:45 g8.3 EURAUD,M15: Err Ordersend(4107):
2007.06.28 17:17:51 2004.11.30 01:45 g8.3 EURAUD,M15: invalid price 1.70255005 for OrderSend function

Ради эксперимента, добавил NormalizeDouble(Bid,4), ошибка исчезла:
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,4),3,0,Bid-TP*Point,"g8.3_SELL",MAGIC01,0,Red)
Что это может быть и как с этим бороться?
 

В качестве тестирующей последовательности что используете? Сторонний fxt-файл или то, что тестер нагенерировал?

 
stringo:

В качестве тестирующей последовательности что используете? Сторонний fxt-файл или то, что тестер нагенерировал?

Минутки от ..., сконвертированные скриптом во все остальные периоды.
Скрипт: Period_ConverterALL.mq4. Original Copyright © 2005, MetaQuotes Software Corp. Add by DENISka: Only OffLine convert history from 1M Period to M5, M15, M30, 1H, 4H, 1D, 1W, MN in one time. "Copyright © 2007 Add changes by DENISka."
fxt сгенерированы тестером.
 

Понятно. Тестер при генерации нормализует только промежуточные значения. А значения ohlc баров - не нормализует. Вам попались ненормализованные данные.

 
stringo:

Понятно. Тестер при генерации нормализует только промежуточные значения. А значения ohlc баров - не нормализует. Вам попались ненормализованные данные.

Хорошо, это ответ на 1-ю часть вопроса. Остается 2-я часть:
как с этим бороться? :)
Можно, конечно, NormalizeDouble использовать, но неудобно. У разных валют разное количество знаков после запятой.
 
vimac:

Можно, конечно, NormalizeDouble использовать, но неудобно. У разных валют разное количество знаков после запятой.

double digits = MarketInfo(sValuta, MODE_DIGITS);

double dNormalPrice = NormalizeDouble(dValutaPrice, digits);

 

1. Найдите другой источник данных (например, большая кнопка "загрузить" в архиве котировок)

2. В противном случае для нормализации используйте переменную Digits

 
stringo:

2. В противном случае для нормализации используйте переменную Digits


Вероятно, всё-таки MarketInfo(sValuta, MODE_DIGITS)? Как было сказано выше: "У разных валют разное количество знаков после запятой". Digits вернёт верное значение только для валюты текущего графика, верно?
 

Речь идёт о тестировании (в реальной жизни Bid и Ask нормализовать не надо). Торговать можно только тестируемый инструмент, поэтому лучше Digits, чем вызов функции MarketInfo

 
vimac:
В тестере иногда выскакивает ошибка 4107 (ERR_INVALID_PRICE_PARAM 4107 Неправильный параметр цены для торговой функции)
Команда абсолютно стандартная:
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TP*Point,"g8.3_SELL",MAGIC01,0,Red)
В журнале видим соответствующую запись:
2007.06.28 17:17:51 2004.11.30 01:45 g8.3 EURAUD,M15: Err Ordersend(4107):
2007.06.28 17:17:51 2004.11.30 01:45 g8.3 EURAUD,M15: invalid price 1.70255005 for OrderSend function

Ради эксперимента, добавил NormalizeDouble(Bid,4), ошибка исчезла:
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,4),3,0,Bid-TP*Point,"g8.3_SELL",MAGIC01,0,Red)
Что это может быть и как с этим бороться?

я думаю плохие исторические данные.....

с уважением-Сергей Сартаков
 
Всем спасибо, понятно. Надеюсь, следующая строка решит существующую проблему и не создаст новых (на реале):
OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,Bid-TP*Point,"SELL",MAGIC01,0,Red)
Кстати, почему тестер не "ругается" на значение Take Profit? Там, по идее, то же значение не нормализованное.
Причина обращения: