English Deutsch 日本語 Português
preview
Estrategia de Bill Williams con y sin otros indicadores y predicciones

Estrategia de Bill Williams con y sin otros indicadores y predicciones

MetaTrader 5Ejemplos | 8 octubre 2024, 09:48
293 0
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

Introducción

Bill Williams es un reconocido trader, escritor y psicólogo de los EE. UU., que ha ganado reconocimiento por sus contribuciones al trading y al análisis financiero. A lo largo de su vida comercial, ha desarrollado indicadores y varias estrategias comerciales que han sido utilizadas por numerosos comerciantes.

Bill Williams tiene un doctorado en Psicología. Quizás por eso estudió el sentimiento del mercado. Por lo tanto, se puede implementar un enfoque extendido con un script de análisis de sentimientos que utilice IA para calificar el sentimiento de los comerciantes al rastrear mercados web, como plataformas de redes sociales. Al final del artículo habrá un ejemplo de análisis de sentimiento aplicado a las noticias del mercado.

La formación psicológica de Bill Williams le ayudó a adaptar los conceptos psicológicos al trading. Estudió los mercados desde una perspectiva humana, tratando de comprender cómo las emociones afectan a los traders y sus operaciones. Teniendo una visión holística del mercado, Bill Williams pensaba que el mercado era caótico y que los mercados debían estudiarse y negociarse teniendo esto en cuenta. Para estudiar el mercado, sugirió ciertos indicadores, que estudiaremos en este artículo.

Esta es una imagen del EA con los indicadores y osciladores que vamos a utilizar:

Osciladores e indicadores de Bill Williams

La imagen muestra tres indicadores: el indicador Alligator, el Awesome Oscillator (AO) y los Fractales. Todos estos indicadores juntos reflejan el comportamiento humano y el mercado caótico.


El indicador Alligator (Caimán)

El indicador Alligator se elabora con tres medias móviles; la mandíbula (Jaw, línea azul), los dientes (Teeth, línea roja) y los labios (Lips, línea verde). Este indicador está diseñado para identificar las fases de sueño y vigilia, refleja el comportamiento humano ya que el mercado tiene series en las que está dormido (baja actividad), seguidas de una serie en la que se despierta (intensa actividad). Los mercados tienen fases de consolidación seguidas de fases de tendencia. Alligator ayuda a identificar cuándo el mercado está dormido para no realizar operaciones, ya que los operadores obtienen beneficios de la alta volatilidad del mercado.

En la fase de baja actividad, el Indicador Alligator tiene sus líneas muy próximas y entrelazadas.

En la fase de alta actividad, el indicador Alligator tiene sus líneas separadas, lo que indica que se despierta y sigue una tendencia.

Dormir y despertar

Nota: Como puede ver en la imagen, la estrategia intenta conseguir una posición corta en una tendencia alcista para seguirla. También hay más posibilidades de ajustar la estrategia, puede realizar la orden cuando el indicador Alligator se cruce y cuando el AO pase de estar por debajo a por encima de 0 y consiga un recorrido más largo.

En la fase de sueño, los operadores parecen no querer operar, están a la espera de que aparezcan nuevos datos o de que surja algo que provoque una tendencia en el mercado. La fase de sueño es donde los traders no deben tomar decisiones hasta que puedan ver claramente hacia dónde se dirige el mercado. Deben estar al tanto de las direcciones del movimiento del mercado, que se hacen visibles cuando se despierta y muestra la próxima tendencia.

Entonces, en la fase de sueño, las líneas tienden a estar cerca unas de otras y moverse lateralmente. Por lo tanto, el indicador le dice que no hay tendencia y que es mejor no realizar operaciones.

Cuando las líneas comienzan a separarse, esto significa mayor actividad. Si la línea verde está sobre la roja y sobre la azul, hay una tendencia alcista; si la línea verde está debajo de la roja y debajo de la azul, significa una tendencia bajista. Ambas situaciones significan que es el momento perfecto para entrar al mercado.m

Verde == Labios (Lips)

Rojo == Dientes (Teeth)

Azul == Mandíbula (Jaw)


¿Qué tiene en común el indicador Alligator con la psicología?

Las MAs son el promedio de los precios medios (ej: 2+3 / 2 = 2.5), pero suavizando las fluctuaciones de los precios y teniendo más en cuenta los últimos precios, por lo que las fluctuaciones tienen menos peso. Esto permite tener un mejor alcance de la tendencia. Esto es muy humano, intentar ver con claridad las cosas más importantes entre el ruido existente en el mercado.


