Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Шестнадцатиричная логика везде одна. Про системы счисления можно посмотреть здесь. Там можно почитать про позиционные системы счисления и посмотреть ссылки на 16-ю и двоичную. Там есть еще примеры перевода из системы в систему.
Все побитовые операции предназначены для двоичной системы. Про побитовые операции в MQL5 здесь.
Эти статьи хорошо читать, когда уже знаешь, о чём идёт речь :)
Вот, например, у Вас в перечислении используется префикс "0x". Насколько я понимаю, это говорит о том, что записаны шестнадцатеричные числа. В выражении же "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" используется "побитовая операция И". Вы же пишите, что побитовые операции предназначены для двоичной системы. Как тогда соотносится оператор & (для двоичной системы) с шестнадцатеричными числами?
Другой вопрос. Если я правильно понял, то выражение "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" эквивалентно выражению "flag_event != CHARTEVENT_NEWBAR_M1". Это так? И если это так, то зачем использовать побитовые операции?
Вы же пишите, что побитовые операции предназначены для двоичной системы
а какая разница? числа внутрях проца все равно имеют двоичную систему.
поэтому даже если вы у себя в голове "видите" 255 или FF и сравните это с 8 или с 0х00000100 то разницы никакой не будет.
Другой вопрос. Если я правильно понял, то выражение "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" эквивалентно выражению "flag_event != CHARTEVENT_NEWBAR_M1". Это так? И если это так, то зачем использовать побитовые операции?
а какая разница? числа внутрях проца все равно имеют двоичную систему.
поэтому даже если вы у себя в голове "видите" 255 или FF и сравните это с 8 или с 0х00000100 то разницы никакой не будет.
Разница - терминологическая. Но с Ваших слов понял, что для программистов она не имеет значения.
да, в данной ситуации это обозначает именно это, но битовые операции шире в применении и более общи чем просто сравнение, тем более, что при работе с константами уже стало классическим поведением использовать именно битовые операции.
Понятно! Т.е. если для меня несколько непривычно использовать битовые операции, я могу спокойно переписать выражения с использованием операторов сравнения? Благодарю за разъяснения!
Эти статьи хорошо читать, когда уже знаешь, о чём идёт речь :)
Вот, например, у Вас в перечислении используется префикс "0x". Насколько я понимаю, это говорит о том, что записаны шестнадцатеричные числа. В выражении же "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" используется "побитовая операция И". Вы же пишите, что побитовые операции предназначены для двоичной системы. Как тогда соотносится оператор & (для двоичной системы) с шестнадцатеричными числами?
Все эти системы просто наглядно представляют числа не одинаково, а так если число десять, то оно везде десять. Для компа ВСЕ числа, в какой бы мы их системе ни записали, переводятся в двоичную систему. Даже эти буквы, которые, я пишу переводятся в двоичную. В других системах числа обозначают в основном для улучшения наглядности или по-привычке. Ну, некоторые это делают, чтобы выглядеть умнее. В данном случае шестнадцатеричные числа были использованы для компактности записи, ну и для большей наглядности. Наглядность появляется, когда знаешь, как формируются шестнадцатеричные числа.
Другой вопрос. Если я правильно понял, то выражение "(flag_event & CHARTEVENT_NEWBAR_M1)!=0" эквивалентно выражению "flag_event != CHARTEVENT_NEWBAR_M1". Это так? И если это так, то зачем использовать побитовые операции?
Нет, это не всегда так. Это будет зависеть от того, что записано в flag_event. Если в flag_event было записано только CHARTEVENT_NEWBAR_M1, то flag_event = CHARTEVENT_NEWBAR_M1. Если в flag_event записать CHARTEVENT_NEWBAR_M1|CHARTEVENT_NEWBAR_M5, то flag_event != CHARTEVENT_NEWBAR_M1. Но в обоих случая выполнится условие (flag_event & CHARTEVENT_NEWBAR_M1)!=0.
Если в flag_event записать CHARTEVENT_NEWBAR_M5, то flag_event != CHARTEVENT_NEWBAR_M1. Но (flag_event & CHARTEVENT_NEWBAR_M1)=0.
Чтобы понять эти хитрости надо разбираться с системами счисления и побитовыми операциями. Иначе хана.
Понятно! Т.е. если для меня несколько непривычно использовать битовые операции, я могу спокойно переписать выражения с использованием операторов сравнения? Благодарю за разъяснения!
Заменить всегда можно, но это может потребовать дополнительных вычислений. Будьте аккуратны с этим делом :).
Ок! И ещё вопрос. У Вас при записи шестнадцатеричных чисел используется степень двойки. В использовании именно степеней двойки есть какой-то смысл или же это тоже в силу привычки? Т.е. могли ли использоваться вот такие сочетания: 0x00000003, 0x00000009 и т.д.?
Ок! И ещё вопрос. У Вас при записи шестнадцатеричных чисел используется степень двойки. В использовании именно степеней двойки есть какой-то смысл или же это тоже в силу привычки? Т.е. могли ли использоваться вот такие сочетания: 0x00000003, 0x00000009 и т.д.?
Нет. Это связано с применением побитовых операций. В шпионе в одно число (в flag_event) складываю несколько чисел (событий), а в советнике вынимаю из одного числа несколько, чтобы посмотреть какие события шпион послал. И наоборот.
О, невнимательно прочитал. Да, можно было бы, только мне, наверно, не хватило бы одного числа, чтобы уместить все события. Степень два используется, т.к. работаю с двоичным представлением числа, а записываю в шестнадцатеричном. Каждый бит означает отдельное событие.
По-умолчанию price[rates_total-1] равна цене close последнего незавершенного бара, которая, в свою очередь, равна поcледней цене bid. Т.е из шпиона по-умолчанию всегда получаем цену bid.
Если принудительно хотите получать цену ask, то замените эту строчку, например, на
Автор, простите, может что не дочитал, но может ли эта функция передать в советник не только ценовые события, а, например,
события индикатора или их комбинаций\вариаций с других инструментов, т.е. как бы уже получившийся там сигнал. Если - да, то как это реализовать.
Спасибо за ответ.
По-умолчанию price[rates_total-1] равна цене close последнего незавершенного бара, которая, в свою очередь, равна поcледней цене bid. Т.е из шпиона по-умолчанию всегда получаем цену bid.
Если принудительно хотите получать цену ask, то замените эту строчку, например, на
Автор, простите, может что не дочитал, но может ли эта функция передать в советник не только ценовые события, а, например,
события индикатора или их комбинаций\вариаций с других инструментов, т.е. как бы уже получившийся там сигнал. Если - да, то как это реализовать.
Спасибо за ответ.
Для этого лучше использовать сам индикатор, встроив в него в нужном месте стандартную функцию EventChartCustom.
В индикаторе всё-таки или в эксперте???
Извини, я только-только разбираюсь с МТ5