Обсуждение статьи "Создание объектно-ориентированного расчетного модуля сессионного VWAP на MQL5"

Опубликована статья Создание объектно-ориентированного расчетного модуля сессионного VWAP на MQL5:

В этой статье показано, как реализовать сессионный VWAP на MQL5 в виде пригодного для повторного использования подключаемого класса, который строго сбрасывает накопленные значения в полночь по времени брокера. Расчетный модуль вычисляет VWAP и взвешенные по объему полосы отклонения только по закрытым барам и задает временную привязку накопления с помощью MqlDateTime, чтобы избежать искажений из-за отсутствующих свечей. Вспомогательный индикатор отображает базовую линию и полосы, а советник считывает сигналы один раз на бар, что обеспечивает согласованное выполнение, экономное использование ресурсов процессора и надежное тестирование.

Разработку внутридневных торговых систем на MQL5 я обычно начинаю с добавления на график стандартной скользящей средней, которая помогает отфильтровать краткосрочный тренд. Такой подход выглядит приемлемым в периоды затишья на рынке или при торговле в узких диапазонах. Однако тестирование в реальных условиях на валютных парах с высокой ликвидностью выявляет серьезный структурный недостаток. Крупная свеча, сформировавшаяся на фоне макроэкономических новостей, может мгновенно сместить базовую линию рынка за счет объема торгов институциональных участников. Простая скользящая средняя учитывает эту свечу с большим объемом так же, как свечу с низким объемом из спокойной ночной сессии, поскольку принимает во внимание только цены закрытия. Это создает опасную ловушку для торгового робота. Советник открывает сделку на линии скользящей средней, принимая это за откат к справедливой стоимости, однако реальный ценовой ориентир, определяемый объемом торгов институциональных участников, остается далеко позади.

Причина ошибки заключается в том, что стандартные индикаторы при расчетах полностью игнорируют массивы тиковых объемов. Я хотел заменить этот традиционный подход гораздо более адаптивным решением, которое отслеживает, на каких ценовых уровнях фактически проходят сделки. Средневзвешенная по объему цена (VWAP) выполняет эту роль, взвешивая каждое колебание цены по абсолютному объему ликвидности, проторгованной на соответствующем уровне. В MQL5 нет встроенного индикатора VWAP с ежедневным сбросом и динамически пересчитываемыми полосами отклонения. Это затрудняет быструю интеграцию в автоматизированные стратегии. Мы перенесем накопительные расчеты в подключаемый файл. Затем мы нанесём базовую линию и полосы волатильности на график с помощью пользовательского индикатора для визуальной проверки. В заключение мы интегрируем этот модуль в советник для торговли на откатах.


Автор: Amanda Vitoria De Paula Pereira

Институциональные трейдеры, как правило, фиксируют свои VWAP на уровне последнего значимого максимума колебания при прогнозировании снижения и на уровне последнего значимого минимума колебания при прогнозировании роста. В этом случае полночь или любое другое конкретное время не имеют значения. Хотя выбор максимумов и минимумов, безусловно, носит субъективный характер, можно использовать индикатор ZigZag в сочетании с логикой, ожидающей подтверждения этих значений. Было бы интересно посмотреть, как это повлияет на результаты ваших тестов.
Ryan L Johnson #:
Институциональные трейдеры, как правило, фиксируют свои VWAP на уровне последнего значимого максимума колебания при прогнозировании снижения и на уровне последнего значимого минимума колебания при прогнозировании роста. В этом случае полночь или любое конкретное время не имеют значения. Хотя выбор максимумов и минимумов, безусловно, субъективен, можно использовать индикатор ZigZag в сочетании с логикой, ожидающей их подтверждения. Было бы интересно посмотреть, как это повлияет на результаты ваших тестов.
Закрепление за колебательными структурами — это надёжный макроподход, Райан. Институциональные трейдеры любят AVWAP для отслеживания длинных участков предложения. Главная ловушка при использовании механизма ZigZag заключается в задержке подтверждения, поскольку он перерисовывает исторические индексы до тех пор, пока не зафиксируется новый пик.

если ваша точка привязки сдвигается назад после закрытия бара, ваш тестер стратегий возвращает ложную кривую капитала, наполненную предвзятостью, связанной с заглядыванием в будущее; фиксированные сбросы сессии поддерживают массивы накопления без задержки и детерминированными для реальных серверов, но вставка строгой временной метки эпохи от макроэкономического новостного шока для привязки базовой линии работает отлично, не нарушая ваших расчётов по исполнению.
Amanda Vitoria De Paula Pereira #:
привязка к колеблющимся структурам — это надежный макроподход, Райан; институциональные трейдеры любят AVWAP за отслеживание длинных участков предложения; главная ловушка при исполнении с использованием алгоритма «зигзаг» заключается в задержке подтверждения, поскольку он перерисовывает исторические индексы до тех пор, пока не зафиксируется новый пик

если ваша точка привязки сдвигается назад после закрытия бара, тестер стратегий возвращает ложную кривую капитала, наполненную предвзятостью, связанной с заглядыванием в будущее; фиксированные сбросы сессии обеспечивают нулевую задержку и детерминированность массивов накопления для рабочих серверов, но подключение строгой временной метки эпохи, связанной с макроэкономическим новостным шоком, для привязки базовой линии работает отлично, не нарушая ваших расчётов по исполнению.

Спасибо. У меня есть собственный индикатор AVWAP, основанный на времени. Вы действительно подсказываете мне некоторые идеи:

  1. Некоторое время назад я преобразовал индикатор MQL4 «ZigZag без перерисовки» в MQL5 — на самом деле он просто основан на LSMA. Задержка индикатора будет приемлемой, поскольку мы всё равно не можем определять основные максимумы и минимумы колебаний в режиме реального времени.
  2. Если предположить, что макроэкономическое событие немедленно приводит к появлению на рынке крупного колебательного максимума или минимума, то привязка к этому моменту времени имеет смысл. Конечно, то же самое событие, формирующее продолжение тренда, придётся игнорировать. Возможной альтернативой могло бы стать простое привязывание к крупному бару отклонения/разворота, появляющемуся на крупном максимуме или минимуме колебания — независимо от предполагаемого фундаментального фактора, лежащего в основе этого бара.
  3. И это буквально только что пришло мне в голову 💡... возможно, объединить варианты № 1 и № 2, чтобы советник мог легко определять моменты привязки к AVWAP.
Ryan L Johnson #:

Спасибо. У меня есть свой собственный индикатор AVWAP, основанный на времени. Вы действительно подсказываете мне некоторые идеи:

  1. Некоторое время назад я преобразовал индикатор MQL4 «ZigZag без перерисовки» в MQL5 — на самом деле он просто основан на LSMA. Задержка индикатора не будет проблемой, поскольку мы и так не можем определять основные максимумы и минимумы колебаний в режиме реального времени.
  2. Если предположить, что макрособытие немедленно формирует на рынке значимый максимум или минимум колебания, то привязка к этому моменту времени имеет смысл. Конечно, то же самое событие, формирующее продолжение тренда, придётся игнорировать. Возможной альтернативой могло бы быть простое привязывание к крупному бару отклонения/разворота, появляющемуся на крупном максимуме или минимуме колебания — независимо от предполагаемого фундаментального фактора, обусловливающего появление этого бара.
  3. И это буквально только что пришло мне в голову 💡... возможно, объединить варианты № 1 и № 2, чтобы советник мог легко определять моменты привязки к AVWAP.
Ориентация на бар с отклонением и высоким объемом на уровне сглаженной LSMA полностью устраняет смещение тестера, Райан, это чистое решение проблемы; единственный трюк, который здесь нужен, — это добавление цикла временного охлаждения к фильтру ориентации; во время волатильных сессий цена может формировать три пин-бара подряд в одной и той же зоне

если твой робот сбрасывает расчёт VWAP при каждом касании фитиля, твои полосы отклонения будут постоянно сглаживаться; удержание первого действительного скачка и фиксация момента привязки на несколько часов — лучший способ безопасно миновать риск, пока ты торгуешь на откате
Amanda Vitoria De Paula Pereira #:
привязка к бару с большим объемом отклонения на сглаженном уровне LSMA полностью устраняет смещение тестера, Райан. Это чистый обходной путь, единственный трюк, который здесь нужен, — это добавление цикла временного охлаждения к привязочному триггеру; во время волатильных сессий цена может формировать три пинбара подряд в одной и той же зоне

