Как узнать количество нулей после запятой в котировках разных валют? - страница 2

 
eevviill:

Я ещё думал именно конкретную пару проверять. EURUSD.

Но

1) Её может не быть.

2) Может иметь название не EURUSD. 

Если не хотите/нет возможности запрашивать для нужной пары, то посчитайте самостоятельно. Разве проблема цикл организовать ?
 
VladislavVG:
Если не хотите/нет возможности запрашивать для нужной пары, то посчитайте самостоятельно. Разве проблема цикл организовать ?

Речь шла о том, что есть некий финансовый инструмент, неизвестно вообще какой. Может пшеница, может акции Microsoft, а может криптовалюта. Стоит задача определить, с какой точностью в данный конкретный момент брокер дает нам котировку - классический пункт или десятую часть классического пункта? Как это сделать автоматически и универсально?

Причем здесь вообще цикл?

 
Scriptong:

Речь шла о том, что есть некий финансовый инструмент, неизвестно вообще какой. Может пшеница, может акции Microsoft, а может криптовалюта. Стоит задача определить, с какой точностью в данный конкретный момент брокер дает нам котировку - классический пункт или десятую часть классического пункта? Как это сделать автоматически и универсально?

Причем здесь вообще цикл?


Потому, что используя цикл можно определить количество значащих цифр после запятой (и до запятой, кстати, тоже)  для любого десятичного числа. В том числе котировок цены на валюту, акции или криптовалюту. Это и будет автоматически и наиболее универсально.
 
VladislavVG:
Потому, что используя цикл можно определить количество значащих цифр после запятой (и до запятой, кстати, тоже)  для любого десятичного числа. В том числе котировок цены на валюту, акции или криптовалюту. Это и будет автоматически и наиболее универсально.

Мы говорим о разных проблемах. Вы о проблеме "сколько знаков после запятой у числа". Это, действительно, не проблема. Причем в МТ для этого есть Point и Digits.

Здесь же поднята проблема определения предоставляемой брокером точности котировок: классические или нет. Решение "в лоб" (запросить Digits) не подходит, т. к. нам неизвестно свойство финансового инструмента (каким должна быть его точность при классическом представлении). К примеру, если символ BTCUSD, то Digits = 2 это классические пункты или неклассические? Это если в советнике уже прописано, что символ BTCUSD должен в классике иметь 2 знака после запятой, то сравнивая полученное значение с эталоном, можно ответить на этот вопрос. А если не прописано? Ведь все символы для всех брокеров не пропишешь в советнике.

 
VladislavVG:
Если не хотите/нет возможности запрашивать для нужной пары, то посчитайте самостоятельно. Разве проблема цикл организовать ?
Если не в теме, то лучше сначало в неё попасть.
 
Scriptong:

Мы говорим о разных проблемах. Вы о проблеме "сколько знаков после запятой у числа". Это, действительно, не проблема. Причем в МТ для этого есть Point и Digits.

Здесь же поднята проблема определения предоставляемой брокером точности котировок: классические или нет. Решение "в лоб" (запросить Digits) не подходит, т. к. нам неизвестно свойство финансового инструмента (каким должна быть его точность при классическом представлении). К примеру, если символ BTCUSD, то Digits = 2 это классические пункты или неклассические? Это если в советнике уже прописано, что символ BTCUSD должен в классике иметь 2 знака после запятой, то сравнивая полученное значение с эталоном, можно ответить на этот вопрос. А если не прописано? Ведь все символы для всех брокеров не пропишешь в советнике.

 

 

Вопросы пересекающиеся. И еще: из названия темы видно, что именно количество значащих цифр  спрашивал ТС. К тому же именно эту в величину пытался получить eevviill  судя по его посту, на который я ответил ( возможно я ошибся ?). А судя по его ответу выше, он хотел получить нечто другое )))).

Если говорить об универсальном подходе, то сможете ответить что Вам выдаст запрос к Point или Digits на нестандартном (например, на том, инструменте, который данным ДЦ не котируется) чарте ? Если Вы в МТ загоните график того инструмента, который ДЦ, с которого взят МТ, не котируется. Я, например, не знаю.

Для определения стандартный пункт или нет нужно обращаться к условиям торговли. Как для акций или CFD не знаю - можно посмотреть, а для валют понятие пункта (не путать с тем, что выдает Point в МТ) вводилось как величина, при изменении на единицу которой, стоимость стандартного лота валюты (100К), котируемой к USD (XXX/USD) изменяется на 10 USD такие пукты сейчас и называют стандартными (жаргон) - раньше это и было минимальным изменением цены. Такая величина вводилась именно потому, что валюты торговались/торгуются стандартными лотами (100К).

Сейчас точность котирования (минимальное изменение цены) в некоторых ДЦ 0.1 того пункта. Для EUR/USD размер стандартного пункта - это 4-й знак.

Дальше ИМХО. Если сейчас валюты перестанут торговать стандартными лотами или его размер изменится (например, станет не 100К, а 1000К или 10К), то изменится и значение стандартного пункта. Хотя все равно его можно продолжать рассчитывать, как и прежде, из размера стандартного лота 100К )))).

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

Пример : если Биткоины не торгуются стандартными лотами ( я реально не знаю как они торгуются),  то для них понятие "стандартного лота" и понятие "стандартного пункта" будет отсутствовать. То есть , тот пункт, размером которого измеряется изменение цены, и можно считать стандартным. Хотя,  все равно можно будет рассчитать размер пункта, например, исходя из того, что BTC торгуются по условиям торговли всех остальных валют - лотами по 100К и назвать его стандартным )))))), а тот, что в котирах - точностью котирования. Кстати, они могут совпадать )))).

Для учета в советниках/индикаторах скорее всего придется либо вести свою базу (для автоматизации) или делать внешним параметром, хотя, наверное, возможны варианты. Например, если принять размер "стандартного лота" для всех инструментов равным 100К не зависимо от того как реально торгуется инструмент, то тогда можно просто рассчитывать. Все зависит от тех целей, которые Вы перед собой ставите.

 
eevviill:
Если не в теме, то лучше сначало в неё попасть.

Ок, попадайте в тему.

ЗЫ Попробуйте научиться использовать проверку орфографии. Право, это не сложно.

 
VladislavVG:

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

Вот эту проблему и обсуждаем: условия торговли советник не может прочесть на сайте брокера. Трейдеры же привыкли оперировать классическими пунктами, а те пункты, которые на самом деле только десятая часть от пункта, не должны сбивать с толку. Но так выходит, что они "сбивают с толку" программу. 

Для учета в советниках/индикаторах скорее всего придется либо вести свою базу (для автоматизации) или делать внешним параметром, хотя, наверное, возможны варианты. Например, если принять размер "стандартного лота" для всех инструментов равным 100К не зависимо от того как реально торгуется инструмент, то тогда можно просто рассчитывать. Все зависит от тех целей, которые Вы перед собой ставите.

С базой - достаточно сложно, т. к. ее нужно будет везде таскать за собой или делать решение через сайт (ненужные сложности для, по сути, пустякового вопроса). Отсюда и такое вот промежуточное решение - вводить специальный параметр, в котором трейдер сам указывает, какие на данном инструменте пункты. То есть ответственность перекладывается на трейдера. Но, к сожалению, далеко не все трейдеры понимают, о чем идет речь. Поэтому и возник вопрос - как это сделать автоматически. Пока, как видно, никак. Юзаем дополнительный параметр, который описываем в документации к программе.
 
VladislavVG:
Потому, что используя цикл можно определить количество значащих цифр после запятой (и до запятой, кстати, тоже)  для любого десятичного числа. В том числе котировок цены на валюту, акции или криптовалюту. Это и будет автоматически и наиболее универсально.

Как? Точнее, где взять десятичное число...

Если бы в программе MQL* мы видели строковое представление курса из окна обзора рынка, например "1.3400" для EURUSD - конечно, и без цикла, вычтем из длины строки позицию точки в ней, и готово. Нули справа дописаны как раз для обозначения всех значащих цифр. Реально у нас есть лишь двоичное представление, обычно 8 байт. Где брать границу, на которой заканчиваются значащие цифры в десятичном представлении?

Эту проблему я решаю итерационно. Каждые 16 секунд "расширяю" количество значащих цифр. Умножаю текущие курсы бид и аск на один миллион, считаю нули справа, оставшиеся цифры будут значащими. Если курс 1.34, это даст три значащих цифры, из них 2 дробных. Не более чем. Когда появится курс 1.3386, будет 4 дробных цифры. Но не раньше. На примере одного курса выявить число значащих цифр в нем я не сумел.

P.S. Тем, кто не сталкивался, на всякий случай напомню, что десятичное число 0.1 в двоичном представлении - бесконечная периодическая дробь.

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