[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 248

 
Roman.:
ERR_INVALID_TRADE_VOLUME 131 Неправильный объем - познакомьтесь с этой ф-ей и выставляйте объем "правильно" в соответствии с Вашим типом счета, например на счетах типа "микро" нач. объем, как правило составляет 0,01 лот, на счетах типа "классик" = 0,1 лота... Вбейте значение постоянное равное 0,1 лот в ф-ию открытия ордеров и проверьте...
советник торгует лотом определёным % из еквит, то есть я могу вводить только процент, например 10, 5, нету опций вносить лот 0,1 или 0,01. Такая проблема возникла только у 4 значного брокера.
 
MeTrade:
MaxZ:
Тестировали в рабочие дни? Спред плавающий?
Оптимизировал всю неделю, тестил сегодня ночью и утром. В этом проблема?
Вы не ответили Мне на вопрос про спред.
 
Почему этот алерт выскакивает? Раньше много сил потратил, чтобы выяснить, что при сравнении цифры с дробной частью нужно нормализовать функцией NormalizeDouble(). Но вот сегодня решил ради прикола попрововать, и вот те на, алерт выскакивает! Что за глюки? Или не глюки?
      if (1.3320 == 1.3320)
         Alert("Ku!");
 
ScioMe:
Почему этот алерт выскакивает? Раньше много сил потратил, чтобы выяснить, что при сравнении цифры с дробной частью нужно нормализовать функцией NormalizeDouble(). Но вот сегодня решил ради прикола попрововать, и вот те на, алерт выскакивает! Что за глюки? Или не глюки?
Какие тут глюки? Эти константы равны. Условие выполняется.
 
MeTrade:
советник торгует лотом определёным % из еквит, то есть я могу вводить только процент, например 10, 5, нету опций вносить лот 0,1 или 0,01. Такая проблема возникла только у 4 значного брокера.
"...я могу вводить только процент, например 10, 5" - значит у Вас расчет далее идет без нормализации объема перед открытием ордера, т.е. в конечном итоге эти Ваши 10 или 5 процентов выливаются в 0,123 или 1,548 каких-нибудь лотов, что приводит к ошибке № 131, правьте ф-ию расчета лотов или обращайтесь к телепатам, в связи с отсутствием достаточного количества "входных" (исходных) данных по данному вопросу...
 
ScioMe:
Почему этот алерт выскакивает? Раньше много сил потратил, чтобы выяснить, что при сравнении цифры с дробной частью нужно нормализовать функцией NormalizeDouble(). Но вот сегодня решил ради прикола попрововать, и вот те на, алерт выскакивает! Что за глюки? Или не глюки?

1). Компилятор может это условие (оператор if) просто проигнорировать.

2). Если всё же компилятор не проигнорировал это условие, то каждое из чисел он запишет в память, выделив для каждого числа 8 бит. Сравнивает он числа, не как Мы - глазами, а побитово. Числа в памяти одинаковые и данное условие выполнится.

Я очень удивлён был Вашему вопросу, так как не могу понять как можно два эти числа (две записи) воспринять не равными??

 
MaxZ:
Вы не ответили Мне на вопрос про спред.
по вашему замечанию, попробовал на 4х значном терминале с фиксированым спредом, всё ок. Вот только другая проблема появилась, выдаёт ошибку номер 131, что не случалось на 5х значном терминале.
 
MeTrade:
по вашему замечанию, попробовал на 4х значном терминале с фиксированым спредом, всё ок. Вот только другая проблема появилась, выдаёт ошибку номер 131, что не случалось на 5х значном терминале.
А Мне нужно сидеть и лишь догадываться! :))) Уверен, Вы решите и остальные проблемы.
 

подскажите пожалуйста как правильно сделать. у меня сложная функция расчета ММ и в одной части при расчете лота функция возвращает например что максимальный лот возможный сейчас это 0.18 а на счете возможно открыть либо 0.1, 0.2, 0.3 то есть шаг 0.1

если я нормализую лот он округляется до 0.2 и ордер уже не допускается хотя макс. допустимый это 0.18 - вопрос, как правильно округлять в меньшую сторону или правильно нормализовать лот?

 
MaxZ:

""""...
Я очень удивлён был Вашему вопросу, так как не могу понять как можно два эти числа (две записи) воспринять не равными??"""" 


Некоторое время назад мучался над проблемой. Мозги чуть не сломал! Проблема была вот в чем: нужно было по условию равенства в if () совершить операцию. Сравнивались вещественные числа. Все никак не мог вывести алерт, думал, что за чертовщина??? Вот же числа, невооруженным глазом видно, что равны! А терминал упорно не выводит. В конце-концов заподозрил, что дело тут неладно, а что, понять не могу. Нужна была помощь mql4-сообщества. Задал тут вопрос, спасибо, знатоки (кажется, Roman и ещё добрые люди) ответили, что при сравнении вещественных чисел нужно их нормализовать функцией NormalizeDouble(). Помогло. Но вот сегодня попробовал, и что же? Спокойно сравниваются без нормализации. Всё-таки пришел к выводу, что иногда они сравниваются, иногда не сравниваются, так что для надежности их лучше нормализовать.