Новая версия MetaTrader 4 Client Terminal build 226 - страница 8

 
drknn >>:
Ладно, из каких-то соображений разработчик так сделал, пусть так, но почему же в справочной системе ни слова о том, что функция не просто возвращает в строку указанное количество цифр после запятой, но ещё и округляет?? А в результате потеря времени и сил, объяснения с заказчиком, переразбор кода, написание дополнительных функций.
"Хоботов, это мелко!" (с)
Не нужно везде видеть злой умысел. Если чего-то нет, то не потому, что это исключительно для того чтобы досадить исключительно Вам.

Ищите возможности сделать, а не причины для отказа. Всего предусмотреть нельзя, и то, что из-за этой функции какой-то редкий вид советника вызвал бурю разборок в стакане с заказчиком - не повод обвинять язык MQL4 и его разработчиков. Начните изменять мир к лучшему с себя.
,
 
А вот это точно глюк!
if(OrderStopLoss()-OrdOpPrice>=2*Point) {continue;}
На 4-х знаке (терминал УГБанк версия 226) не работает! Не влезает в масштаб.
А конструкции типа
if((OrderStopLoss()-OrdOpPrice)*100000>=2) {continue;}
или
if((OrderStopLoss()-OrdOpPrice)*10>=2*Point) {continue;}
прекрасно справляется. Цену и стоп опрашиваю через нормалайз.
Живем в 4-х, а стопаримся в 5-и знаках. Оригинально!
 
hhohholl >>:
А вот это точно глюк!
На 4-х знаке (терминал УГБанк версия 226) не работает! Не влезает в масштаб.

а что на принте рисует левая и правая часть условия?
 
sergeev >>:

а что на принте рисует левая и правая часть условия?


Правую часть не печатал, а по левой давало

(OrderStopLoss()-OrdOpPrice)*10000=2

что и не давало понять почему не выполняется условие.

Часа четыре потерял.

 
"hhohholl писал(а) >>
А вот это точно глюк!
На 4-х знаке (терминал УГБанк версия 226) не работает! Не влезает в масштаб.
А конструкции типа ... или ... прекрасно справляется. Цену и стоп опрашиваю через нормалайз.
Живем в 4-х, а стопаримся в 5-и знаках. Оригинально!

Вы ошибаетесь. Если и есть глюк, то только в Вашей голове.
Во-первых, номализовать надо не цену и стоп (их то как раз можно оставить в покое), а их разность.
Во-вторых, вообще не понятно, что Вы хотите проверить ? Что стоп-лосс ордера больше цены открытия ордера (OrdOpPrice) на 2 пункта (или = 2 пункта), ну, допустим, условие выполняется.
А что скрывается под загадочным "continue " ?

Что касается 4-х, 5-и знака, а также 3-х, 2-х и 1-знака после запятой (есть и такие инструменты), то корректно выполнять сравнения с использованием Digits или
MarketInfo( Symbol(),MODE_DIGITS) и Point (MarketInfo(Symbol(), MODE_POINT )), а не с конкректным числом пунктов, и параметра

MarketInfo( Symbol(), MODE_STOPLEVEL ) для расчёта дупустимых уровней стопов.
Тогда и в масштаб будет влезать.

 
Valmars >>:

Вы ошибаетесь. Если и есть глюк, то только в Вашей голове.
Во-первых, номализовать надо не цену и стоп (их то как раз можно оставить в покое), а их разность.
Во-вторых, вообще не понятно, что Вы хотите проверить ? Что стоп-лосс ордера больше цены открытия ордера (OrdOpPrice) на 2 пункта (или = 2 пункта), ну, допустим, условие выполняется.
А что скрывается под загадочным "continue " ?

Что касается 4-х, 5-и знака, а также 3-х, 2-х и 1-знака после запятой (есть и такие инструменты), то корректно выполнять сравнения с использованием Digits или
MarketInfo( Symbol(),MODE_DIGITS) и Point (MarketInfo(Symbol(), MODE_POINT )), а не с конкректным числом пунктов, и параметра

MarketInfo( Symbol(), MODE_STOPLEVEL ) для расчёта дупустимых уровней стопов.
Тогда и в масштаб будет влезать.

А гражданин то - хамоват! Великому Гуру - по пунктам.

- Если после смены даты не пронормализуете цену, то получите и 6 и 8 знаков после запятой, сравнивать такое - только с пальцем.

- Стоп-лосс ордера больше цены открытия ордера (OrdOpPrice) на 2 пункта (или = 2 пункта) означает, что ордер за безубытком, и двигать его пока не надо.

- А загадочное "continue " это и делает. Для справки: загадочное "continue " применяется внутри циклов для прерывания текущей итерации и перехода к следующей. В данном случае к опросу следующего ордера. Обычно это понятно всем.

А еще есть два хороших инструмента общения. Вежливость и корректность.

И вещать лучше в сети, потому что на улице могут побить
 
hhohholl >>:

А гражданин то - хамоват! Великому Гуру - по пунктам.

- Если после смены даты не пронормализуете цену, то получите и 6 и 8 знаков после запятой, сравнивать такое - только с пальцем.

- Стоп-лосс ордера больше цены открытия ордера (OrdOpPrice) на 2 пункта (или = 2 пункта) означает, что ордер за безубытком, и двигать его пока не надо.

- А загадочное "continue " это и делает. Для справки: загадочное "continue " применяется внутри циклов для прерывания текущей итерации и перехода к следующей. В данном случае к опросу следующего ордера. Обычно это понятно всем.

А еще есть два хороших инструмента общения. Вежливость и корректность.

И вещать лучше в сети, потому что на улице могут побить

Ну, извините, если нечаянно обидел. Не хотел, знаете ли, алкоголь сыграл свою роль ...

А по-существу, я и вправду не понял, в чём состоит глюк.

А я имел ввиду следующее:

Разница двух нормализованных чисел есть число ненормализованное, так что сначала выполняем арифметические действия, у уж потом нормализуем результат для сравнения и желательно с 0.

Или я не прав ?

А масштабирование уровней стопов с использованием Digits и Point даёт корректный результат при любой точности представления котировок.

 
Valmars >>:

Ну, извините, если нечаянно обидел. Не хотел, знаете ли, алкоголь сыграл свою роль ...

А по-существу, я и вправду не понял, в чём состоит глюк.

А я имел ввиду следующее:

Разница двух нормализованных чисел есть число ненормализованное, так что сначала выполняем арифметические действия, у уж потом нормализуем результат для сравнения и желательно с 0.

Или я не прав ?

А масштабирование уровней стопов с использованием Digits и Point даёт корректный результат при любой точности представления котировок.

Принято.

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

А==1,234567 -> нормализация 4 знака -> А=1,2345;

Б==1,234578 -> нормализация 4 знака -> Б=1,2345;

Как А - Б может быть не ноль?

Печатает EURUSD,M1: OrderStopLoss() = 1.3688 OrderOpenPrice() = 1.3686
EURUSD,M1: OrderStopLoss() - OrderOpenPrice() = 0.0002
А условие
      if (OrderStopLoss()-OrderOpenPrice()==2*Point) {К++;}
не выполняет в любых вариациях.

А за мысль пронормализовать разницу спасибо. Попробую
 
hhohholl писал(а) >>

но как (пусть тогда объяснят разработчики) разница нормализованных чисел может быть ненормализованной?


Согласитесь, что в Вашем примере

2*Point
не нормализовано
 
PapaYozh >>:


Согласитесь, что в Вашем примере

не нормализовано

Конэчно! Я понял!

2*Point

это два пункта! Максымум - два с половиною!

В одном из предыдущих постов я писал, что четырехзнак

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