Тайна ошибки 130 - страница 2

 
К примеру вы NormalizeDouble( цена ,4). Выводите ее на печать, все вроде нормально "1.3333", но если вы попытаетесь ее найти, будите удивлены, в отрицательном результате, так на самом деле это число может иметь значение "1.33330001"
 
Farkhat Guzairov:
К примеру вы NormalizeDouble( цена ,4). Выводите ее на печать, все вроде нормально "1.3333", но если вы попытаетесь ее найти, будите удивлены, в отрицательном результате, так на самом деле это число может иметь значение "1.33330001"

так вы оба сравниваемых числа нормальзуйте при поиске и все.

 
Nikolay Khrushchev:

если спрашивают значит не ясно в чем у вас был затык.
при поиске так же следует использовать нормализацию.

Если бы проблем с корректной нормализацией не существовало, то этого поста бы не было.

 
Farkhat Guzairov:

Если бы проблем с корректной нормализацией не существовало, то этого поста бы не было.

Я вас умоляю, 99% ошибок сидят и смотрят в монитор. Эта одна из них.

 
Farkhat Guzairov:
К примеру вы NormalizeDouble( цена ,4). Выводите ее на печать, все вроде нормально "1.3333", но если вы попытаетесь ее найти, будите удивлены, в отрицательном результате, так на самом деле это число может иметь значение "1.33330001"

Это как раз корректная нормализация. Следствие особенностей двоичного представления дробных чисел. Описано в документации: https://www.mql5.com/ru/docs/convert/normalizedouble

Просто Print () не показывает этой единицы в последнем знаке. Сделайте Print(DoubleToString(цена, 16).

 
Nikolay Khrushchev:

Я вас умоляю, 99% ошибок сидят и смотрят в монитор. Эта одна из них.

Я изложил свое мнение по поводу возникшей ошибки. Если в вашей практике проблем с нормализацией не возникало, я рад, но это не значит ее не существует, доказывать это я вам точно не буду.

 
Farkhat Guzairov:

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

Есть хранение данных и есть их представление. Попробуйте сначала сохранить данные в массиве, а после извлечь их, или найти, используя NormalizeDouble

 
secret:

по вашему вопросу. если с норимализацией у вас все ок, добавьте в код логированиие всех действий в журнал, чтобы видеть не просто 130ю ошибку, а конкретно какая сейчас цена и что конкретно советник отправлял в торговом приказе, какие числа.
если по логам выясниться что у вас все хорошо - притензии к брокеру, не иначе.
вообще лучше каждое действие максимально логировать, особенно все торговые приказы, но и не "засирать" журнал мусором.

я уже сталкивался с тем как особенно упоротые брокеры сыпят неверные ошибки маскируя тем самым реквоты, возможно эта та же история.
 
Farkhat Guzairov:
К примеру вы NormalizeDouble( цена ,4). Выводите ее на печать, все вроде нормально "1.3333", но если вы попытаетесь ее найти, будите удивлены, в отрицательном результате, так на самом деле это число может иметь значение "1.33330001"

Заполняйте массив существующими ценами, а в том месте где нужно применить - нормализуйте.

А вообще, проблем с нормализацией нет, если правильно написать код.

 
Nikolay Khrushchev:

по вашему вопросу. если с норимализацией у вас все ок, добавьте в код логированиие всех действий в журнал, чтобы видеть не просто 130ю ошибку, а конкретно какая сейчас цена и что конкретно советник отправлял в торговом приказе, какие числа.
если по логам выясниться что у вас все хорошо - притензии к брокеру, не иначе.
вообще лучше каждое действие максимально логировать, особенно все торговые приказы, но и не "засирать" журнал мусором.

Да, дельная мысль.

Вообще, хотелось бы конечно по номеру ошибки однозначно понимать причину её появления. А в ошибке 130 куча разных причин намешана, вот и мучаемся.

Причина обращения: