Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Надежней? Почему получать хэндлы при инициализации это не надежно? Почему проверять наличие необходимых данных это не надежно? И тем более, почему наличие проверок это не надежно?
Для новичков может не так просто, но со временем все станет понятным...
Вобще я пытаюсь разобраться сразу, а не потом... тупо копировать какие-то действия не понимая смысла я не хочу. Почему нельзя весь этот код сделать ввиде встроенной функции как в мкл4, ну добавить лишний параметр с числом баров, из-за этого я так догадываюсь сделали так, что бы не загружать данные по индикатору со всех баров?
Почему загружает?
"Обычные числа" - это константные выражения, которые тоже имеют тип. В данном случае - тип int.
Выражение, состоящее из умножения двух подвыражений, каждое типа int, - тоже имеет тип int. Вот тут-то и происходит переполнение.
И только потом, при инициализации переменной типа long происходит неявное приведение от типа выражения int к типу long.
Здесь всё чисто. Кстати, в данном случае необязательно каждый из операндов приводить к типу long. Достаточно привести один, а второй будет приведён неявно.
Я собственно это и пытался сказать, но менее академичным языком. А главное предупредить других искателей.
Вопрос в другом. Где в каком тaлмуде сказано, что :
"Обычные числа" - это константные выражения, которые тоже имеют тип. В данном случае - тип int.
Например если X сделать равным 10000000000 , то он становится типом long ? А почему не ulong или datetime или даже string.?
А какой тип у числа 255 uchar или short ?
Почему загружает?
Похоже, перепутан лог и код. Приведённый код работает "чисто". А, чтобы получить такой лог, пришлось переменные A и B сделать типа int или uint, а переменную X - типа uint:
А вот - работа оригинального кода:
Build 314 (20 Aug 2010).
Я же приводил другой код
особое внимание на первую строчку, на вашем счете, может быть другое число. Посмотрите его и проставьте в long C =
Еще раз проверил результат
Build 314 (20 Aug 2010).
Скажите пожалуйста, почему функция SymbolInfoDouble(_Symbol,SYMBOL_POINT) по паре USDCHF выдает размер поинта пятизначный после запятой 0.00001, когда по этой паре принята величина поинта 0.0001?
с чего вы взяли что на этом инструменте 4 знака, в терминале явно видно что котировки там идут 5-ти значные
Данная функция может возвращать разные значения пункта даже на счетах с пяти знаками, все зависит от настроек, которые примет брокер.
Вот например в одном ДЦ есть такой коммент
а у другого 1 pips равен как есть в пятом разряде.
Я собственно это и пытался сказать, но менее академичным языком. А главное предупредить других искателей.
Вопрос в другом. Где в каком тaлмуде сказано, что :
"Обычные числа" - это константные выражения, которые тоже имеют тип. В данном случае - тип int.
Например если X сделать равным 10000000000 , то он становится типом long ? А почему не ulong или datetime или даже string.?
А какой тип у числа 255 uchar или short ?
Констаната 10000000000 - да, уже типа long.
Как бы это сказать? В нормальных языках есть суффиксы-модификаторы, позволяющие задать тип константы без использования явного приведения к типу. Для MQL5 я такое нашёл только для float. Поэтому задать константы типа uchar, ushort, uint, ulong, char, short и long (если значение константы укладывается в тип int) без явного приведения типа невозможно.
У константы 255 тип - int. Кое-что можно найти в описаниях типов, например, символьные константы объявлены имеющими тип ushort. Там же рассказано о константах типа datetime, типа color, типа bool, типа double и типа string.
Можно попробовать распечатать размер типа константы, коль скоро введена операция sizeof (только для чего она введена - объяснил бы кто из разработчиков):
В общем-то, из суффиксов только f для double-констант работает, модифицируя их до float, что видно по размеру типа такой константы.
Вот, единственное, хоть сколько-нибудь осмысленное применение операции sizeof нашёл. :)
Я же приводил другой код
особое внимание на первую строчку, на вашем счете, может быть другое число. Посмотрите его и проставьте в long C =
Еще раз проверил результат
Build 314 (20 Aug 2010).
Нет, у меня нет такого эффекта, который наблюдается у Вас. Осталось только битности версий MT5 сверить. У меня 64-битная версия, а у Вас?
Кстати, тот модифицированный код, который прогонял я, у Вас даёт те же результаты, что и у меня?
Если да, то тогда происходящее очень похоже на тот bug, что связан с "происхождением" значения, - то есть код может вести себя по-разному (как правильно, так и неправильно) в зависимости от того, откуда изначально взялось значение, на основе которого выполняются дальнейшие вычисления.