Обновление платформы MetaTrader 4 build 670: виртуальный хостинг, web-запросы и работа с сигналами из MQL-программ - страница 49

 
stringo:

double c нулём можно сравнивать безболезненно. Просто сравниваете и всё.

Но только если речь идёт о константном нуле, а не о переменной (в принципе, с переменной тоже можно, если Вы уверены, что в ней содержится 0)


Если переменную Variable типа double необходимо сравнить с нулем то как будет правильно:

if(Variable<=0) {
}

или

if(Variable<=0.0) {
}

Существует ли различие или оба случая верны?
 

// правильно будет

if(Variable < Point) {
}

PS. Point - это фактическая погрешность величины котировки.
Все, что меньше этой погрешности, это практически ноль. 

 
atztek:

Если переменную Variable типа double необходимо сравнить с нулем то как будет правильно:

if(Variable<=0) {
}

или

if(Variable<=0.0) {
}

Существует ли различие или оба случая верны?



Правильно будет так 

if(Variable<=0.0) {
}

 Лучше сранивать однотипные типы данных...

 

Потихоньку мигрирую на UBUNTU 14.04 , и был жутко разочарован, оказывается приложения из маркета в УБУНТУ не присоединяются и не загружаются в терминал (((((((

Пробовал через мазилу, через хром, пробовал ставить мазилу из под вейна , не получилось и интернет экспловер то же не справился с задачей (хотя он пыхтел и постоянно конектился)....

То есть  пользователи линукса не смогут пользоваться маркетом. НЕ хорошо...

 
atztek:

Если переменную Variable типа double необходимо сравнить с нулем то как будет правильно:

if(Variable<=0) {
}

или

if(Variable<=0.0) {
}

Существует ли различие или оба случая верны?


Оба случая верны. Компилятор для обоих случаев сгенерирует один и тот же код.

Методологически правильнее сравнивать с 0.0 (красивее выглядит)

 
keekkenen:

видимо я некорректно выразился про второе условие.. обе переменные имели значение -0.47, но управление переходило в блок отмеченный {//не работает}  

и там что-то делалось, но туда попадать не должно..

Тогда попробуй написать так

if (MathAbs(curLots)-MathAbs(newLots)>0)

{//работает}

else if (NormalizeDouble(MathAbs(curLots)-MathAbs(newLots), 2)<0)

{//не работает???} 
Если и так будет работать не как задумано, то надо принтовать все переменные и для большей уверенности их разницу.
 

Сравнивая вещественные типы чисел в компьютере, надо не забывать, что десятичное число 0.1 в двоичном виде - бесконечная периодическая дробь. Большинство нецелых вещественных чисел представлены с погрешностью округления, 4-байтные имеют погрешность около одной десятимиллионной своей величины, восьмибайтные около 10^(-17). Поэтому всякое сравнение тоже имеет свою погрешность, универсальности нет. В каждом случае сравнения приходится задавать свою погрешность, по конкретике. Например, для сравнения курсов валютных пар и вообще финансовых инструментов вполне адекватным "коридором нечувствительности" будет та же десятимиллионная. Для сравнения депозитов обычно подходит одна сотая. Само сравнение x2 с x1 с допустимой погрешностью delt выглядит так:

if (x2>x1+delt) {// действия при x2>x1 ....}

else {

if (x2<x1-delt) {// действия при x2<x1 ....}

else {// действия при x2=x1 ....}

}

Либо, если интересует лишь равенство:

if (MathAbs(x2-x1)<=delt) {// действия при x2=x1 ....}
 

stringo,  VOLDEMAR

Спасибо!

 
stringo:

Прямым способом - никак.

На другом графике запустите эксперта, который после получения мышиного события будет отправлять пользовательские события нужному графику

Мой советник открывает график нужного финансового инструмента и наносит на него графические объекты, поэтому не хочется просить пользователя запустить новый советник или индикатор для отслеживания событий нажатий мышью на графические объекты (к сожалению, запустить из советника другой советник или индикатор невозможно). Была надежда использовать ChartSetInteger(chart_id,CHART_EVENT_MOUSE_MOVE,true), но в этом случае в советник поступает информация о перемещении мыши по текущему графику (на котором запущен советник), а не по тому, chart_id которого указан. Остается вопрос к разработчикам: правильно ли сейчас работает функция ChartSetInteger (с теми параметрами, которые указаны выше) ?
 
zdd:
Мой советник открывает график нужного финансового инструмента и наносит на него графические объекты, поэтому не хочется просить пользователя запустить новый советник или индикатор для отслеживания событий нажатий мышью на графические объекты (к сожалению, запустить из советника другой советник или индикатор невозможно). Была надежда использовать ChartSetInteger(chart_id,CHART_EVENT_MOUSE_MOVE,true), но в этом случае в советник поступает информация о перемещении мыши по текущему графику (на котором запущен советник), а не по тому, chart_id которого указан. Остается вопрос к разработчикам: правильно ли сейчас работает функция ChartSetInteger (с теми параметрами, которые указаны выше) ?
Вы можете из советника загрузить на любой график шаблон. В шаблоне должен быть индикатор, отсылающий события своего графика на график, где работает управляющий эксперт. И советник будет получать события с нужного вам графика.
Причина обращения: