Советники: Эквиобъемные графики (EqualVolumeBars)

 

Эквиобъемные графики (EqualVolumeBars):

Эксперт создает эквиобъемные графики из тиковой истории.

Author: Andrey Khatimlianskii

 

EqualVolumeBars, как и Tick Save, после обновления терминалов МТ4 до 600-й версии и выше не работает. Даже на график из «Навигатора» не перетаскивается. Компилятор выдаёт 3 ошибки и одно замечание. Уважаемый автор, внесите, пожалуйста, нужные исправления в код.

Файлы:
 
fedorsych:

EqualVolumeBars, как и Tick Save, после обновления терминалов МТ4 до 600-й версии и выше не работает. Даже на график из «Навигатора» не перетаскивается. Компилятор выдаёт 3 ошибки и одно замечание. Уважаемый автор, внесите, пожалуйста, нужные исправления в код.

https://www.mql5.com/ru/forum/39393/page3#comment_1431547
 

В коде для M1 не учтен вариант, когда в одном баре больше тиков, чем заданный размер эквиобъемного бара. Должно быть что-то вроде:

 while ( IsNewBar() )

{   WriteToFile( HistoryHandle, now_time, now_open, now_low, now_high, now_close, TicksInBar );   cnt_bars++;   now_volume -= TicksInBar;   now_time++; }

time тут затесался, потому что сохранять реальное время в барах очень полезно, а проблема недопущения баров с одинаковым временем решается просто - при проверке на совпадение эквиобъемных баров по их времени достаточно в новом баре прибавлять 1 (1 секунду).

При генерации кастом-таймфрейма лучше не использовать TicksInBar, а ввести отдельный входной параметр. Дело в том, что, опять-таки при сохранении реального врменеи, очень удобно включать на чарте разделители периодов, а МТ4 почему-то - то ли из-за бага, то-ли так задумано - когда видит очень большой период, типа 250 (в нашем случае тиков), пропускает большинство разделителей дат (тупо не рисует их, хотя даты на оси меняются). Если же выбрать небольшой таймфрейм, например, 3 - все отображается правильно.

 
Stanislav Korotky:

В коде для M1 не учтен вариант, когда в одном баре больше тиков, чем заданный размер эквиобъемного бара. Должно быть что-то вроде:

time тут затесался, потому что сохранять реальное время в барах очень полезно, а проблема недопущения баров с одинаковым временем решается просто - при проверке на совпадение эквиобъемных баров по их времени достаточно в новом баре прибавлять 1 (1 секунду).

При генерации кастом-таймфрейма лучше не использовать TicksInBar, а ввести отдельный входной параметр. Дело в том, что, опять-таки при сохранении реального врменеи, очень удобно включать на чарте разделители периодов, а МТ4 почему-то - то ли из-за бага, то-ли так задумано - когда видит очень большой период, типа 250 (в нашем случае тиков), пропускает большинство разделителей дат (тупо не рисует их, хотя даты на оси меняются). Если же выбрать небольшой таймфрейм, например, 3 - все отображается правильно.

Спасибо за конструктив!

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

2. Время бара + 1 секунда - тоже плохой вариант. МТ когда-то боролся с ненормализованным до минут временем. Сейчас не знаю.

3. Разделители периодов для крупных ТФ (типа 250) не работают потому что нечего разделять ;)
Они ведь расчерчивают дни, а если ТФ = 250 минут, то чертить придется каждый 4-й бар.

 
Andrey Khatimlianskii:

Спасибо за конструктив!

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

2. Время бара + 1 секунда - тоже плохой вариант. МТ когда-то боролся с ненормализованным до минут временем. Сейчас не знаю.

3. Разделители периодов для крупных ТФ (типа 250) не работают потому что нечего разделять ;)
Они ведь расчерчивают дни, а если ТФ = 250 минут, то чертить придется каждый 4-й бар.

1. Для М1 "большой" бар приходится делить по одной и той же цене - от этого никуда не деться. Но это намного лучше, чем вообще "зажевывать" несколько эквиобъемных баров.

2. Работает на ура.

3. Факт, что некоторые разделители для того же М250 МТ4 все-таки показывает, а некоторые пропускает. Неоднозначно, поэтому на мой взгляд это баг. Потом, разделитель по определению завязан на даты, а не циферку в таймфрейме.

 
Stanislav Korotky:

1. Для М1 "большой" бар приходится делить по одной и той же цене - от этого никуда не деться. Но это намного лучше, чем вообще "зажевывать" несколько эквиобъемных баров.

2. Работает на ура.

3. Факт, что некоторые разделители для того же М250 МТ4 все-таки показывает, а некоторые пропускает. Неоднозначно, поэтому на мой взгляд это баг. Потом, разделитель по определению завязан на даты, а не циферку в таймфрейме.

1. Чем лучше?
Хотя, вопрос, скорее, риторический. Я эквиобъемные графики не анализирую, поэтому и пользы в них особой не вижу. Само понятие объема на форексе очень сомнительно.

2. Замечательно, пусть будет.

3. Разделители должны быть кратны чему-нибудь. Иначе будет хаотичный набор линий, а не периоды.
Имхо, дело именно в этом. 

 

Согласен, что подходы могут быть разными. Но раз уж есть декларация, что бары содержат равные объемы и берут их из графика, то не дело какое-то количество объемов пропускать по приниципу "переполнения бара". Это потеря информации.

Разделители НЕ обязаны быть чему-то кратными. Разделители отделяют друг от друга разные даты или недели. Как известно, количество баров в дне или неделе может быть разным.

 

Эквиобъемный график EURUSD 500 тиков с разделителями

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

 

Кстати, наткнулся на неприятную особенность, из-за которой мой индикатор не смог нормально работать на сгенерированном эквиобъемном графике.

Несмотря на то, что в заголовок hst-файла пишется текущее количество знаков после запятой (Digits), при использовании нестандартного префикса (в EqualVolumeBars это "!Eqv"), МетаТрейдер чихает на заголовок и выводит символ с 4 знаками. Это, кстати, видно и в приложенном выше скриншоте (сервер - пятизнаковая демка MQ).

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

Если это глюк МТ4, я напишу в СД. Какие будут мнения? 

 
Stanislav Korotky:

Кстати, наткнулся на неприятную особенность, из-за которой мой индикатор не смог нормально работать на сгенерированном эквиобъемном графике.

Несмотря на то, что в заголовок hst-файла пишется текущее количество знаков после запятой (Digits), при использовании нестандартного префикса (в EqualVolumeBars это "!Eqv"), МетаТрейдер чихает на заголовок и выводит символ с 4 знаками. Это, кстати, видно и в приложенном выше скриншоте (сервер - пятизнаковая демка MQ).

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

Если это глюк МТ4, я напишу в СД. Какие будут мнения? 

Там важно, чтоб символ в заголовке совпадал с символом в названии файла. Возможно, в этом проблема.