El Awesome Oscillator (AO)

AO muestra la diferencia entre la SMA de 5 periodos y una SMA de 34 periodos utilizando los puntos medios de ((Alta + Baja )/ 2).

La diferencia de dos SMA con dos periodos diferentes muestra el impulso del mercado: la SMA corta mide los impulsos o cambios rápidos del mercado, y la SMA larga mide las tendencias. Esto es similar a lo que ocurre con los humanos, que tienen impulsos cortos y a largo plazo tienen una tendencia.

El impulso: El AO mide la fuerza del impulso del mercado, un AO positivo significa un impulso positivo y uno cruzado al negativo lo opuesto.



Los fractales

Los fractales, según la definición de Bill Williams, son una serie de cinco velas que tienen requisitos específicos para ser clasificados como fractales alcistas o bajistas.

  • Un fractal alcista es aquel que tiene un mínimo más bajo que los mínimos de las dos barras anteriores y los mínimos de las dos barras siguientes.
  • Un fractal bajista es lo opuesto; tiene un máximo más alto que los máximos de las dos barras anteriores y los máximos de las dos barras siguientes.

Los fractales identifican posibles puntos en los que el mercado puede cambiar de dirección. La psicología detrás de los fractales es que reflejan puntos clave de soporte y resistencia. Los comerciantes identifican estos puntos para anticipar cambios de dirección basándose en el comportamiento colectivo de los participantes del mercado.

Williams pensaba que los mercados financieros eran sistemas caóticos influenciados por el comportamiento humano. Pensaba que los participantes en el mercado se comportan a partir de emociones y comportamientos psicológicos, que crean patrones que parecen aleatorios pero que tienen bases estructurales subyacentes que son identificables.

Al aplicar la psicología a sus indicadores, ayudó a los traders a comprender las emociones humanas como la esperanza, el miedo, la avaricia y otras, que afectan las decisiones en el trading. Las tendencias y consolidaciones reflejan la psicología humana de períodos de actividad y relajación.

Vamos con la estrategia utilizada. En el primer código, haremos uso de fractales, AO y el indicador Alligator.

Las condiciones para realizar una compra se muestran a continuación (muy claro en el código). Recuerde, [0] es el lugar real en ese instante y [1] es la posición menos 1:

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

Las condiciones de venta son las siguientes:

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

Como ejemplo de estrategias basadas en los indicadores de Bill Williams, podemos utilizar cruces de AO de positivo a negativo y viceversa. Puedes probar más posibilidades y modificar el código como quieras. Deje un comentario en la discusión del artículo si logró obtener resultados mucho mejores durante los mismos períodos utilizados en el Probador de estrategias de MetaTrader 5.


Las condiciones para el cierre de las órdenes son las siguientes.

Para posiciones de compra:

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

Para posiciones de venta:

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

El código completo está disponible en el archivo Bill Williams Strategy.mq5 adjunto al artículo.

Aquí comparto los resultados que recibí en el probador.

Utilicé las siguientes entradas y configuraciones:

Configuración v1

Entradas v1

Gráfico v1

Prueba retrospectiva v1


Ok, estos resultados no se ven muy buenos, pero esta estrategia parece funcionar en otros períodos de tiempo, así que mantendremos esta estrategia e intentaremos obtener mejores resultados agregando otros indicadores o/y agregando predicciones.

¿Cómo evolucionaría esta estrategia si utilizáramos ADX en ella? Con ADX, debería "ver" mejores patrones de tendencia, así que veamos qué tenemos que cambiar:

 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)

Ahora los resultados son:

Gráfico v6

Sigue mal. Veamos si utilizamos paradas basadas en ATR.

Gráfico v6 con ATR

Prueba retrospectiva v6 ATR


Bueno, esto parece estar mejor. Ahora bien, ¿qué pasa si utilizamos aprendizaje profundo y predicciones? Veamos los resultados:

Grafico v7 con Stop Loss y DL

Backtesting v7 con Stop Loss y DL

Tenga en cuenta que el modelo utiliza 120 valores como pasos, por lo tanto, al menos reharía el modelo cada 120 días. Por lo tanto, los resultados pueden ser mejores si el modelo se actualiza con los últimos días.

La estrategia utiliza períodos de tiempo de 8 horas y el modelo ONNX está configurado para valores de 1 día. Por lo tanto, recuerda que al cambiar el script debes aplicar períodos 1D a lo que sea necesario. 