если ваш робот сбрасывает расчёт VWAP при каждом касании тени, ваши полосы отклонения будут постоянно сглаживаться, упуская первый действительный скачок; зафиксировать время привязки на несколько часов — лучший способ безопасно миновать риск, пока вы торгуете на откате

Я согласен на 100%. Мой индикатор NRP ZigZag рисует стрелку на текущем баре при формировании отрезка, а также квадрат в истории на фактическом экстремуме. AVWAP будет перезакрепляться только на исторических квадратах NRP ZigZag. Таким образом , период ожидания, возможно, уже заложен в этом плане. Именно это я имел в виду, написав «Задержка индикатора будет допустимой...» в сообщении № 3. Мой индикатор AVWAP имеет лишь один входной параметр для ручной настройки времени закрепления — благодаря чему оба индикатора программно совместимы по принципу «подключи и работай». Конечно, подтвердить это может только тестирование.

Единственный элемент головоломки, над которым я все еще размышляю, — это анализ «квадратных баров», например, сырой объем, положительное отклонение от среднего объема, VSA, пиковые бары и/или оценка пин-баров.

Вот так...

AVWAP_ZZ_VSA

Ryan L Johnson #:

Я согласен на 100%. Мой индикатор NRP ZigZag рисует стрелку на текущем баре при формировании отрезка, а также квадрат в истории на фактическом экстремуме. AVWAP будет переориентироваться только на исторические квадраты NRP ZigZag. Поэтому в этом плане, возможно, уже предусмотрен период охлаждения. Именно это я имел в виду, написав «Задержка индикатора будет приемлемой...» в сообщении № 3. Мой индикатор AVWAP имеет лишь один временной параметр для ручной настройки времени привязки, что делает эти два индикатора программно совместимыми по принципу «plug-and-play». Конечно, подтвердить это можно только тестированием.

Единственный элемент головоломки, над которым я все еще размышляю, — это анализ «квадратных баров», например, сырой объем, положительное отклонение от среднего объема, VSA, пиковые бары и/или оценка пин-баров.

Эта схема графика очень наглядная, Райан. Фильтрация этих структурных квадратов с помощью VSA-пиков — определенно лучший подход в данном случае, Сам по себе сырой объем даст ложные сигналы во время всплесков на фоне новостей в периоды низкой ликвидности, но поиск массивного поглощения со стороны институциональных игроков на экстремумах сохраняет прочную базовую линию. Вы можете легко подключить вторичный фильтр волатильности для перепроверки отклонения объема; это гарантирует, что вы уловите только реальные институциональные блоки и пробьёте свой AVWAP прямо в самом центре настоящего разворота.
Amanda Vitoria De Paula Pereira #:
Этот график выглядит очень наглядно, Райан. Фильтрация этих структурных квадратов с помощью индикатора VSA Climax Churn — это, безусловно, лучший подход в данном случае, само по себе сырое значение объёма даст ложные сигналы во время новостных всплесков на сессиях с низким объёмом торгов, но поиск массивного поглощения со стороны институциональных инвесторов на экстремумах позволяет сохранить надёжную базовую линию; можно легко добавить вторичный фильтр волатильности для перепроверки отклонения объёма — это гарантирует, что вы уловите только реальные институциональные блоки и пробьёте свой AVWAP прямо в самом центре настоящего разворота
На скриншоте это видно очень слабо, но к индикатору объёма в подокне применена скользящая средняя с периодом 100.
Ryan L Johnson #:
На скриншоте это видно очень слабо, но к индикатору объема в дополнительном окне применена скользящая средняя с периодом 100.
Именно эта 100-периодная скользящая средняя на побочном окне объёма позволяет сгладить шум, Райан: она создаёт динамическую базовую линию, благодаря чему алгоритм не вводится в заблуждение небольшими всплесками объёма во время спокойных сессий; сравнение бара кульминации непосредственно с этой скользящей средней позволяет вашему коду находить реальные институциональные блоки

Если вы подключите этот фильтр для автоматического запуска вашего «времени привязки», шасси AVWAP станет абсолютно надежным; запустите быстрое моделирование на своём терминале, чтобы проверить, как кривые исполнения справляются со сдвигами на этой неделе