
Стратегия Билла Вильямса с индикаторами и прогнозами и без них
Введение
Билл Вильямс — известный трейдер, писатель и психолог из США, получивший признание за свой вклад в торговлю и финансовый анализ. Он разработал индикаторы и различные торговые стратегии, которые используются множеством трейдеров.
Билл Вильямс имеет докторскую степень по психологии. Возможно, именно поэтому он изучал настроения рынка. С помощью скрипта мы можем реализовать расширенный подход к анализу настроений с применением ИИ для оценки настроений трейдеров, включая исследование социальных сетей. В конце статьи будет приведен пример анализа настроений, примененного к рыночным новостям.
Изыскания Билла Вильямса в области психологии помогли ему адаптировать психологические концепции к торговле. Он изучал рынки с человеческой точки зрения, пытаясь понять, как эмоции влияют на трейдеров и их торговлю. Исследователь считал, что рынок хаотичен и это нужно учитывать в торговле. Для изучения рынка он предложил индикаторы, которые мы рассмотрим в этой статье.
Ниже приведено изображение советника с индикаторами и осцилляторами, которые мы будем использовать:
На изображении показаны три индикатора: Аллигатор, 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, прикрепленном к статье.
Здесь я делюсь результатами, которые я получил в тестере.
Я использовал следующие входные данные и настройки:
Результаты не слишком обнадеживающие, но эта стратегия, похоже, работает и на других временных периодах, поэтому мы сохраним ее и попытаемся улучшить результаты, добавив другие индикаторы и/или добавив прогнозы.
Как бы развивалась эта стратегия, если бы мы использовали с ней 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)
Теперь результаты следующие:
Всё еще плохо. Давайте используем стопы на основе ATR.
Уже лучше. Используем глубокое обучение и прогнозирование. Посмотрим на результаты:
Имейте в виду, что модель использует 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





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Спасибо за попытку улучшить эту торговую методику.
Чем-то похожа система 3 8 trap, которая торгует провалы 3 EMA в 8 EMA во время восходящих трендов 20 EMA, и торгует отскоки 3 EMA в 8 EMA во время нисходящих трендов 20 EMA.
Я получаю очень похожую кривую эквити, как в первом тестовом отчете, который вы показали в своей статье.
Большая часть моей текущей работы связана с использованием хеджей в качестве метода снижения риска вместо стоп-лоссов, а затем с возможностью вовремя продать хедж так, чтобы все сделки хеджа и сделки оригинальной стратегии были проданы как прибыльные позиции. Регрессия к среднему - основной метод, с помощью которого мы пытаемся это сделать.
Очень интересно. Спасибо за публикацию.
Я присмотрюсь к попыткам добавить дополнительные технические торговые фильтры.
Для справки: 3/8 Trap:
Большое спасибо за это информативное обсуждение/обучение. я новичок в этом деле и хотел бы узнать гораздо больше.
с уважением,
Геррит
Большое спасибо за это информативное обсуждение/обучение. я новичок в этом деле и хотел бы узнать гораздо больше.
с уважением,
Геррит
Спасибо! Всегда пожалуйста! В MQL5 Articles у вас есть с чего начать.
Большая часть моей текущей работы связана с использованием хеджей в качестве метода снижения риска вместо стоп-лоссов, а затем с возможностью вовремя продать хедж так, чтобы все сделки хеджа и сделки оригинальной стратегии могли быть проданы как прибыльные позиции. Регрессия к среднему - основной метод, с помощью которого мы пытаемся это сделать.
Очень интересно. Спасибо за публикацию.
Я присмотрюсь к попытке добавить дополнительные технические торговые фильтры.
Для справки: 3/8 Trap:
Спасибо, пожалуйста!
Существует более 9 миллионов комбинаций! Если принять во внимание таймфреймы .... более 90 миллионов... Я предпочитаю добавлять DL.
Отличная работа, которую вы делаете! С наилучшими пожеланиями!