Алгоритм ЗигЗага одновременно по OHLC-барам Bid и Ask

 

Речь пойдет о ЗигЗаге всего с одним входным параметром - размер колена не меньше N (пипсов или процентов - не суть важно). Для удобства назовем множество точек ЗигЗага через ZZ(N).

Очевидно, если строить ЗигЗаг по тиковым данным, где вершинки будут браться из значения Bid-цены, а низинки - Ask-цены, то будет верно следующее утверждение:

N <= M равносильно (необходимо и достаточно) ZZ(M) является подмножеством ZZ (N). Т.е. при увеличении N множество ZZ(N) редеет - уменьшается количество точек, при этом новые не появляются.

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

 

И все бы хорошо, если бы всегда имелась тиковая история. Прогнал на истории ZZ(0), отфильтровав > 90% ненужной рыночной информации. А дальше вместо ценовых рядов используй ZZ(0).

Но проблемы возникают, когда исходные ценовые данные  - не тики (Bid и Ask), а OHLC-бары (Bid и Ask). Дело в том, что утверждение (см. выше жирным шрифтом) перестает работать.

 

Поясню на примере. Беру исходные ценовые ряды и строю ZZ(0) и ZZ(10). И получаю, что ZZ(10) содержит точки, которых нет в ZZ(0). Это обстоятельство вызвано тем, что в OHLC-представлении истории теряется информация последовательности изменения цен.

Сам так и не придумал алгоритм, который бы на OHLC-данных  (обязательно Bid и Ask) создавал ЗигЗаг с обозначенным выше правильным свойством. Возможно, кто-то решал подобное и расскажет, как выкрутился. Решение "забить" уже имеется...

 

Прочел хорошую статью по ЗигЗагам. Отметил для себя замечательное обобщение "овершотов" (определение автора):

Овершот = (P[i] – P0)/(P0-P[i-1])

Здесь P[i-1] и P[i] – цены двух последовательных вершин ЗигЗага, а P0 – цена между вершинами, отвечающая моменту смены тенденции (= появления нового колена).

Не задумывался раньше о таком сравнительном критерии ЗигЗагов любой природы. Прикинул - действительно, разумно.

По ряду причин бОльший интерес представляют варианты ЗигЗага с как можно меньшим овершотом... Уместно натравить критерий на различные варианты ЗЗ (хотябы для самообразования).

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

 
Еще один интересный критерий сравнения "правильности зигзага" - https://www.mql5.com/ru/market/product/2257
 
YOUNGA:
Еще один интересный критерий сравнения "правильности зигзага" - https://www.mql5.com/ru/market/product/2257

Спасибо, внимательно прочел и посмотрел исходники упомянутого там HZZ.

HZZ идентичен тому ЗЗ, что описан в начале топика.

К сожалению, описание SmartZZ и критерий сравнения на приведенных там графиках не сумел понять.

Сделать SmartZZ vs HZZ по овершот-критерию сейчас невозможно - отсутствуют записи P0 (из формулы). Исходники также недоступны.

 
методика предложенная  smartzz следующая  - у него каждое следующее колено какбы связанно с предыдущим и поэтому если откладывать по X Y координатам предыдущее и последующее колено по должно получится поле значений ввиде наклонной линии, при обычном зигзаге получится просто облако (взаимосвязи между коленами нет)
 
Логики SmartZZ не знаю
 

 

 посмотри сову Скриптонга (ZZ статистика) на базе стандартного zz

на тестах при некоторых значениях колена, ТФ и  паре - грааль

берутся n последних колен ZZ, выводится макс, мин и средний размер колена

Вход не дожидаясь окончания текущего колена, когда размер превысил среднее значение

мин - профит

макс - стоп лосс 

 
YOUNGA:
методика предложенная  smartzz следующая  - у него каждое следующее колено какбы связанно с предыдущим и поэтому если откладывать по X Y координатам предыдущее и последующее колено по должно получится поле значений ввиде наклонной линии, при обычном зигзаге получится просто облако (взаимосвязи между коленами нет)

Спасибо за разъяснение. Метод интересный, но показывает зависимость только от предыдущего колена. И, к сожалению, совсем отсутствует упоминание P0-точек смены тенденции. А это архиважно. Иначе получается почти самообман: строим на истории замечательный ЗигЗаг и исследуем его. Учитывание же P0-точек не позволяет обмануться так в оценке предсказательной способности.

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

 
poruchik:

 

 посмотри сову Скриптонга (ZZ статистика) на базе стандартного zz

на тестах при некоторых значениях колена, ТФ и  паре - грааль

берутся n последних колен ZZ, выводится макс, мин и средний размер колена

Вход не дожидаясь окончания текущего колена, когда размер превысил среднее значение

мин - профит

макс - стоп лосс 

Да, это одна из первых ЗЗ-систем, что почти сразу приходит в голову каждому, кто умеет писать ТС, т.к. присутствует хоть какой-то намек на адаптивность.
 
hrenfx:

Речь пойдет о ЗигЗаге всего с одним входным параметром - размер колена не меньше N (пипсов или процентов - не суть важно). Для удобства назовем множество точек ЗигЗага через ZZ(N).

Очевидно, если строить ЗигЗаг по тиковым данным, где вершинки будут браться из значения Bid-цены, а низинки - Ask-цены, то будет верно следующее утверждение:

N <= M равносильно (необходимо и достаточно) ZZ(M) является подмножеством ZZ (N). Т.е. при увеличении N множество ZZ(N) редеет - уменьшается количество точек, при этом новые не появляются.

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

 

И все бы хорошо, если бы всегда имелась тиковая история. Прогнал на истории ZZ(0), отфильтровав > 90% ненужной рыночной информации. А дальше вместо ценовых рядов используй ZZ(0).

Но проблемы возникают, когда исходные ценовые данные  - не тики (Bid и Ask), а OHLC-бары (Bid и Ask). Дело в том, что утверждение (см. выше жирным шрифтом) перестает работать.

 

Поясню на примере. Беру исходные ценовые ряды и строю ZZ(0) и ZZ(10). И получаю, что ZZ(10) содержит точки, которых нет в ZZ(0). Это обстоятельство вызвано тем, что в OHLC-представлении истории теряется информация последовательности изменения цен.

Сам так и не придумал алгоритм, который бы на OHLC-данных  (обязательно Bid и Ask) создавал ЗигЗаг с обозначенным выше правильным свойством. Возможно, кто-то решал подобное и расскажет, как выкрутился. Решение "забить" уже имеется...

Следующее по тривиальности решение это генерить больший ЗЗ из меньшего.

Более навороченное решение - доопределить мелкий ЗЗ. Проблема потери информации возникает в тех случаях когда размах свечи ТФ на котором генерируется ЗЗ (М1) больше чем размер колена. При этом возникает неоднозначность в построении ЗЗ. Если колено ЗЗ больше размаха самой большой свечи - для него и бОльших ЗЗ ваше утверждение должно выполняться, я думаю. 

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

 
loopsider:

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

Абсолютно точно.

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

Обдумываю различные алгоритмы. Спасибо за вариант!
Причина обращения: