
Esta estratégia revela o sentimento dos participantes do mercado através da comparação de mudanças de preços e volume de transações, apresentando e emitindo sinais de negociação na forma de MACD.
A estratégia é baseada em cálculos que revelam o sentimento do mercado:
A variação do preço de cada linha K dividida pelo volume de transação. Isso mostra diretamente a força de compra e venda.
Aplicando a média móvel suave do índice à mudança de preço e ao volume de transações, divide o EMA de mudança de preço pelo EMA de volume de transações. Assim, pode-se filtrar parte do ruído e obter uma curva de curva de emoção de mercado de carvão mais suave.
Em uma barra de emoções do mercado de criptomoedas, calcula-se uma EMA rápida e lenta, obtendo uma curva semelhante à MACD. A linha MACD mostra a direção e a intensidade do movimento, a linha de sinal é a sua média móvel e o gráfico em coluna mostra o diferencial entre as duas curvas, representando a mudança de movimento.
Quando o gráfico de coluna usa 0 em cima, é um sinal de aumento da emoção do mercado de múltiplos cabeças, e quando o gráfico de coluna usa 0 em baixo, é um sinal de aumento da emoção do mercado de cabeças vazias. Também pode ser observado o fenômeno de desvio do gráfico de coluna.
A estratégia tem as seguintes vantagens:
A utilização de informações sobre volume de transações para avaliar a emoção dos participantes do mercado é mais convincente.
O formato MACD é intuitivo e fácil de usar.
Os parâmetros são ajustáveis para diferentes variedades e períodos.
Os gráficos de coluna podem ser detectados para detectar possíveis pontos de mudança de tendência.
A estrutura do código é clara, fácil de entender e de otimizar.
A estratégia também apresenta os seguintes riscos:
O volume de transação pode refletir o sentimento do mercado, mas não garante que os sinais de negociação sejam corretos.
A configuração incorreta dos parâmetros do MACD pode causar sinais errados ou gerar falsos sinais. Os parâmetros devem ser otimizados para variedades e períodos.
O sinal de desvio pode ser falso, não é possível determinar a reversão da tendência e deve ser visto com cautela.
Existe o risco de entrada tardia ser encaixada. Pode ser apropriado esperar para rastrear o stop loss, ou verificar razoavelmente com tendências e variedades relevantes.
Esta estratégia pode ser melhorada nos seguintes aspectos:
Testing combinações de parâmetros de diferentes variedades e períodos, procurando o parâmetro ideal.
Adotar estratégias de stop loss para reduzir o risco de perdas.
Combinação com tendências de preços de variedades relevantes para verificar sinais de negociação.
Parâmetros de otimização dinâmica usando métodos de aprendizagem de máquina.
Aumentar as condições de filtragem e reduzir os falsos sinais, como tendências de grande escala, oscilações, etc.
Esta estratégia utiliza a variação do preço e o valor da relação entre o volume de transações para avaliar o sentimento do mercado e gerar sinais de negociação na forma de MACD. Em comparação com apenas a informação de preços, o volume de transações pode determinar com mais precisão o contraste de força e o calor do mercado. Pode ser otimizado de acordo com diferentes variedades e parâmetros de ciclo, e há espaço para otimização 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))