тики тестер стратегии мт5 - страница 11

 
RaptorUK:

Я хочу иметь возможность контролировать исторические данные, которые я использую, чтобы я мог повторять тесты (Strategy Tester) в контролируемых условиях.

Какие контролируемые условия?

Спасибо

 
WhooDoo22:

Какие контролируемые условия?

Спасибо.

Условия, которые выбираю я, а не условия, которые выбирает мой брокер. Как еще вы предлагаете тестировать? Случайный набор условий для каждого теста? Но давайте не будем отклоняться от темы.
 
RaptorUK:
Условия, которые выбираю я, а не те, которые выбирает мой брокер. Как еще вы предлагаете тестировать? Случайный набор условий для каждого теста? но давайте не будем отходить от темы.

Понятно.

Спасибо

 
angevoyageur:

Нет. Если бы вы прочитали мою ссылку и/или ссылку RaptorUK, это было бы вам более понятно. Если нет, прочитайте еще раз :-D

1.000000000006551e-005 - это просто другое обозначение для 0.00001000000000006551.

Здравствуйте, angevoyageur,

1.000000000006551e-005

0.00001000000000006551

Десятичная дробь второго дубля сдвигается влево пять раз НО ;) не может быть возвращена в тестере в этом формате, потому что дубли возвращают максимальное значение шестнадцать цифр (значащих цифр) справа от десятичной дроби.



Модератор
1651
angevoyageur 2013.04.14 09:39
WhooDoo22:

Здравствуйте сообщество MQL5,

https://www.mql5.com/en/docs/common/comment

"Данные типа double выводятся с точностью до 16 цифр после десятичной точки и могут быть выведены как в традиционном, так и в научном формате, в зависимости от того, какая нотация будет более компактной. Данные типа float выводятся с точностью до 5 цифр после запятой. Для вывода вещественных чисел с другой точностью или в заданном формате используйте функцию DoubleToString()".

Представление цены USDJPY в 98.370 - это данные типа float (выводятся в 5 разряде после десятичной).

Представление цены USDJPY в -0.001999999999995339 - это данные типа double, традиционного формата (выводятся до 16 цифр после запятой).

Почему double -0.001999999999533[9] возвращает 18-ю цифру после запятой, если вывод double осуществляется только до 16 цифр после запятой?

Спасибо

Цены всегда двойные, 98.370 - это двойка. Есть 16 значащих цифр. Нули не являются значащими.


Если нули не существенны, то почему в тестере нельзя было вернутьзначение 0.00001000000000006551 вместо 1.000000000006551e-005? Я бы предпочел вычисления в формате 0.00001000000000006551 !

Спасибо

 
WhooDoo22:


Если нули не являются значимыми, почему в тестере нельзя было вернутьзначение 0.00001000000000006551 вместо 1.000000000006551e-005? Я бы предпочел вычисления в формате 0.00001000000000006551 !

Число с плавающей точкой (double) всегда хранится внутри в этом формате... 1.000000000006551e-005, вы прочитали и поняли информацию по приведенным ссылкам?

Отсюда:числа с плавающей точкой

"Плавающее число IEEE-754 (4 байта) или двойное число (8 байт) состоит из трех компонентов (существует также аналогичный 96-битный формат с расширенной точностью IEEE-854): знаковый бит, определяющий, является ли число положительным или отрицательным, экспонента, определяющая порядок величины, и мантисса, определяющая фактические цифры числа. На примере плавающих чисел одинарной точности можно увидеть следующее расположение битов:"

3 части

ЗнакМантиссаЭкспонента
+1.000000000006551-005

Если вы хотите видеть 0.00001000000000xyz, используйте DoubleToStr(), чтобы отформатировать вывод по своему вкусу.

Articles - Understanding Floating Point Number Representation - Cprogramming.com
Articles - Understanding Floating Point Number Representation - Cprogramming.com
  • www.cprogramming.com
Floating point representations vary from machine to machine, as I've implied. Fortunately one is by far the most common these days: the IEEE-754 standard. This standard is prevalent enough that it's worthwhile to look at it in depth; chances are good you'd be able to use this information on your platform (look for ieee754.h). An IEEE-754...
 
RaptorUK:

Число с плавающей точкой (double) всегда хранится внутри в этом формате... 1.000000000006551e-005, Вы прочитали и поняли информацию по приведенным ссылкам?

Отсюда:числа с плавающей точкой

"Плавающее число IEEE-754 (4 байта) или двойное число (8 байт) состоит из трех компонентов (существует также аналогичный 96-битный формат с расширенной точностью IEEE-854): знаковый бит, определяющий, является ли число положительным или отрицательным, экспонента, определяющая порядок величины, и мантисса, определяющая фактические цифры числа. На примере плавающих чисел одинарной точности можно увидеть следующее расположение битов:"

3 части

ЗнакМантиссаЭкспонента
+1.000000000006551-005

Если вы хотите видеть 0.00001000000000xyz, используйте DoubleToStr(), чтобы отформатировать вывод по своему вкусу.

Да, я прочитал все ваши ссылки и нашел их полезными, еще раз спасибо за их предоставление. Мне больше нравится использовать DoubleToString и выбирать в качестве второго параметра DoubleToString предпоследнее значение двойки (пример: CADJPY 95.9[5]9). Я не думаю, что эту проблему "can price!=price" слишком сложно решить! Что вы скажете по этому поводу?

Спасибо

 
WhooDoo22:

Да, я прочитал все ваши ссылки и нашел их полезными, еще раз спасибо за их предоставление. Мне бы хотелось использовать DoubleToString и выбрать значение double на предпоследнем месте (пример:CADJPY 95.9[5]9) в качестве второго параметра DoubleToString. Я не думаю, что эту проблему "can price!=price" слишком сложно решить! Что вы скажете на это?

То есть вы имеете в виду что-то вроде этого?

double value = 95.959;

Print("Value: ", DoubleToStr(value, _Digits - 1) );

Can price != price - это другая, но немного связанная проблема. Ее нельзя решить, сначала нужно понять, в чем проблема... а потом ее обойти.

 
RaptorUK:

То есть вы имеете в виду что-то вроде этого?

Может ли цена != цена - это другая, но немного связанная проблема. Ее нельзя решить, сначала нужно понять, в чем проблема... затем работать над ней.

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

Каковы ваши мысли по поводу того, что это за проблема "can price != price"?

Спасибо.

 

WhooDoo22:

...

Цены всегда двойные, 98.370 - двойная. Есть 16 значащих цифр. Нули не являются значащими.

Если нули не существенны, то почему в тестере нельзя было вернуть значение 0.00001000000000006551 вместо 1.000000000006551e-005? Я бы предпочел вычисления в формате 0.00001000000000006551 !

Спасибо

Это может быть, это только выбор форматирования выходного значения.

Все эквиваленты
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

Именно потому, что нули не являются значимыми.

WhooDoo22:

Да, я прочитал все ваши ссылки и нашел их полезными, еще раз спасибо за их предоставление. Мне больше нравится использовать DoubleToString и выбирать в качестве второго параметра DoubleToString предпоследнее значение двойки (пример:CADJPY 95.9[5]9). Я не думаю, что эту проблему "can price!=price" слишком сложно решить! Что вы скажете по этому поводу?

Спасибо.

Извините, но я не понимаю это предложение.
 
angevoyageur:

Это может быть, это только выбор форматирования выходного значения.

Все эквиваленты
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

Именно потому, что нули не являются значимыми.

Извините, но я не понимаю этого предложения.

"Извините, но я не понимаю этого предложения".

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

Спасибо

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