Ответ
 
Опции темы
Старый 23.09.2013, 22:38   #1601 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
Нет, вполне нормальные. Проблема в погрешности при хранении и обработке double данных.
Хм. Очень интересно. Первый раз такое слышу. Мне доводилось слышать, что в терминал могут попадать котировки с разрядностью до множества цифр, куда дальше ежели 8... Интересно, как тогда так получается.
Я то понимаю, что проще потерять часть точности, т.е. уменьшить количество цифр после запятой, но, чтоб сама разрядность увеличилась.. Для меня это нонсенс. Тут можно тока поверить Вам на слово, т.к. логически что-то не увязка получается.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 05:09   #1602 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от hoz Посмотреть сообщение
Хм. Очень интересно. Первый раз такое слышу. Мне доводилось слышать, что в терминал могут попадать котировки с разрядностью до множества цифр, куда дальше ежели 8... Интересно, как тогда так получается.
Я то понимаю, что проще потерять часть точности, т.е. уменьшить количество цифр после запятой, но, чтоб сама разрядность увеличилась.. Для меня это нонсенс. Тут можно тока поверить Вам на слово, т.к. логически что-то не увязка получается.
У меня был очень неприятный случай с альпари. Счет был типа NDD с перерасчетом свопов overnight. Вообщем, ночью ордер закрывали и открывали снова по другой цене, но с учетом этого свопа. В результате, вместо нормальной 5-значной цены получалась 6-значная, т.е. за 1 день своп в пунктах был дробным по некоторым парам.
И перестал работать трейлингстоп А все просто - трейлингстоп прибавлял к цене Х пунктов и отправлял OrderModify с полученным новым стоплосс'ом, который без нормализации оставался 6-значным.
Может, это имелось в виду?
Во всех остальных случаях цена приходит психически нормальная
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.09.2013)
Старый 24.09.2013, 08:26   #1603 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от Leonup Посмотреть сообщение
Добрый день, уважаемые форумчане!

Сделать пересечение двух МА – несложно.
А вот как написать код, в котором, например, MA5 пересекает снизу вверх последовательно три МА: МА31, МА21, MA11?

Прошу Вашей помощи.
Заранее благодарен.
Набросал скриптец, который рисует палки в местах выполнения твоего условия. Так надо?

Скрытый текст

Код:
int tx(int i0, int j, int k, int k_price) {
double jma0,kma0,jma1,kma1;

   for(int i=i0; i>0; i--) {
      jma0=iMA(NULL,0,j,0,0,0,i);
      kma0=iMA(NULL,0,k,0,0,k_price,i);
      jma1=iMA(NULL,0,j,0,0,0,i+1);
      kma1=iMA(NULL,0,k,0,0,k_price,i+1);
      if(jma0-kma0 > 0 && jma1-kma1 <=0) return(i);
   }
   return(-1);     
}

int start() {
int t5x11,t5x21,t5x31;

   for(int start=WindowFirstVisibleBar(); start>0; start=t5x11-1) {
      t5x31=tx(start,5,31,PRICE_LOW); 
      t5x21=tx(t5x31,5,21,PRICE_CLOSE);
      t5x11=tx(t5x21,5,11,PRICE_HIGH);
      if(t5x11>0) ObjectCreate(""+t5x11,0,0,Time[t5x11],0,0,0);      
   }
}
[свернуть]

Последний раз редактировалось qqmber; 24.09.2013 в 08:54. Причина: Очепятка
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (24.09.2013), Leonup (26.09.2013)
Старый 24.09.2013, 08:49   #1604 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от hoz Посмотреть сообщение
Хм. Очень интересно. Первый раз такое слышу. Мне доводилось слышать, что в терминал могут попадать котировки с разрядностью до множества цифр, куда дальше ежели 8... Интересно, как тогда так получается.
Я то понимаю, что проще потерять часть точности, т.е. уменьшить количество цифр после запятой, но, чтоб сама разрядность увеличилась.. Для меня это нонсенс. Тут можно тока поверить Вам на слово, т.к. логически что-то не увязка получается.
Статья
Особенности работы с числами типа double в MQL4 _http://articles.mql4.com/ru/762



