
Esta estrategia revela el estado de ánimo de los participantes en el mercado mediante la comparación de los cambios en los precios y el volumen de transacciones, y se presenta y emite una señal de negociación en forma de MACD.
La estrategia se basa principalmente en los siguientes cálculos para revelar el estado de ánimo del mercado:
El cambio de precio de cada línea K dividido por el volumen de transacción. Esto muestra directamente la fuerza de compra y venta.
Aplica el índice a las medias móviles suaves de los cambios en los precios y los volúmenes de transacciones, y luego divide el EMA de los cambios en los precios por el EMA de los volúmenes de transacciones. De esta manera, se puede filtrar parte del ruido y obtener una curva de fluctuación de la emoción en el mercado de las alcachofas más suave.
En la barra de la emoción del mercado de la moneda, se calcula rápidamente el EMA y se obtiene una curva similar a la MACD. La línea MACD muestra la dirección y la intensidad del movimiento, la línea de la señal es su promedio móvil y el gráfico en columnas muestra el diferencial de las dos curvas, que representan el cambio de movimiento.
Cuando el gráfico de columnas lleva 0 en la cima, es una señal de aumento de la emoción del mercado de múltiples cabezas, y cuando lleva 0 en la parte inferior, es una señal de aumento de la emoción del mercado de cabezas vacías. También se puede observar el fenómeno de desviación del gráfico de columnas.
La estrategia tiene las siguientes ventajas:
El uso de la información sobre el volumen de transacciones para evaluar el estado de ánimo de los participantes en el mercado es más convincente.
El formato del MACD es intuitivo y fácil de usar.
Los parámetros son ajustables para diferentes variedades y períodos.
Se pueden detectar desviaciones en los gráficos de columnas para detectar posibles puntos de inflexión de tendencias.
La estructura del código es clara, fácil de entender y optimizar.
También existe el riesgo de que:
El volumen de transacciones puede reflejar el estado de ánimo del mercado, pero no garantiza que las señales de transacción sean correctas.
La configuración incorrecta de los parámetros del MACD puede causar señales erradas o generar falsas señales. Se deben optimizar los parámetros para variedades y períodos.
Las señales de desviación pueden ser falsas, no se puede determinar el cambio de tendencia, y debe tomarse con precaución.
Existe el riesgo de que la entrada tardía sea cubierta. Se puede esperar apropiadamente el seguimiento de los estancamientos, o la verificación razonable con las tendencias y las variedades relacionadas.
Esta estrategia puede ser optimizada en los siguientes aspectos:
Testing combinaciones de parámetros de diferentes variedades y períodos para encontrar el parámetro óptimo.
Acompañar una estrategia de stop loss para reducir el riesgo de pérdidas.
Combinar con las tendencias de los precios de las variedades relevantes para verificar las señales de negociación.
Parámetros de optimización dinámica con métodos de aprendizaje automático.
Aumentar las condiciones de filtración y reducir las falsas señales, como las tendencias a gran escala, la volatilidad, etc.
Esta estrategia utiliza el cambio de precio y la relación entre el valor de la transacción y el sentimiento del mercado para generar señales de transacción en forma de MACD. En comparación con la información de precios, el volumen de transacciones puede determinar con mayor precisión el contraste de fuerzas aéreas y el calor del mercado. Se pueden optimizar los parámetros según diferentes variedades y períodos, y hay espacio para una optimización adicional.
/*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))