Esta estrategia revela el sentimiento del mercado comparando los cambios de precios con el volumen y lo presenta en un formato MACD para generar señales comerciales.
La estrategia utiliza principalmente los siguientes métodos para revelar el sentimiento del mercado:
El cambio de precio por volumen de cada barra muestra directamente la fuerza de las fuerzas de compra y venta.
Aplicar promedios móviles exponenciales al cambio de precio y al volumen por separado, luego dividir la EMA del cambio de precio por la EMA del volumen.
Aplicar EMAs rápidas y lentas en
El cruce del histograma por encima de 0 indica un aumento del sentimiento alcista, mientras que el cruce por debajo de 0 indica un aumento del sentimiento bajista.
La estrategia tiene las siguientes ventajas:
Utiliza la información del volumen para juzgar el sentimiento del mercado, más convincente.
El formulario MACD es intuitivo y fácil de usar.
Parámetros personalizables para diferentes productos y plazos.
Puede detectar divergencias en el histograma para encontrar posibles inversiones de tendencia.
Estructura de código clara, fácil de entender y optimizar.
La estrategia también presenta los siguientes riesgos:
El volumen refleja el sentimiento, pero no garantiza señales correctas.
La configuración incorrecta de los parámetros MACD puede causar señales perdidas o falsas.
Las divergencias pueden ser señales falsas, incapaces de confirmar inversiones de tendencia, por lo que deben interpretarse con cuidado.
El riesgo de entrada tardía y quedarse atrapado. Puede esperar a que se produzca un stop loss o validar con las tendencias y productos relacionados.
La estrategia se puede optimizar en los siguientes aspectos:
Prueba de combinaciones de parámetros en diferentes productos y plazos para encontrar parámetros óptimos.
Añadir un stop loss para reducir el riesgo de pérdida.
Combinar con las tendencias de precios de los productos relacionados para validar las señales.
Utilice el aprendizaje automático para optimizar dinámicamente los parámetros.
Añadir filtros para reducir las señales falsas, por ejemplo, tendencias de mayor plazo, volatilidad, etc.
La estrategia juzga el sentimiento del mercado comparando el cambio de precio y el volumen, y genera señales en un formato MACD. Considerando el volumen además del precio puede determinar con mayor precisión la fuerza de los compradores y vendedores. Los parámetros se pueden optimizar para diferentes productos y plazos, con un potencial de optimización adicional. En general, la estrategia tiene una idea novedosa, fácil de usar, captura eficazmente el impulso del mercado y vale la pena un mayor desarrollo.
/*backtest start: 2023-10-13 00:00:00 end: 2023-11-12 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © dannylimardi //@version=4 strategy("Sentiment Oscillator", "Sentiment", overlay=false, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.08) //Inputs msLen = input(49, type=input.integer, title="Market Sentiment Lookback Length") emaLen1 = input(40, type=input.integer, title="Fast EMA Length") emaLen2 = input(204, type=input.integer, title="Slow EMA Length") signalLen = input(20, type=input.integer, title="Signal Length") showMs = input(false, type=input.bool, title="Show Market Sentiment?") showHist = input(true, type=input.bool, title="Show Momentum?") showMacd = input(false, type=input.bool, title="Show MACD Line?") showSignal = input(false, type=input.bool, title="Show Signal Line?") showCpv = input(false, type=input.bool, title="(Show Change/Volume for Each Bar?)") showEma1 = input(false, type=input.bool, title="(Show Fast EMA?)") showEma2 = input(false, type=input.bool, title="(Show Slow EMA?)") //Calculations priceChange = close - close[1] changePerVolume = (priceChange/volume) * 10000000 // (The 1000000 doesn't have any significance, it's just to avoid color-change errors when the values are too emall.) priceChangeEma = ema(priceChange, msLen) volumeEma = ema(volume, msLen) marketSentiment = priceChangeEma/volumeEma * 100000000 msEma1 = ema(marketSentiment, emaLen1) msEma2 = ema(marketSentiment, emaLen2) macd = msEma1-msEma2 signal = ema(macd, signalLen) hist = macd-signal //Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 //Drawings plot(showHist ? hist : na, title="Histogram", style=plot.style_area, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)), transp=0 ) plot(showMacd ? macd : na, title="MACD", color=col_macd, transp=0) plot(showSignal ? signal : na, title="Signal", color=col_signal, transp=0) plot(showCpv ? changePerVolume : na, color=changePerVolume > changePerVolume[1] ? color.teal : color.red) plot(0, color=color.white, transp=80) plot(showEma1 ? msEma1 : na, color=color.aqua) plot(showEma2 ? msEma2 : na, color=color.yellow) plot(showMs ? marketSentiment : na, color=color.lime) //Strategy strategy.entry("Buy", strategy.long, when=crossover(hist, 0)) strategy.close("Buy", when=crossunder(hist, 0))