_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 24.09.2013 в 08:56.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.09.2013)
Старый 24.09.2013, 08:52   #1605 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Цитата:
Нельзя при работе с double данными использовать ==, >=, <=
Если сделать NormalizeDouble, то можно, какие проблемы? Там все будет одинаково абсолютно
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.09.2013)
Старый 24.09.2013, 08:57   #1606 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Если сделать NormalizeDouble, то можно, какие проблемы? Там все будет одинаково абсолютно
Я имел ввиду в чистом виде.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 09:10   #1607 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Добавлю, не надейтесь, что результат Bid+i*Point с нормализованными бидом и пойнтом и целым i окажется автоматически нормализованным. Как повезет.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 09:16   #1608 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от qqmber Посмотреть сообщение
Добавлю, не надейтесь, что результат Bid+i*Point с нормализованными бидом и пойнтом и целым i окажется автоматически нормализованным. Как повезет.
В тестере везет всегда А реале, как только не повезет - сменю ДЦ нафиг! Иначе у меня вся сова будет в "нормализах" увешана
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 09:31   #1609 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от ansol Посмотреть сообщение
В тестере везет всегда А реале, как только не повезет - сменю ДЦ нафиг! Иначе у меня вся сова будет в "нормализах" увешана
На самом деле торговые функции прощают небольшие ошибки с нормализацией. Тем не менее, скрипт
Код:
int start() {
   for(int i=1;i<10;i++) 
      if(NormalizeDouble(Bid+i*Point,Digits) != Bid+i*Point) Print(i," is not Normal");
}
И результат
15:28:10 stst AUDUSD,Daily: 2 is not Normal
15:28:10 stst AUDUSD,Daily: 3 is not Normal
15:28:10 stst AUDUSD,Daily: 4 is not Normal
15:28:10 stst AUDUSD,Daily: 5 is not Normal
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.09.2013)
Старый 24.09.2013, 09:34   #1610 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от ansol Посмотреть сообщение
В тестере везет всегда А реале, как только не повезет - сменю ДЦ нафиг! Иначе у меня вся сова будет в "нормализах" увешана
Менять ДЦ бесполезно. Придётся поменять компьютер на миллиметровую бумагу с чертёжными принадлежностями + телефон для отправки приказов.
Если серьёзно. Не обязательно весь советник увешивать нормализами. Достаточно пересмотреть условия сравнения что бы остались только > и <.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.09.2013)
Старый 24.09.2013, 09:38   #1611 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
qqmber
Возможно, нужен просто "0" в следующем за Digits знаке?
Т.е. 1,2345601 проходит, а 1,234561 - нет?
Если double имеет точность 15 знаков, то "1" в 15 знаке, по идее, не влияет никак
Ugar
Да я понял! Я имею в виду не сравнение, а величину в OrderSend() - она должна проходить в случае Bid + i*Point и аналогичных.
А сравнение - да, на совести программера
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 09:50   #1612 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от ansol Посмотреть сообщение
qqmber
Возможно, нужен просто "0" в следующем за Digits знаке?
Т.е. 1,2345601 проходит, а 1,234561 - нет?
Если double имеет точность 15 знаков, то "1" в 15 знаке, по идее, не влияет никак
Ugar
Да я понял! Я имею в виду не сравнение, а величину в OrderSend() - она должна проходить в случае Bid + i*Point и аналогичных.
А сравнение - да, на совести программера
Думаю не сложно переписать строчки с OrderSend, OrderModify, OrderClose, засутув в них нормализе

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.09.2013)
Старый 24.09.2013, 09:53   #1613 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Флаг в руки! В альпари не пойду!
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 10:11   #1614 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от ansol Посмотреть сообщение
Флаг в руки! В альпари не пойду!
А причём тут ДЦ? Это не особенность ДЦ, а особенность работы компьютера с дробными числами. Только в разных языках разная погрешность. Значит лажа может случиться в любом ДЦ. И как показывает практика, случается не редко.
Цитата:
2. Погрешности при работе с числами типа double


Специфика формата хранения чисел double в компьютере приводит к ограничению точности их хранения и возникновению погрешностей при работе с ними. Например, при использовании бесконечной точности вычислений, для любых действительных чисел A и B всегда будут справедливы тождества:
(A/B)*(B)=A,
A-(A/B)*B=0,
(A/B)*(B/A)=1 и т.п.
В компьютере точность хранения количества десятичных знаков чисел типа double определяется размерами мантиссы и ограничена 52 битами.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 24.09.2013 в 10:25.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 10:21   #1615 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от ansol Посмотреть сообщение
qqmber
Возможно, нужен просто "0" в следующем за Digits знаке?
Да, именно так.
Это не зависит от ДЦ, только от МТ.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 11:32   #1616 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Цитата:
Да, именно так.
Это не зависит от ДЦ, только от МТ.
Странно, что сервер отвергает запрос вместо того чтобы округлить.
Странно, что терминал не округляет при том, что "знает" что сервер такой запрос не пропустит
Хреновые они все-таки программисты.
Ugar

Есть два числа с 5 знаками после запятой. Их сложили. С чего ради у терминала получится 6 знаков? А вот если тебе вместо 5 знаков в цене подсунул ДЦ 6 злонамеренно, как я выше описал, а потом свою же цену и не принимает, то это виноват только ДЦ!

Последний раз редактировалось NSerega; 24.09.2013 в 16:30.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 12:00   #1617 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от ansol Посмотреть сообщение
Странно, что сервер отвергает запрос вместо того чтобы округлить.
Странно, что терминал не округляет при том, что "знает" что сервер такой запрос не пропустит
Хреновые они все-таки программисты.
Кривую цену отпинывает сам терминал. На сервер она не уходит. Хреновые программисты по обе стороны терминала.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 12:03   #1618 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от qqmber Посмотреть сообщение
Кривую цену отпинывает сам терминал. На сервер она не уходит. Хреновые программисты по обе стороны терминала.
Кстати, интересно, если переменную один раз "нормализовать", то она потом, после других операций, может стать снова ненормализованной?
А то может их сразу "на входе" объявить какими надо, не?
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.09.2013, 12:29   #1619 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от ansol Посмотреть сообщение
Кстати, интересно, если переменную один раз "нормализовать", то она потом, после других операций, может стать снова ненормализованной?
Разумеется.
Цитата:
А то может их сразу "на входе" объявить какими надо, не?
Не поможет.
Надо было разрабам специальный тип данных для цен придумать, а не держать все в double.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ansol (24.09.2013), eevviill (24.09.2013)
Старый 24.09.2013, 15:10   #1620 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от ansol Посмотреть сообщение

Есть два числа с 5 знаками после запятой. Их сложили. С чего ради у терминала получится 6 знаков? А вот если тебе вместо 5 знаков в цене подсунул ДЦ 6 злонамеренно, как я выше описал, а потом свою же цену и не принимает, то это виноват только ДЦ!
Это был просто пример из статьи. Не о делении речь, а о погрешности представления дробных чисел. В терминале они 15 значные. В 15 знаке погрешность.
Число 1.33453 в темринале 15 значное 1.33453000000000. Так вот может на самом деле оказаться, с погрешностью 1.33453000000001.
При сложении двух чисел с погрешностью в 15 знаке, результат будет то же с погрешностью.
Если ДЦ подсовывает вместо 5 знаков 6 это конечно лажа. Но я такого не замечал может потому что оперирую везде значениями с учётом погрешностей.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось NSerega; 24.09.2013 в 16:31.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (24.09.2013), Алекc1234 (24.09.2013)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 16:24. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO