Предыдущие работы автора по визуализации известны и интересны.
Идея учитывать спред при построении индикаторов - совершенно правильная, так как это важный параметр цены, который почему-то не учитывается в классических индикаторах.
Что касается индикатора ZigZag, даже в вашем варианте, то на рисунках (визуализация) ясно видно, что тренд (если я правильно понял- зелёная линия) иногда имеет критическое запаздывание.
Причина в том, что если уж использовать тренд в качестве критерия торговли (иначе для чего индикатор ZigZag), то надо учитывать не только спред, но и факторы динамики, и прежде всего - амплитуду обратных выбросов (учитывать при построении тренда). Впрочем, это ошибка традиционного анализа вообще в определении трендов.
Интересно посмотреть результаты теста вашего советника (вероятно мы их увидим в продолжениях к статье).
Статья полезная, как всегда наглядная визуализация. Спасибо автору за работу.
ZigZag позволяет находить абстракции любого уровня сложности.
В следующей статье будут показаны примеры, как это можно использовать.
low_ask_buffer[i] =low[i]+(spread[i]*_Point);
По реальным тикам прогоните для сравнения.
fxsaber:
Боюсь, это неверно
low_ask_buffer[i] =low[i]+(spread[i]*_Point);
По реальным тикам прогоните для сравнения.
Согласен. Не факт, что минимальный спред был именно тогда, когда цена bid достигала своего минимального уровня.
А в исторических данных (в барах) содержится именно минимальный спред.
Значит нужно получать реальные тики - CopyTicks(), и определять минимальную разницу (ask-bid) на минимальном bid минимальный ask (Low Ask).
Вы это хотели сказать?
Согласен. Не факт, что минимальный спред был именно тогда, когда цена bid достигала своего минимального уровня.
А в исторических данных (в барах) содержится именно минимальный спред.
Значит нужно получать реальные тики - CopyTicks(), и определять минимальную разницу (ask-bid) на минимальном bid минимальный ask (Low Ask).
Вы это хотели сказать?
Наверное, CopyTicks - дороговато для такого. Проще просто по реальным тикам гнать и строить ЗигЗаг по тикам. Честно говоря, не понимаю, почему Вы решили зацепиться за индикаторное исполнение ЗЗ... Визуализация при написании ТС все равно не нужна.
Когда-то выкладывал ровно такой же ЗЗ прямо в советнике. Работает быстро, а больше, наверное, ничего и не нужно.
Если нужно, чтобы был реальный Low Ask, то добавьте вот такой код в индикатор.
Внешний параметр для включения режима:
input bool RealTicksMode =false; // Real ticks mode
Метод для получения минимального ask из реальных тиковых данных:
//+------------------------------------------------------------------+ //| Возвращает минимальную ask-цену из тиковых данных | //+------------------------------------------------------------------+ double GetLowAsk(const int i,const datetime &time[]) { //--- Выйти, если отключен режим реальных тиков if(!RealTicksMode) return(0.0); //--- Исключаем последний (текущий) бар if(i>=g_rates_total) return(0.0); //--- MqlTick ticks[]; double low_ask =0.0; datetime end_time =time[i]+PeriodSeconds(); //--- Получим тики в указанном диапазоне int copied_total=CopyTicksRange(_Symbol,ticks,COPY_TICKS_ALL,(ulong)time[i]*1000,(ulong)end_time*1000); if(copied_total>0) { low_ask=ticks[0].ask; for(int k=1; k<copied_total; k++) { if(ticks[k].ask<low_ask) low_ask=ticks[k].ask; } } //--- return(low_ask); }
//---
Если минимальный ask не получен, то используется минимальный спред.
//+------------------------------------------------------------------+ //| Заполняет индикаторные буферы High Bid и Low Ask | //+------------------------------------------------------------------+ void FillAskBidBuffers(const int i,const datetime &time[],const double &high[],const double &low[],const int &spread[]) { //--- Выйти, если не дошли до начальной даты if(time[i]<first_date) return; //--- Получим минимальный ask из тиковых данных double low_ask=GetLowAsk(i,time); //--- Сохраним значения high_bid_buffer[i] =high[i]; low_ask_buffer[i] =(low_ask>0)? low_ask : low[i]+(spread[i]*_Point); }
Результат:
Честно говоря, не понимаю, почему Вы решили зацепиться за индикаторное исполнение ЗЗ...
Для изучения и исследований.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья ZigZag всему голова (Часть I). Разработка базового класса индикатора:
Многие исследователи не уделяют должного внимания определению характера поведения цены. При этом используются сложные методы, которые очень часто являются просто «чёрными ящиками», такие как: машинное обучение или нейронные сети. В таких случаях самым важным является такой — «Какие данные подать на вход для обучения той или иной модели?»
Обычно индикаторы типа ZigZag строятся по максимумам и минимумам баров без учёта спреда. В этой статье будет показана модифицированная версия, когда спред будет учитываться в построении сегментов для нижних экстремумов ZigZag’а. Предполагается, что в торговой системе сделки будут осуществляться внутрь ценового канала. Это важно, так как очень часто бывает (например, в ночное время), что цена покупки (ask) существенно превышает цену продажи (bid), поэтому строить индикатор только по bid-ценам в данном случае будет неправильно. Ведь нет смысла строить нижние экстремумы индикатора по минимумам баров, если нет возможности осуществить покупку по этим ценам. Конечно же, спред можно учитывать в торговых условиях, но лучше, когда сразу на графике всё будет видно. Это упростит разработку торговой стратегии, так как всё изначально будет более правдоподобным.
Кроме этого, хотелось бы видеть все точки, на которых экстремумы ZigZaga’а обновлялись. Тогда картина будет ещё более полной. Далее рассмотрим код этого индикатора. Остановимся только на основных моментах и функциях.
Автор: Anatoli Kazharski