English 中文 Español Deutsch 日本語 Português
preview
Стратегия Билла Вильямса с индикаторами и прогнозами и без них

Стратегия Билла Вильямса с индикаторами и прогнозами и без них

MetaTrader 5Примеры | 14 октября 2024, 12:26
1 598 4
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

Введение

Билл Вильямс — известный трейдер, писатель и психолог из США, получивший признание за свой вклад в торговлю и финансовый анализ. Он разработал индикаторы и различные торговые стратегии, которые используются множеством трейдеров.

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

Изыскания Билла Вильямса в области психологии помогли ему адаптировать психологические концепции к торговле. Он изучал рынки с человеческой точки зрения, пытаясь понять, как эмоции влияют на трейдеров и их торговлю. Исследователь считал, что рынок хаотичен и это нужно учитывать в торговле. Для изучения рынка он предложил индикаторы, которые мы рассмотрим в этой статье.

Ниже приведено изображение советника с индикаторами и осцилляторами, которые мы будем использовать:

Осцилляторы и индикаторы Билла Вильямса

На изображении показаны три индикатора: Аллигатор, Awesome Oscillator (AO) и фракталы. Все они в совокупности отражают поведение человека и хаотичную природу рынка.


Индикатор Аллигатор

Индикатор Аллигатор состоит из трех скользящих средних: челюстей (синяя линия), зубов (красная линия) и губ (зеленая линия). Индикатор предназначен для определения фаз сонливости и бодрствования, он отражает поведение человека, поскольку на рынке есть серии, когда рынок спит (низкая активность), за которыми следует серия, когда он просыпается (высокая активность). На рынках есть фазы консолидации, за которыми следуют фазы тренда. Аллигатор помогает определить, когда рынок спит, чтобы не совершать сделки в этот период.

В фазе низкой активности линии индикатора расположены очень близко друг к другу и переплетены.

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

сон и пробуждение

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

В фазе сна трейдеры не желают торговать, ожидая появления новых данных или тренда. Фаза сна — это время, когда трейдерам не следует принимать решения до тех пор, пока они не увидят ясно, куда движется рынок.

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

Когда линии начинают расходиться, это означает более высокую активность. Если зеленая линия находится над красной и синей, это означает восходящий тренд; если зеленая линия находится под красной и синей, это означает нисходящий тренд. Обе ситуации означают, что сейчас идеальный момент для выхода на рынок.

Зеленая линия == Губы

Красная == Зубы

Синяя == Челюсти


Какое отношение индикатор Аллигатор имеет к психологии?

Скользящие средние представляют собой среднее значение средних цен (например: 2+3 / 2 = 2,5), но сглаживают колебания цен и в большей степени учитывают последние цены, поэтому колебания имеют меньший вес. Это позволяет иметь лучший охват тренда. Это очень по-человечески: попытаться ясно увидеть самые важные вещи среди рыночного шума.


Awesome Oscillator (AO)

АО показывает разницу между простой скользящей средней (SMA) из 5 периодов и SMA из 34 периодов, используя средние точки ((High + Low )/2).

Разница двух простых скользящих средних с двумя разными периодами показывает импульс рынка: короткая SMA измеряет импульсы или быстрые изменения рынка, а длинная SMA измеряет тенденции. Это также похоже на поведение людей, у которых есть кратковременные импульсы, но в долгосрочной перспективе у них есть тенденция.

Импульс: АО измеряет силу импульса рынка. Положительное значение АО означает положительный импульс, а отрицательное — противоположный.



Фракталы

Фракталы, по определению Билла Вильямса, представляют собой серию из пяти свечей, которые имеют определенные требования для классификации как бычьи или медвежьи фракталы.

  • Бычий фрактал — это фрактал, минимум которого ниже минимумов двух предыдущих баров и минимумов двух последующих баров.
  • Медвежий фрактал противоположен ему - его максимум выше максимумов двух предыдущих баров и максимумов двух последующих баров.

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

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

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

Давайте рассмотрим нашу стратегию. В первом коде мы будем использовать фракталы, АО и Аллигатора.

Условия покупки показаны ниже. [0] — это фактическое место в данный момент, а [1] — это позиция минус 1:

alligatorLips[1] > alligatorTeeth[1] && alligatorTeeth[1] > alligatorJaw[1] && ao[1] > 0 && ao[1] > ao[2] && fractalsUp[1] != 0 && PositionsTotal()==0

Условия продажи:

alligatorLips[1] < alligatorTeeth[1] && alligatorTeeth[1] < alligatorJaw[1] && ao[1] < 0 && ao[1] < ao[2] && fractalsDown[1] != 0 && PositionsTotal()==0

В качестве примера стратегий, основанных на индикаторах Билла Вильямса, можно использовать пересечения АО с положительного на отрицательное и наоборот. Вы можете попробовать больше возможностей и изменить код по своему усмотрению. Пожалуйста, напишите во комментариях, если вам удалось получить гораздо лучшие результаты за те же периоды, что и в тестере стратегий MetaTrader 5.


Условия закрытия ордеров следующие.

Для позиций на покупку:

ao[0] < 0 || (alligatorLips[1] < alligatorTeeth[1] && alligatorTeeth[1] < alligatorJaw[1])

Для позиций на продажу:

ao[0] > 0 || (alligatorLips[1] > alligatorTeeth[1] && alligatorTeeth[1] > alligatorJaw[1])

Весь код доступен в файле Bill Williams Strategy.mq5, прикрепленном к статье.

Здесь я делюсь результатами, которые я получил в тестере.

Я использовал следующие входные данные и настройки:

settings v1

inputs v1

Graph v1

Backtesting v1


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

Как бы развивалась эта стратегия, если бы мы использовали с ней ADX? С ADX он должен "видеть" лучшие трендовые модели, поэтому давайте посмотрим, что нам нужно изменить:

 ADXHandle = iADX(Symbol(), Period(), 14);
   if(ADXHandle == INVALID_HANDLE)
     {
      Print("Error initializing ADX indicator: ", GetLastError());
      return INIT_FAILED;
     }
   CopyBuffer(ADXHandle, 0, 0, 3, adx);
if(alligatorLips[1] > alligatorTeeth[1] && alligatorTeeth[1] > alligatorJaw[1] && ao[1] > 0 && ao[1] > ao[2] && fractalsUp[1] != 0 && adx[1] > ADXThreshold && PositionsTotal() == 0)

Теперь результаты следующие:

graph v6

Всё еще плохо. Давайте используем стопы на основе ATR.

graph v6 with ATR

backtesting v6 atr


Уже лучше. Используем глубокое обучение и прогнозирование. Посмотрим на результаты:

graph v7 with stops and dl

backtesting v7 with stops and DL

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

Стратегия использует 8-часовые таймфреймы, а модель ONNX настроена на однодневные значения. Поэтому при изменении скрипта не забывайте применять периоды D1 к необходимым данным. 

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

оптимизация

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

 

После оптимизации

График после оптимизации

Обратите внимание, что для всех тестов и моделирования мы используем 8-часовой период, но для прогнозов мы используем однодневный период. Цель — сделать прогноз не слишком далеким и не слишком ранним, чтобы мы могли отслеживать тренды. Если вы используете слишком далекие прогнозы, вы все равно попадете в тренды, но не в краткосрочные, поэтому у вас будет меньше ордеров в тесте, а это не позволит определить, хороша ли вся стратегия или нет. Для стоп-лоссов мы используем ATR. Мы также добавили в стратегию ADX.

Что мы видим в оптимизированной версии советника:

  • Стратегия прибыльна: общая чистая прибыль составляет 847,70 USD, а коэффициент прибыли высокий — 3,85. Это говорит о том, что стратегия приносит значительно больше прибыли от прибыльных сделок, чем убытков от убыточных сделок.
  • Фактор восстановления 4,59 предполагает, что стратегия способна относительно быстро восстановиться после потерь.
  • Оба показателя AHPR и GHPR равны 1,0000, что указывает на отсутствие существенных отклонений в средней и геометрической доходности.
  • Коэффициент Шарпа 3,52 является довольно высоким, что предполагает хорошую доходность с поправкой на риск.
  • Процент просадки баланса и эквити очень низок, что подразумевает минимальный риск существенных потерь.
