Обсуждение статьи "Горизонтальные диаграммы на графиках MеtaTrader 5"

 

Опубликована статья Горизонтальные диаграммы на графиках MеtaTrader 5:

Задачи по отрисовке горизонтальных диаграмм на графике терминала не часто, но встречаются разработчику. Что это за задачи? Это индикаторы распределения объемов за какой то определенный период. Задачи по распределению цены, различные стаканы и т.п. В статье рассмотрены вопросы создания и управления горизонтальными диаграммами на графиках, как массивами графических примитивов.

  1. Диаграмм может быть несколько (как правило, именно так и есть).
  2. Диаграммы, которые нас интересуют,  в подавляющем большинстве случаев столбчатого типа.
  3. Столбцы диаграммы располагаются по горизонтали.

Посмотрим на достаточно распространенном примере, как могут выглядеть такие диаграммы:



Еще один пример. Те же диаграммы, но отрисованные другими графическими примитивами:


В данном случае это индикатор распределения тиковых объемов по дням. На этом примере достаточно ясно видно, какие задачи пришлось решать разработчику:

  • Создавать множество графических объектов, присваивать им уникальные имена и располагать их на графике.
  • Масштабировать и передвигать объекты при необходимости.
  • Удалять их с графика при окончании работы индикатора.

И еще раз заметим, что диаграмм несколько, что в дальнейшем даст нам возможность говорить о массиве диаграмм.

Еще один, заключительный пример:

Автор: Andrei Novichkov

 

Почему включаемый файл придумали размещать в директории с индикаторами

#include "HDiagsE.mqh"

, а не в папке Include?


При закачке с сайта включаемый файл открывается в папке Include - пришлось заменить строку в индикаторе с

#include "HDiagsE.mqh"

на 

#include <HDiagsE.mqh>
 
Vladimir Karputov:

Чтобы новички не заморачивались с директориями, а просто кинули все файлы в папку с индикатором. Как видите, архив не предусматривает структуры папок распаковки.

 
Alexey Kozitsyn:

Чтобы новички не заморачивались с директориями, а просто кинули все файлы в папку с индикатором. Как видите, архив не предусматривает структуры папок распаковки.

Так именно новички и попадутся на этом. По шагам: клик на включаемом фале - он скачался и отобразился внизу браузера - клик по скачанному файлу - файл открылся в редакторе MetaEditor (И MetaEditor УЖЕ ПОМЕСТИЛ включаемый файл в ПРАВИЛЬНУЮ директорию include).

 
Vladimir Karputov:

Так именно новички и попадутся на этом. По шагам: клик на включаемом фале - он скачался и отобразился внизу браузера - клик по скачанному файлу - файл открылся в редакторе MetaEditor (И MetaEditor УЖЕ ПОМЕСТИЛ включаемый файл в ПРАВИЛЬНУЮ директорию include).

Вы правда считаете, что так, как скачиваете Вы, скачивают и все остальные? Я, например, сначала скачал архив, потом открыл файл индикатора, посмотрел, что включаемый файл в кавычках. И метаэдитор ничего никуда у меня не помещал.

В общем, бесполезный диалог. Можно и так, и эдак, это не то, что нужно обсуждать.

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

Если честно, хотелось бы увидеть иную реализацию. Абсолютно всего:

1. Нет реализации рисования гистограмм на канвасе (соответственно, и нет сравнения скорости обновления диаграмм на канвасе и диаграмм из граф. примитивов). Хотя, по логике, если Вы пишите про горизонтальные гистограммы на графиках МТ5, то хотя бы должны указать на этот метод построения;

2. Почему говорите только про тиковые объемы? Мне, например, очень бы хотелось применить Ваш индикатор для реальных объемов, но, похоже, я не смогу!?

3. Насколько я понял, все диаграммы строятся к привязке "цена/время". Никаких упоминаний о пиксельной привязке. И реализации гистограмм на этой основе;

4. По вот этой фразе есть вопрос: "Ранее было вскользь упомянуто, что для вычислений количества уровней будет использован лучший способ, чем просто разбиение ценового интервала на заданное количество уровней". Почему он лучший? 1, 10 и 100? Почему не дать пользователю самому задать количество уровней?

5. По поводу таймера: 

  • Параметр iTimer содержит частоту срабатывания таймера. При срабатывании проверяется создания новых свечей и выполняются необходимые действия. Можно было бы здесь поместить результат вызова PeriodSeconds(SourcePeriod). Однако по умолчанию стоит одна секунда, что сделано в целях более точного определения момента появления новых свечей.

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

6. При прокрутке графика с диаграммой вылезают артефакты:


7. Нет упоминания того, что все это дело будет работать на новых билдах (после 1881) т.к. используются новые i-функции;

8. Код совсем не закомментирован - полное неуважение к тем, кто будет пытаться доработать Ваш код под себя. Если просто открыть файлы без статьи - куча времени уйдет, чтобы во всем разобраться;

9. При компиляции файлов индикаторов - вылазит предупреждение. У пользователей могут возникнуть вопросы;

10. "Не стоит забывать, что прилагаемые индикаторы предназначены для демонстрационных, учебных целей и не могут быть применены в реальной торговле." - интересная особенность. В самом конце. Почему не могут быть применены?

11. "В частности, следует обратить внимание на то, что на тайфрейме, который используется как источник данных, не должно быть артефактов." - тоже хотелось бы услышать пояснения по этому поводу. Про какие "артефакты" идет речь;

12. Чуть не забыл самое главное. А как гарантируется корректность собранных данных? CopyTicks() Вы не используете. Как тогда происходит валидация корректности построенных уровней?

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

В общем, ИМХО, неудачная реализация для обучающей статьи. Новичкам будет тяжеловато, а бывалые свое быстрее (и лучше) напишут.

 

Попытаюсь ответить сразу на все ))

Конечно, статья вряд ли предложит что то принципиально новое опытным разработчикам. Предложенный код, в меру моего понимания и способностей, автоматизирует очень нудный процесс построения вот таких диаграмм. Я решил это сделать после того, как замучился отлавливать всякие ошибки с выходом за пределы диапазона и т.д.

Можно было положить включаемый файл и в include, но решил не забивать эту папку, ведь все норовят именно туда и положить включаемые файлы)

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

Тиковые объемы взяты для примера. Для кода важно передать пару массивов и все. К примеру, я буду использовать этот код для изготовления стакана для ряда криптобирж.

Почему нет пиксельной привязки. Это как раз в сторону канваса. А почему нет канваса, я ответил.

Почему код не закомментирован. Он БЫЛ закомментирован, но для использования совместно с Doxygen. Пришлось убрать. И пришлось бы комментировать на английском, код же автоматически не переводится, а в этом я не силен. Пользоваться гуглом не самый лучший вариант, что он там напереводит?

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

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

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

 
Andrei Novichkov:

Попытаюсь ответить сразу на все ))

Получается Вы написали "абстрактную штуку", которая работает приближенно, да еще и в среде, которой на практике не существует. Нет слов. 

Да и отрисовка, как я указал выше - кривая. Очень хороший пиар для ваших продуктов.

 
Alexey Kozitsyn:

Получается Вы написали "абстрактную штуку", которая работает приближенно, да еще и в среде, которой на практике не существует. Нет слов. 

Да и отрисовка, как я указал выше - кривая. Очень хороший пиар для ваших продуктов.

Нет, не получается.

И если нет слов, не нужно писать. Вы определенно не до конца понимаете, о чем пишите.

 
Andrei Novichkov:

Нет, не получается.

И если нет слов, не нужно писать. Вы определенно не до конца понимаете, о чем пишите.

На этом закончил писать. Может быть не до конца понимаю, просто под таким громким названием мне бы хотелось видеть гораздо большего, чем есть. Удачи.