Индикаторы: Тиковый индикатор ZoomPrice

 

Тиковый индикатор ZoomPrice:

Показывает график цены любого уровня масштабирования.

Автор: fxsaber

 

Можно индикатор переместить в окно графика без рамки или будет тормозить терминал?

и еще можно сделать линии [коричневые, синяя, красная] отключаемые в настройках?

 
 
sober:

Можно индикатор переместить в окно графика без рамки или будет тормозить терминал?

Это интерактивный графический объект, некоторые свойства которого меняются (например, координаты) через CTRL+B (будет виден, как Chart, если нажать "Все"). Поэтому с ним можно делать все то же, что и со стандартными графическими объектами. В частности, помещать в любое окно (подокно).

Короткий исходник советника, что в описании, как раз это и делает.

 

в таком варианте Вы можете переключать чарт на другие символы, а объект продолжит показывать тот символ, на котором был изначально создан. 

и еще можно сделать линии [коричневые, синяя, красная] отключаемые в настройках?

Эти линии несут определенную информацию

  • коричневая (по умоланию) - вертикальная показывает положение времени в месте курсора, горизонтальная - цену.
  • синяя (по-умолчанию) - показывает bid-цену в положении курсора. При этом справа (вдоль вертикальной шкалы) выводится время этого тика и спред.
  • красная (по-умолчанию) - тоже самое для ask-цены.
Убрать эти линии через входные параметры - не предусмотрено. Коричневую возможно "убрать", задав цвет Cross как None. Аналогично, можно сделать и с линиями Bid/Ask, но это повлияет на видимость соответствущих исторических ломанных линий.
 
fxsaber:

Это интерактивный графический объект, некоторые свойства которого меняются (например, координаты) через CTRL+B (будет виден, как Chart, если нажать "Все"). Поэтому с ним можно делать все то же, что и со стандартными графическими объектами.

Там же возможно отключить вертикальную шкалу и поместить объект на задний фон графика.

Получив таким образом, например, фоновый тиковый график (исторический/реалтайм) изменяемого масштаба.

 

В общем, как использовать этот объект - дело фантазии.  

 

По-умолчанию, "Отображение на графике торговых уровней (уровни открытых позиций, Stop Loss, Take Profit и отложенных ордеров)" отключено на тиковом графике.

Но включение этого режима иногда бывает полезным

На скрине хорошо видно, что открыта SELL-позиция и bid-цена (предпоследний бар) опускалась ниже TP-уровня. Однако, становится понятно, почему TP не сработал - ask-цена (красная ломанная) не доходила до TP.


Включается отображение правкой в исходнике

this.SetProperty(CHART_SHOW_TRADE_LEVELS, false);        // Отображение на графике торговых уровней (уровни открытых позиций, Stop Loss, Take Profit и отложенных ордеров)

в этой строчке нужно false заменить на true. Либо, если хочется, чтобы тиковый график получил такие же настройки, как и основной, - закомментировать эту строчку.
 

 
fxsaber:

По-умолчанию, "Отображение на графике торговых уровней (уровни открытых позиций, Stop Loss, Take Profit и отложенных ордеров)" отключено на тиковом графике.

Но включение этого режима иногда бывает полезным

На скрине хорошо видно, что открыта SELL-позиция и bid-цена (предпоследний бар) опускалась ниже TP-уровня. Однако, становится понятно, почему TP не сработал - ask-цена (красная ломанная) не доходила до TP.


Включается отображение правкой в исходнике

this.SetProperty(CHART_SHOW_TRADE_LEVELS, false);        // Отображение на графике торговых уровней (уровни открытых позиций, Stop Loss, Take Profit и отложенных ордеров)

в этой строчке нужно false заменить на true. Либо, если хочется, чтобы тиковый график получил такие же настройки, как и основной, - закомментировать эту строчку.
 

Первый тиковый индикатор "fxsaber" более функционален и удобен. Поверх него можно было наложить стандартные индикаторы в окне графика. К графику можно было применить 'масштаб по пунктам на бар'. Все четко. В этом же индикаторе "zoomprice" все скачет сползает, пока настроишь под себя сто лет пройдет. Перекрестие и синяя, красная линия вообще лишние, только отвлекают.

Единственное достоинство "zoomprice" он выглядит шустрее, чем "fxsaber".

 
sober:

Первый тиковый индикатор "fxsaber" более функционален и удобен. Поверх него можно было наложить стандартные индикаторы в окне графика. К графику можно было применить 'масштаб по пунктам на бар'. Все четко.

Я слабый пользователь терминала, поэтому не в курсе, что нужно продвинутым. Было бы полезно узнать, как используете. Например, режим 'масштаб по пунктам на бар' никогда не включал и не знаю, чем он может быть удобен. В общем, поделитесь опытом.

В этом же индикаторе "zoomprice" все скачет сползает, пока настроишь под себя сто лет пройдет.

Ничего скакать и сползать не должно. Разберитесь в интерфейсе взаимодействия. Он очень интуитивен, как мне показалось. Настраиваю масштаб влет с помощью мыши. Если у кого-то есть с этим проблемы - прошу высказаться. Пока же только одно неудовольствие.

Для понимания, как задавать те же настройки объекту, привожу советник-пример

input int exX = 50;       // X-координата
input int exY = 50;       // Y-координата
input int exWidth = 450;  // Ширина
input int exHeight = 300; // Высота

input bool exShowGrid = true;            // Сетка
input color exColorBackGround = clrSnow; // Цвет фона
input bool exTradeLevels = true;         // Ордера
input bool exPriceScale = true;          // Ценовая шкала

#include <fxsaber\ChartObjects\ChartObject_ZoomPrice.mqh>

// CHARTOBJECT_ZOOMPRICE ChartObject;
CHARTOBJECT* ChartObject;

void OnInit( void )
{
  ChartObject = new CHARTOBJECT_ZOOMPRICE; // Создаем ZoomPrice-объект
  
  // Возможно задавать и читать любые свойства объекта из перечислений (F1 - справка)
  // ENUM_OBJECT_PROPERTY_INTEGER, ENUM_OBJECT_PROPERTY_DOUBLE, ENUM_OBJECT_PROPERTY_DOUBLE
  // ENUM_CHART_PROPERTY_INTEGER, ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING
  
  // Запись свойств через ChartObject.SetProperty  
  ChartObject.SetProperty(OBJPROP_XDISTANCE, exX);  // Дистанция в пикселях по оси X от угла привязки
  ChartObject.SetProperty(OBJPROP_YDISTANCE, exY);  // Дистанция в пикселях по оси Y от угла привязки

  ChartObject.SetProperty(OBJPROP_XSIZE, exWidth);  // Ширина объекта по оси X в пикселях.
  ChartObject.SetProperty(OBJPROP_YSIZE, exHeight); // Высота объекта по оси Y в пикселях.
  
  ChartObject.SetProperty(CHART_SHOW_GRID, exShowGrid);               // Отображение сетки на графике
  ChartObject.SetProperty(CHART_COLOR_BACKGROUND, exColorBackGround); // Цвет фона графика
  ChartObject.SetProperty(CHART_SHOW_TRADE_LEVELS, exTradeLevels);    // Отображение на графике торговых уровней (уровни открытых позиций, Stop Loss, Take Profit и отложенных ордеров)
  ChartObject.SetProperty(OBJPROP_PRICE_SCALE, exPriceScale);         // Признак отображения ценовой шкалы для объекта "График"

#define TOSTRING(A) #A + " = " + (string)(A)
  
  // Чтение свойств через ChartObject.GetProperty
  Print(TOSTRING(ChartObject.GetProperty(OBJPROP_XDISTANCE)));
  Print(TOSTRING(ChartObject.GetProperty(CHART_COMMENT)));
}

void OnDeinit( const int Reason )
{
  delete ChartObject; // Удаляем графический объект
}

void OnChartEvent( const int id, const long& lparam, const double& dparam, const string& sparam )
{
  EVENTBASE::MyEvent(id, lparam, dparam, sparam); // Нужно для интерактивности объекта
}

void OnTimer( void )
{
  EVENTBASE::MyEventTimer(); // Нужно для интерактивности объекта
}

void OnTick( void )
{
  EVENTBASE::MyEventTick(); // Нужно для интерактивности объекта
}

Перекрестие и синяя, красная линия вообще лишние, только отвлекают.

Чтобы отключить линии и текст, нужно найти в исходниках функцию

  void SetTextCross( const int X, const int Y )
  {
    if (this.GetProperty(CHART_WIDTH_IN_PIXELS) == 0)
      return;

    const ulong TimeCross = (ulong)(this.Ticks.GetTime() + this.Ticks.GetInterval() *
                                    ((double)(X - (int)CHARTOBJECT::GetProperty(OBJPROP_XDISTANCE) - OBJ_CHART_BORDER_SIZE) /
                                     this.GetProperty(CHART_WIDTH_IN_PIXELS) - 0.5));

    this.TextCross.SetProperty(OBJPROP_TIME, (int)this.VLineCross.GetProperty(OBJPROP_TIME));
    this.TextCross.SetProperty(OBJPROP_PRICE, this.GetProperty(CHART_PRICE_MIN));

    this.TextCross = CHARTOBJECT::TimeToString(TimeCross);

    this.SetTextPrices(TimeCross, Y);

    return;
  }

и закомментировать ее тело.

  void SetTextCross( const int X, const int Y )
  {
/*    if (this.GetProperty(CHART_WIDTH_IN_PIXELS) == 0)
      return;

    const ulong TimeCross = (ulong)(this.Ticks.GetTime() + this.Ticks.GetInterval() *
                                    ((double)(X - (int)CHARTOBJECT::GetProperty(OBJPROP_XDISTANCE) - OBJ_CHART_BORDER_SIZE) /
                                     this.GetProperty(CHART_WIDTH_IN_PIXELS) - 0.5));

    this.TextCross.SetProperty(OBJPROP_TIME, (int)this.VLineCross.GetProperty(OBJPROP_TIME));
    this.TextCross.SetProperty(OBJPROP_PRICE, this.GetProperty(CHART_PRICE_MIN));

    this.TextCross = CHARTOBJECT::TimeToString(TimeCross);

    this.SetTextPrices(TimeCross, Y);
*/

    return;
  }

 

Чтобы отключить перекрестие, нужно найти строки

        this.HLineCross = price;
        this.VLineCross = time;

и закомментировать их

//        this.HLineCross = price;
//        this.VLineCross = time;

Единственное достоинство "zoomprice" он выглядит шустрее, чем "fxsaber".

ZoomPrice может быть замечательным дополнением к Ticks - позволяет подробно рассмотреть то, что показывает Ticks. После написания ZoomPrice, сам прекратил пользоваться Ticks. 

Тиковый индикатор Ticks
Тиковый индикатор Ticks
  • голосов: 19
  • 2016.10.14
  • //www.mql5.com/ru/users/fxsaber">
  • www.mql5.com
Показывает тиковую ценовую историю (Bid/Ask) внутри всех видимых баров.
 

 Вот пример 

Мне необходимо наложить поверх индикатора ZoomPrice другой индикатор сетка, чтобы визуально определять сколько пунктов прошла цена. Между соседними синими линиями 40 пунктов, между соседними оранжевыми линиями 200 пунктов. Мне не нужны ни какие перекрестия, только уровни сетки, которые привязаны к масштабу.  Одного взгляда достаточно, чтоб оценить обстановку.  Причем оранжевые линии в сетке это круглые числа графика, если линия находится на значении графика 1.10900, то как бы мы не изменяли масштаб, но линия не изменит своего значения. 

 

Я  попытался наложить поверх ZoomPrice индикатор сетки и привязать линии к шкале, ничего не получилось.  В коде я почти не разбираюсь. 

 

Все не нужное я закомментировал, теперь осталось сделать сетку и это будет идеально.

Масштаб по пунктам на бар устанавливается в вкладке: свойства>>общие

 

 
sober:

Я  попытался наложить поверх ZoomPrice индикатор сетки и привязать линии к шкале, ничего не получилось.  В коде я почти не разбираюсь. 

Все не нужное я закомментировал, теперь осталось сделать сетку и это будет идеально.

Горизонтальную сетку сделать можно, повесив на этот графический объект соответствующий индикатор. Но это, скажем так, совсем не тривиально для человека, кто в коде не разбирается.

Масштаб по пунктам на бар устанавливается в вкладке: свойства>>общие

ZoomPrice - это единственный индикатор за 16-и летнюю историю MQ, который позволяет делать ЛЮБОЙ уровень масштаба. Т.е. не шесть четко заданных масштабов, а какие угодно. Для этого потребовалось пойти на некоторые нестандартные решения (именно по этой причине у объекта отсутствует горизонтальная шкала). И именно из-за этих нестандартных решений ZoomPrice обладает некоторыми ограничениями, не позволяющими определенные виды индикаторов накладывать на объект (это не касается горизонтальной сетки). И задание иного вида масштаба - это надо думать уже мне. Я так и не понял, что такое "масштаб по пунктам на бар", даже прочтя Справку.

 

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

 

Скиньте ссылку на индикатор с горизонтальной сеткой. Посмотрим, что можно придумать.

 
fxsaber:


 

Скиньте ссылку на индикатор с горизонтальной сеткой. Посмотрим, что можно придумать.

Индикатор  https://www.mql5.com/ru/code/14916  
PriceGrid
PriceGrid
  • голосов: 17
  • 2016.02.29
  • Nikolay Kositsin
  • www.mql5.com
Индикатор строит ценовую сетку из округленных на несколько порядков уровней.
Причина обращения: