Как привести значения индикатора на разных инструментах к общему виду?

 

Здравствуйте!

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

Индикатор использует OHLC цены и простые математические операции с ними.

Приведен рисунок для наглядности. Красным показан желаемый результат.

Логически понимаю что надо делать, но реализовать не получается. 

Подскажите пожалуйста в каком напрвалении искать, если такое вообще возможно.


Спасибо

Файлы:
Vision.png  87 kb
 
Gerkl:

Здравствуйте!

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

Индикатор использует OHLC цены и простые математические операции с ними.

Приведен рисунок для наглядности. Красным показан желаемый результат.

Логически понимаю что надо делать, но реализовать не получается. 

Подскажите пожалуйста в каком напрвалении искать, если такое вообще возможно.


Спасибо

Это называется нормализация. Например результат этих простых математических операций разделить на 100 и закрепить минимум и максимум  например от -1 до 1. 

 
Vitalii Ananev:

Это называется нормализация. Например результат этих простых математических операций разделить на 100 и закрепить минимум и максимум  например от -1 до 1. 

Спасибо за ответ, но к сожалению это не совсем то. что мне нужно. Мне нужно произвести смещение значений индикатора относительно запятой (точки) вправо или влево, в зависимости от выбранного инструмента на чарте. На рисунке видно, что красным укакзаны те же значения, что показывает индикатор, только смещенные. 

 
Gerkl:

Спасибо за ответ, но к сожалению это не совсем то. что мне нужно. Мне нужно произвести смещение значений индикатора относительно запятой (точки) вправо или влево, в зависимости от выбранного инструмента на чарте. На рисунке видно, что красным укакзаны те же значения, что показывает индикатор, только смещенные. 

Тогда не знаю не вижу ни каких общих зависимостей. В случае с йеной достаточно NormalizeDouble(Значение,1). В случае с евро надо умножить на 10 и опять же NormalizeDouble(Значение,1), а золото надо делить на 10 и NormalizeDouble(Значение,1). Но это только если смотреть картинку для других инструментов может быть все по другому. Кроме этого на евро у вас временной интервал М15, а на других М30  это тоже возможно как то оказывает влияние на значение индикатора.

 
Vitalii Ananev:

Тогда не знаю не вижу ни каких общих зависимостей. В случае с йеной достаточно NormalizeDouble(Значение,1). В случае с евро надо умножить на 10 и опять же NormalizeDouble(Значение,1), а золото надо делить на 10 и NormalizeDouble(Значение,1). Но это только если смотреть картинку для других инструментов может быть все по другому. Кроме этого на евро у вас временной интервал М15, а на других М30  это тоже возможно как то оказывает влияние на значение индикатора.

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

Это как в случае использования Crosshair на панели инструментов. Если его выбрать и на графике кликнуть и удерживая провести линия, то в вспомогательном окошке показывает количесто пунктов от точки"А" до точки "Б". На разных парах показывает одинакого.

Может как то использовать  _Point  в расчетах?

 
Gerkl:

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

Это как в случае использования Crosshair на панели инструментов. Если его выбрать и на графике кликнуть и удерживая провести линия, то в вспомогательном окошке показывает количесто пунктов от точки"А" до точки "Б". На разных парах показывает одинакого.

Может как то использовать  _Point  в расчетах?

Не, думаю, Point() не подойдет, он показывает значение одного пункта. Делить на Point() надо если вам нужно получить значение индикатора в пунктах. Но тогда надо цены (если они участвуют в расчетах индикатора) тоже переводить в пункты. Иначе получится как будто вы километры делите на килограммы. Попробуйте значение минимального изменение цены TickSize().


 
Gerkl:

Здравствуйте!

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

Индикатор использует OHLC цены и простые математические операции с ними.

Приведен рисунок для наглядности. Красным показан желаемый результат.

Логически понимаю что надо делать, но реализовать не получается. 

Подскажите пожалуйста в каком напрвалении искать, если такое вообще возможно.


Спасибо

формулы какие ? В чём измеряется индикатор

НЁХ привести к обобщённому виду нельзя ну никак..

если формулы известны, можно например выразить/привести к одной валютной паре. Или ещё как-то. В любом случае нужна арифметика вычислений и физика явлений чтобы привести к общему виду

 
Maxim Kuznetsov:

формулы какие ? В чём измеряется индикатор

НЁХ привести к обобщённому виду нельзя ну никак..

если формулы известны, можно например выразить/привести к одной валютной паре. Или ещё как-то. В любом случае нужна арифметика вычислений и физика явлений чтобы привести к общему виду

Совершенно точно. Два основных варианта - все расчеты перевести в проценты или в валюту депозита.

 
Правильно замечено,  перевести в валюту депо.  Для этого нужно приращения в пунктах перевести в приращения в валюте депо.  Например,  евробакс изменился на 10 пунктов для одного лота это 1бакс, и к примеру австралиец изменился на 10пунктов для одного лота это 0.8бакса, вот теперь чтобы они одинаково показывали индюк на австралийце умножаешь на 1.25 и получишь нормализацию. 
 

Спасибо всем откликнувшимся. Вроде разобрался. Прошелся по вычислениям вручную и нашел где происходил сбой. Как писал Vitalii Anane, у меня получалось, что я километры делил на килограммы.

Добавил в расчеты   

   double tSize = SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)*10;

и все встало на свои места. 

С золотом и серебром возникла другая проблема. Индикатор не обнуляется в конце дня как на других парах, но это уже другая тема. Буду сам разбираться с таймером.

Еще раз всем спасибо. Думаю тему можно закрывать.

Файлы:
Vision1.png  80 kb
 
Gerkl:

Добавил в расчеты   

double tSize = SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE)*10;

и все встало на свои места. 

Это очень плохой подход - что за магическая константа 10? 100% сломается на каком-нибудь другом инструменте. Должны браться данные из спецификаций с помощью MQL.

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