Estrategia del indicador del sentimiento del mercado de impulso

El autor:¿ Qué pasa?, Fecha: 2023-11-13 17:51:20
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

La estrategia utiliza principalmente los siguientes métodos para revelar el sentimiento del mercado:

  1. El cambio de precio por volumen de cada barra muestra directamente la fuerza de las fuerzas de compra y venta.

  2. 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.

  3. Aplicar EMAs rápidas y lentas en sentimiento del mercado para obtener líneas similares al MACD. La línea MACD muestra la dirección y la fuerza del impulso, la línea de señal es su promedio móvil, y el histograma muestra su diferencia, representando el cambio de impulso.

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.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Utiliza la información del volumen para juzgar el sentimiento del mercado, más convincente.

  2. El formulario MACD es intuitivo y fácil de usar.

  3. Parámetros personalizables para diferentes productos y plazos.

  4. Puede detectar divergencias en el histograma para encontrar posibles inversiones de tendencia.

  5. Estructura de código clara, fácil de entender y optimizar.

Análisis de riesgos

La estrategia también presenta los siguientes riesgos:

  1. El volumen refleja el sentimiento, pero no garantiza señales correctas.

  2. La configuración incorrecta de los parámetros MACD puede causar señales perdidas o falsas.

  3. Las divergencias pueden ser señales falsas, incapaces de confirmar inversiones de tendencia, por lo que deben interpretarse con cuidado.

  4. 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.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Prueba de combinaciones de parámetros en diferentes productos y plazos para encontrar parámetros óptimos.

  2. Añadir un stop loss para reducir el riesgo de pérdida.

  3. Combinar con las tendencias de precios de los productos relacionados para validar las señales.

  4. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros.

  5. Añadir filtros para reducir las señales falsas, por ejemplo, tendencias de mayor plazo, volatilidad, etc.

Conclusión

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

Más.