Con optimizaciones al aplicar predicciones de aprendizaje profundo, tenemos los siguientes resultados generales, y casi todos parecen bastante buenos:

Optimización

Como se puede ver en este gráfico, casi todas las optimizaciones dan un Sharpe positivo, esto significa que la estrategia es muy confiable y funciona bien.

 

Optimizado

Gráfico optimizado

Tenga en cuenta que utilizamos el periodo de 8 horas para todas las pruebas y simulaciones, pero utilizamos un periodo de 1 día para las predicciones. El objetivo de esto es tener una predicción no muy lejana ni muy pronto, para que podamos entrar en tendencias. Si utilizas predicciones demasiado lejanas, igualmente entrarás en tendencias, pero no en tendencias cortas, por lo que tendrás menos órdenes en la prueba, y eso no es útil para saber si toda la estrategia es buena o no. Para los Stop Loss utilizamos el ATR. También agregamos ADX a la estrategia.

¿Qué podemos ver en esta versión optimizada del EA?

  • La estrategia es rentable con un beneficio neto total de 847,70 $ y un factor de beneficio elevado de 3,85, lo que indica que la estrategia gana bastante más dinero en las operaciones ganadoras que el que pierde en las perdedoras.
  • El factor de recuperación de 4,59 sugiere que la estrategia puede recuperarse de las pérdidas con relativa rapidez.
  • Tanto el AHPR como el GHPR son 1,0000, lo que indica que no hay desviación significativa en los rendimientos medio y geométrico.
  • El ratio de Sharpe de 3,52 es bastante fuerte, lo que sugiere unos buenos rendimientos ajustados al riesgo.
  • Los porcentajes de reducción de saldo y patrimonio son muy bajos, lo que implica un riesgo mínimo de pérdidas significativas.
En general, la estrategia parece estar funcionando bien, manteniendo la rentabilidad con un riesgo controlado.



¿Qué usaremos para hacer los modelos ONNX?

Utilizaremos el script recurrente de Python que siempre uso para esta serie de artículos. Se adjunta al final del artículo. Sólo tenemos que modificar el símbolo y, si sabemos lo que estamos haciendo, podemos modificar el periodo de tiempo u otras cosas.

También adjuntaré el modelo utilizado, para que podáis reproducir mis resultados.

Además, adjuntaré otro script .py para crear modelos ONNX con correlación y métricas, para saber si el modelo es correcto para utilizar. Los resultados de este script están aquí:

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

Con un R2 del 97 % y una correlación de prueba del 98,9 %, ahora sabemos que podemos utilizar este modelo en el asesor experto.

Estas estadísticas significan que, por ejemplo, con una correlación del 98,9 %, el modelo tiene una precisión de predicción al probar 1 error contra 99 predicciones buenas. El R2 del 97 % es el coeficiente de determinación, que es la medida estadística de la proporción de varianza sobre la variable dependiente (en este caso los precios de cierre) que es explicada por la variable independiente (el modelo). En otras palabras, R2 expresa qué tan bien se ajustan los valores de la predicción del modelo en comparación con los valores de los precios reales.

Un buen resultado para R2 es 85%, y un buen resultado para correlación es 95%. Cualquier valor superior se considera un buen resultado, pero debe tener cuidado de evitar el sobreajuste.


Si quieres saber más sobre Bill Williams, te recomiendo leer algunos de sus mejores libros, como:

  • "Trading Chaos" (1995): Este es uno de sus mejores y más conocidos libros, donde introduce la teoría del caos en los mercados financieros y explica los indicadores que hemos utilizado en este artículo y cómo pueden ser utilizados como oportunidades para saber puntos donde invertir en trading.
  • "New Trading Dimensions: How to Profit from Chaos in Stocks, Bonds, and Commodities" (1998): Este libro profundiza en sus métodos y explica estrategias más complejas y avanzadas. Presenta sus indicadores y muestra cómo utilizarlos y combinarlos para obtener un mejor enfoque de las señales comerciales.
  • "Trading Chaos: Maximize Profits with Proven Technical Techniques" (Segunda edición, 2004):Esta es una actualización de su libro original e incluye nuevas estrategias y un nuevo enfoque basado en su experiencia y comentarios adicionales de traders que han utilizado sus técnicas.
También impartió seminarios y cursos que podéis encontrar en internet.


Ejemplo de análisis de sentimiento de noticias de mercados

Consideremos ahora un análisis de sentimiento de las noticias del mercado usando un ejemplo en Python.

Primero debes instalar estas bibliotecas para Python:

pip install requests beautifulsoup4 textblob

Cree un nuevo script de Python y copie y pegue este código:

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.")

Esto extrae las noticias de Investing.com, lee los títulos y analiza los datos, otorgando una puntuación. Todos los comunicados de prensa se suman y terminan dando una puntuación total de los artículos, por lo que, con esto, puedes ver cómo se siente el mercado sobre un símbolo y eso te puede dar una idea de si está durmiendo, está en una tendencia o está despertando.

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


Conclusión

Aunque la estrategia de Bill Williams es conocida por ser más rentable que lo que podemos ver en esta prueba, hemos logrado obtener mejores resultados con algunas modificaciones y añadiendo predicciones de deep learning con otro periodo. Al agregar predicciones a la estrategia, logramos hacerla más estable y reducir los errores al intentar saber si es alcista o bajista. Con el ADX agregado, ayudamos al EA a tomar decisiones para las tendencias a largo plazo, y al agregar ATR logramos tomar mejores decisiones con los riesgos del lote.

Este no es un EA completo, por lo que si quieres o necesitas comerciar con él, deberás terminarlo o pedirle a alguien, por ejemplo en el apartado/sección Freelance de esta web, para que lo termine.

A continuación, estudiaré las estrategias y trataré de llevarlas al siguiente nivel, si es posible, utilizando otros indicadores o incluso deep learning. Si esto te parece interesante, házmelo saber y dame tu opinión sobre este artículo u otros que quieras conocer.

Probablemente haré otro artículo con los indicadores de Bill Williams utilizando las estrategias de su segundo libro:"New Trading Dimensions: How to Profit from Chaos in Stocks, Bonds, and Commodities" (1998). Avísame si te parece interesante o si quieres que se implementen otras cosas en el EA.

Además, si quieres un artículo sobre una estrategia específica, házmelo saber escribiéndome o dejando un comentario en las discusiones del artículo. Tarde o temprano, crearé un artículo de este tipo (si los editores también lo consideran interesante).

Espero que le haya gustado este artículo.


Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/14975

Aprendizaje automático y Data Science (Parte 23): ¿Por qué LightGBM y XGBoost superan a muchos modelos de IA? Aprendizaje automático y Data Science (Parte 23): ¿Por qué LightGBM y XGBoost superan a muchos modelos de IA?
Estas técnicas avanzadas de árboles de decisión potenciados por gradiente ofrecen un rendimiento y una flexibilidad superiores, lo que las hace ideales para el modelado financiero y el comercio algorítmico. Aprenda a aprovechar estas herramientas para optimizar sus estrategias comerciales, mejorar la precisión predictiva y obtener una ventaja competitiva en los mercados financieros.
Añadimos un LLM personalizado a un robot comercial (Parte 3): Entrenando tu propio LLM utilizando la CPU Añadimos un LLM personalizado a un robot comercial (Parte 3): Entrenando tu propio LLM utilizando la CPU
Con el rápido desarrollo de la inteligencia artificial actual, los modelos de lenguaje (LLM) son una parte importante de la inteligencia artificial, por lo que deberíamos pensar en cómo integrar LLM potentes en nuestro trading algorítmico. Para la mayoría de las personas, es difícil ajustar estos poderosos modelos según sus necesidades, implementarlos localmente y luego aplicarlos al comercio algorítmico. Esta serie de artículos abordará paso a paso cómo lograr este objetivo.
Obtenga una ventaja sobre cualquier mercado (Parte II): Predicción de indicadores técnicos Obtenga una ventaja sobre cualquier mercado (Parte II): Predicción de indicadores técnicos
¿Sabía que podemos obtener más precisión pronosticando ciertos indicadores técnicos que prediciendo el precio subyacente de un símbolo negociado? Únase a nosotros para explorar cómo aprovechar esta información para mejorar las estrategias de negociación.
Algoritmo de optimización Brain Storm - Brain Storm Optimization (Parte II): Multimodalidad Algoritmo de optimización Brain Storm - Brain Storm Optimization (Parte II): Multimodalidad
En la segunda parte del artículo pasaremos a la aplicación práctica del algoritmo BSO, realizaremos tests con funciones de prueba y compararemos la eficacia de BSO con otros métodos de optimización.