В целом стратегия, по-видимому, работает хорошо, обеспечивая прибыльность при контролируемом риске.



Что использовать для создания моделей ONNX?

Мы будем использовать скрипт на Python, который я всегда использую в этой серии статей. Он приложен в конце статьи. Нам просто нужно изменить символ, и если мы знаем, что делаем, мы можем изменить период времени или другие параметры.

Я также приложу использованную модель, чтобы вы могли воспроизвести мои результаты.

Кроме того, я прикреплю еще один .py-скрипт для создания моделей ONNX с корреляцией и метриками, чтобы узнать, корректна ли модель для использования. Результаты скрипта приведены ниже:

train_mse=0.000
test_mse=0.000
train_r2=0.994
test_r2=0.970
train_corr=0.997
test_corr=0.989

При R2 97% и тестовой корреляции 98,9% мы теперь знаем, что можем использовать эту модель в советнике.

Эти статистические данные означают, что, например, при корреляции 98,9%, модель имеет точность прогноза при тестировании в 1 ошибку против 99 хороших прогнозов. Коэффициент детерминации R2, равный 97%, представляет собой статистическую меру доли дисперсии зависимой переменной (в данном случае цен закрытия), которая объясняется независимой переменной (моделью). Другими словами, R2 показывает, насколько хорошо значения прогноза модели скорректированы по сравнению с реальными значениями цен.

Хороший результат для R2 составляет 85%, а хороший результат для корреляции - 95%. Любые значения выше считаются хорошими результатами, но следует проявлять осторожность, чтобы избежать переобучения.


Если вы хотите узнать больше о Билле Уильямсе, рекомендую вам прочитать некоторые из его лучших книг, например:

  • "Торговый хаос" (1995): Это одна из его лучших и самых известных книг, в которой он вводит теорию хаоса на финансовых рынках и объясняет индикаторы, которые мы использовали в этой статье, а также то, как их можно использовать в качестве возможностей для определения точек входа в торговлю.
  • "Новые измерения в биржевой торговле - Как извлечь прибыль из хаоса: рынки акций, облигаций и фьючерсов" (1998): В этой книге более подробно рассматриваются его методы и объясняются новые, более сложные и продвинутые стратегии. Автор представляет свои индикаторы и показывает, как их использовать и комбинировать, чтобы выстроить наилучший подход к торговым сигналам.
  • "Торговый хаос: максимизируйте прибыль с помощью проверенных технических приёмов" (второе издание, 2004 г.): Актуализация его оригинальной книги, включающая новые стратегии и обновленный взгляд на торговые методы, основанный на его опыте и отзывах трейдеров.
Он также проводил семинары и курсы. Записи можно найти в Интернете.


Пример анализа настроений рыночных новостей

Давайте теперь рассмотрим анализ настроений рыночных новостей на примере Python.

Сначала необходимо установить следующие библиотеки для Python:

pip install requests beautifulsoup4 textblob

Создайте новый скрипт Python, скопируйте и вставьте следующий код:

import requests
from bs4 import BeautifulSoup
from textblob import TextBlob

def get_eurusd_news():
    url = 'https://www.investing.com/currencies/eur-usd-news'
    headers = {'User-Agent': 'Mozilla/5.0'}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Encontrar todos los elementos <li> que contienen artículos de noticias
    articles = soup.find_all('li', class_='border-b')
    
    news = []
    for article in articles:
        title_tag = article.find('a', class_='mb-2 inline-block text-sm font-bold leading-5 hover:underline sm:text-base sm:leading-6 md:text-lg md:leading-7')
        
        if title_tag:
            title = title_tag.get_text(strip=True)
            news.append(title)
    
    return news

def analyze_sentiment(news):
    sentiment_results = []
    for article in news:
        analysis = TextBlob(article)
        sentiment = analysis.sentiment.polarity
        sentiment_results.append((article, sentiment))
    
    return sentiment_results

def summarize_sentiment(sentiments):
    positive = sum(1 for _, sentiment in sentiments if sentiment > 0)
    negative = sum(1 for _, sentiment in sentiments if sentiment < 0)
    neutral = len(sentiments) - positive - negative
    
    total = len(sentiments)
    summary = {
        'total': total,
        'positive': positive,
        'negative': negative,
        'neutral': neutral
    }
    
    return summary

news = get_eurusd_news()
if news:
    sentiments = analyze_sentiment(news)
    summary = summarize_sentiment(sentiments)

    for i, (article, sentiment) in enumerate(sentiments, 1):
        sentiment_type = 'Positive' if sentiment > 0 else 'Negative' if sentiment < 0 else 'Neutral'
        print(f"{i}. {article}\n   Sentiment: {sentiment_type} (Polarity: {sentiment})\n")

    print(f"Sentiment Summary: {summary}")
    print(f"Total articles: {summary['total']}, Positive: {summary['positive']}, Negative: {summary['negative']}, Neutral: {summary['neutral']}")
else:
    print("No news articles found for EUR/USD.")

Скрипт извлекает новости с Investing.com, считывает заголовки и анализирует данные, выставляя оценку. Все новостные выпуски суммируются и в конечном итоге дают общую оценку. С ее помощью вы можете увидеть, как рынок относится к символу, и это может дать вам представление о том, спит ли он, находится ли в тренде или просыпается.

1. Dollar edges lower, but on track for hefty weekly gains
   Sentiment: Neutral (Polarity: 0.0)

2. European stocks hit by weak global sentiment; UK retail sales slump
   Sentiment: Negative (Polarity: -0.125)

3. Dollar higher on US business activity boost
   Sentiment: Positive (Polarity: 0.25)

4. Dollar steadies after sharp gains post Fed minutes; sterling retains strength
   Sentiment: Negative (Polarity: -0.125)

5. European stocks largely higher; Nvidia earnings, PMI data in focus
   Sentiment: Positive (Polarity: 0.125)

6. Dollar higher against euro as Fed minutes support
   Sentiment: Positive (Polarity: 0.25)

7. Dollar steady ahead of Fed minutes, sterling gains on CPI release
   Sentiment: Positive (Polarity: 0.16666666666666666)

8. EUR/USD rally expected to persist, says BofA
   Sentiment: Negative (Polarity: -0.1)

9. Dollar firm as Fed officials urge patience on rate cuts
   Sentiment: Negative (Polarity: -0.2)

10. Dollar steady; Fed speakers could provide impetus
   Sentiment: Positive (Polarity: 0.16666666666666666)

Sentiment Summary: {'total': 10, 'positive': 5, 'negative': 4, 'neutral': 1}
Total articles: 10, Positive: 5, Negative: 4, Neutral: 1


Заключение

Хотя стратегия Билла Вильямса может быть более прибыльной, чем мы видели в нашем тесте, нам удалось улучшить результаты с помощью некоторых модификаций и добавления прогнозов глубокого обучения с другим периодом. Добавив в стратегию прогнозы, нам удалось сделать ее более стабильной и сократить количество ошибок при попытке определить направление торговли. Добавив ADX, мы помогли советнику принимать решения относительно долгосрочных трендов, а добавив ATR, нам удалось принимать более обоснованные решения относительно размеров лотов.

Этот советник не предназначен для торговли. Если вы хотите использовать его в трейдинге, вам необходимо довести его до ума или попросить кого-то сделать это зв вас, например, в сервисе "Фриланс".

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

Я, вероятно, напишу еще одну статью об индикаторах Билла Вильямса, используя стратегии из его второй книги: "Новые измерения в биржевой торговле - Как извлечь прибыль из хаоса: рынки акций, облигаций и фьючерсов" (1998). Пожалуйста, дайте мне знать, интересно ли вам это или вы хотите, чтобы в советнике было реализовано что-то другое.

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

Надеюсь, статья вам понравилась.


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/14975

Последние комментарии | Перейти к обсуждению на форуме трейдеров (4)
DHess10000
DHess10000 | 29 мая 2024 в 21:03

Спасибо за попытку улучшить эту торговую методику.

Чем-то похожа система 3 8 trap, которая торгует провалы 3 EMA в 8 EMA во время восходящих трендов 20 EMA, и торгует отскоки 3 EMA в 8 EMA во время нисходящих трендов 20 EMA.

Я получаю очень похожую кривую эквити, как в первом тестовом отчете, который вы показали в своей статье.

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

Очень интересно. Спасибо за публикацию.

Я присмотрюсь к попыткам добавить дополнительные технические торговые фильтры.


Для справки: 3/8 Trap:


Gerrit Snyman
Gerrit Snyman | 31 мая 2024 в 16:33

Большое спасибо за это информативное обсуждение/обучение. я новичок в этом деле и хотел бы узнать гораздо больше.


с уважением,

Геррит

Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera | 6 июн. 2024 в 09:36
Gerrit Snyman #:

Большое спасибо за это информативное обсуждение/обучение. я новичок в этом деле и хотел бы узнать гораздо больше.


с уважением,

Геррит

Спасибо! Всегда пожалуйста! В MQL5 Articles у вас есть с чего начать.

Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera | 6 июн. 2024 в 09:42
DHess10000 тестовом отчете, который вы показали в своей статье.

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

Очень интересно. Спасибо за публикацию.

Я присмотрюсь к попытке добавить дополнительные технические торговые фильтры.


Для справки: 3/8 Trap:


Спасибо, пожалуйста!


Существует более 9 миллионов комбинаций! Если принять во внимание таймфреймы .... более 90 миллионов... Я предпочитаю добавлять DL.

Отличная работа, которую вы делаете! С наилучшими пожеланиями!

Нейронная сеть на практике: Псевдообратная (II) Нейронная сеть на практике: Псевдообратная (II)
Поскольку эти статьи имеют образовательную цель и не направлены на то, чтобы показать реализацию конкретной функциональности, в данной статье мы поступим немного иначе. Вместо того, чтобы показывать, как применять факторизацию для получения обратной матрицы, мы сосредоточимся на факторизации псевдообратной. Причина заключается в том, что нет смысла показывать, как можно получить общий коэффициент, если мы можем сделать это особым способом. А еще лучше, если читатель сможет глубже понять, почему всё происходит именно так. Давайте теперь разберемся, почему со временем аппаратное обеспечение приходит на смену программному.
Нейросети в трейдинге: Transformer с относительным кодированием Нейросети в трейдинге: Transformer с относительным кодированием
Самоконтролируемое обучение может оказаться эффективным способом анализа больших объемов неразмеченных данных. Основным фактором успеха является адаптация моделей под особенности финансовых рынков, что способствует улучшению результативности традиционных методов. Эта статья познакомит вас с альтернативным механизмом внимания, который позволяет учитывать относительные зависимости и взаимосвязи между исходными данными.
Алгоритм оптимизации на основе искусственной экосистемы —  Artificial Ecosystem-based Optimization (AEO) Алгоритм оптимизации на основе искусственной экосистемы — Artificial Ecosystem-based Optimization (AEO)
В статье рассматривается метаэвристический алгоритм AEO, который моделирует взаимодействия между компонентами экосистемы, создавая начальную популяцию решений и применяя адаптивные стратегии обновления, и подробно описываются этапы работы AEO, включая фазы потребления и разложения, а также различные стратегии поведения агентов. Статья знакомит с особенностями и преимуществами данного алгоритма.
Нейронная сеть на практике: Псевдообратная (I) Нейронная сеть на практике: Псевдообратная (I)
Сегодня мы начнем рассматривать, как можно реализовать вычисление псевдообратной на чистом языке MQL5. Код, который мы просмотрели, будет значительно сложнее для новичков, чем хотелось бы, и я всё еще думаю над тем, как объяснить его в простой форме. Поэтому пока считайте, что это возможность изучить необычный код. Спокойно и без спешки. Несмотря на то, что он не ориентирован на эффективное или быстрое применение, его цель - быть как можно более дидактичным.