Esta estrategia construye un canal de precios basado en el indicador Bollinger Bands y el indicador Momentum Oscillating Moving Average, generando señales comerciales cuando el precio rompe el límite superior o inferior del canal.
La estrategia construye un canal de precios utilizando la banda media de Bollinger y el Promedio Móvil Oscilante de Momento. La banda media adopta la banda media de Bollinger de 21 períodos. Las bandas superior e inferior se extienden hacia arriba y hacia abajo por un rango porcentual respectivamente. El Promedio Móvil Oscilante de Momento se extiende o se contrae cerca de los niveles de sobrecompra o sobreventa basados en la banda media. Cuando el precio rompe la banda superior, vaya largo. Cuando el precio rompe la banda inferior, vaya corto.
Específicamente, la banda media de Bollinger se calcula como:
Middle Band = Moving Average of N-period closing price
La banda superior y la banda inferior se calculan como:
Upper Band = Middle Band + WidthDev * N-period Bollinger standard deviation
Lower Band = Middle Band - WidthDev * N-period Bollinger standard deviation
Donde WidthDev representa el rango de porcentaje ampliado hacia arriba y hacia abajo.
El promedio móvil oscilante de impulso se extiende o contrae en función de la banda media de acuerdo con ciertas reglas. Cuando el mercado se vuelve sobrecomprado o sobrevendido, se extiende más lejos de la banda media para proporcionar más oportunidades para ir largo o corto. Cuando el mercado se calma, se contrae hacia la banda media.
En resumen, esta estrategia representa un canal de precios utilizando bandas de Bollinger y determina el momento de entrada utilizando el promedio móvil oscilante de impulso, realizando el comercio de ruptura.
Refleja la volatilidad del mercado Las bandas de Bollinger pueden reflejar la volatilidad del mercado y las tendencias cambiantes en tiempo real.
Reduce las señales falsas El efecto de estiramiento de la media móvil oscilante de impulso puede reducir eficazmente las señales falsas generadas por las bandas de Bollinger.
La inversión de tendencia de las capturas oportunas El cruce de las bandas superiores e inferiores de BB y el promedio móvil oscilante de impulso proporciona un momento y un precio ventajosos para generar señales comerciales, que pueden capturar eficazmente los principales ajustes alcistas y bajistas y captar oportunamente las inversiones de tendencia.
Parámetros BB incorrectos Los ajustes incorrectos de los parámetros BB, como el período de cálculo y el multiplicador de la desviación estándar, pueden dar lugar a un espacio demasiado amplio o demasiado estrecho entre las bandas, generando señales falsas excesivas y socavando la estabilidad de la estrategia.
Amplitud de oscilación excesiva La amplitud de oscilación excesivamente grande de la media móvil oscilante de momento puede resultar en que los puntos de parada de pérdida estén demasiado distantes, aumentando el riesgo de pérdida.
Reversión tardía
Cuando el mercado está oscilando o sin tendencia, las señales de negociación de BB y Momentum Oscillating Moving Average pueden retrasarse, al no reflejar los cambios de precios en el tiempo, causando un riesgo de reversión tardía.
Optimización de los parámetros de BB Prueba diferentes períodos, multiplicadores de desviación estándar para encontrar combinaciones óptimas de parámetros que proporcionen una mejor frecuencia de señal y menos señales falsas.
Optimización de los parámetros de la media móvil oscilante Prueba diferentes amplitudes y períodos de oscilación para encontrar parámetros que capten mejor las tendencias y reduzcan el retraso de la señal.
Añadir condiciones de filtro Añadir filtros como volúmenes de negociación basados en señales cruzadas para excluir señales comerciales ineficientes.
Combinación de estrategias Combinar esta estrategia con otras estrategias de stop loss o estrategias de aprendizaje automático para controlar aún más los riesgos y mejorar la estabilidad.
Esta estrategia combina los puntos fuertes de las bandas de Bollinger adaptativas y el promedio móvil oscilante de impulso, logrando una integración de la tendencia siguiendo y capturando las inversiones de tendencia. Al equilibrar la volatilidad del mercado y la flexibilidad de la señal de negociación, se logra una negociación de ruptura estable y efectiva.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Hull Cloud v2 by SEASIDE420 strategy("Hull Moving Average Cloud v2", shorttitle="hull_cloud_v2", overlay=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, max_bars_back=200, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) hullperiod=input(title="HullMA Period",defval=210, minval=1) Width=input(title="Cloud Width",defval=200, minval=2) price=input(ohlc4,title="Price data") FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => true n2ma=2*wma(price,round(hullperiod/2)) nma=wma(price,hullperiod) diff=n2ma-nma sqn=round(sqrt(hullperiod)) n2ma1=2*wma(price[1],round(hullperiod/2)) nma1=wma(price[1],hullperiod) diff1=n2ma1-nma1 n1=wma(diff,sqn) n2=wma(diff1,sqn) Hull_Line=n1-n1[1]/n2[1] Hull_retracted=if(n1>n2) Hull_retracted=Hull_Line-Width else Hull_retracted=Hull_Line+Width c1=(Hull_retracted*n1)/price[1] c2=(Hull_retracted*n2)/price[1] c4=c1>c2?green:red c2p=plot(c2, color=black, linewidth=1) c3p=plot(price, color=black, linewidth=1) fill(c3p, c2p, color=c4, transp=75) plot(cross(c1, c2) ? c1 : na, style = circles,color=c4, linewidth = 4) if (price<c2) strategy.close("BUY", when=window()) if (price>c2) strategy.close("SELL", when=window()) if (price[1]>c2 and price[1]>c1) strategy.entry("BUY",strategy.long, when=window()) if (price[1]<c1 and price[1]<c2) strategy.entry("SELL",strategy.short, when=window())// /L'-, // ,'-. ` ```` / L '-, // . _,--dMMMM\ ` ` ` '`.. / '-, // : _,--, )MMMMMMMMM),. ` ,<> /_ '-,' // ; ___,--. \MM( `-' )M//MM\ ,',.; .-'* ; .' // | \MMMMMM) \MM\ ,dM//MMM/ ___ < ,; `. )`--' / // | \MM()M MMM)__ /MM(/MP' ___, \ \ ` `. `. /__, ,' // | MMMM/ MMMMMM( /MMMMP'__, \ | / `. `-,_\ / // | MM /MMM---' `--'_ \ |-' |/ `./ .\----.___ // | /MM' `--' __,- \"" |-' |_, `.__) . .F. )-. // | `--' \ \ |-' |_, _,-/ J . . . J-'-. `-., // | __ \`. | | | \ / _ |. . . . \ `-. F // | ___ / \ | `| ' __ \ | /-' F . . . . \ '` // | \ \ \ / | __ / \ | |,-' __,- J . . . . . \ // | | / |/ __,- \ ) \ / |_,- __,--' |. .__.----,' // | |/ ___ \ |'. |/ __,--' `.-;;;;;;;;;\ // | ___ \ \ | | ` __,--' /;;;;;;;;;;;;. // | \ \ |-'\ ' __,--' /;;;;;;;;;;;;;;\ // \ | | / | __,--' `--;;/ \;-'\ // \ | |/ __,--' / / \ \ // \ | __,--' / / \ \ // \|__,--' _,-;M-K, ,;-;\ // <;;;;;;;; '-;;;; // :D