Estratégia do indicador de sentimento de mercado de impulso

Autora:ChaoZhang, Data: 2023-11-13 17:51:20
Tags:

img

Resumo

Esta estratégia revela o sentimento do mercado, comparando as alterações de preços com o volume, e apresenta-o em um formato MACD para gerar sinais de negociação.

Estratégia lógica

A estratégia utiliza principalmente os seguintes métodos para revelar o sentimento do mercado:

  1. A variação do preço por volume de cada barra mostra directamente a força das forças de compra e venda.

  2. Aplicar médias móveis exponenciais à mudança de preço e volume separadamente, em seguida, dividir a EMA da mudança de preço pela EMA do volume.

  3. Aplique EMAs rápidas e lentas no sentimento do mercado para obter linhas semelhantes ao MACD. A linha MACD mostra a direção e a força do momento, a linha de sinal é sua média móvel e o histograma mostra sua diferença, representando a mudança de momento.

O histograma cruzando acima de 0 sinaliza aumento do sentimento de alta, enquanto cruzando abaixo de 0 sinaliza aumento do sentimento de baixa.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Usa informações de volume para julgar o sentimento do mercado, mais convincente.

  2. O formulário MACD é intuitivo e fácil de usar.

  3. Parâmetros personalizáveis para diferentes produtos e prazos.

  4. Pode detectar divergências no histograma para encontrar potenciais inversões de tendência.

  5. Estrutura de código clara, fácil de compreender e otimizar.

Análise de riscos

A estratégia apresenta igualmente os seguintes riscos:

  1. O volume reflete o sentimento, mas não garante sinais corretos.

  2. A configuração incorreta dos parâmetros MACD pode causar sinais perdidos ou falsos. Os parâmetros precisam ser otimizados para produtos e prazos específicos.

  3. As divergências podem ser falsos sinais, incapazes de confirmar inversões de tendência, por isso devem ser interpretadas com cuidado.

  4. Risco de entrada tardia e de ficar preso. Pode esperar por um stop loss ou validar com tendências e produtos relacionados.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Testar combinações de parâmetros em diferentes produtos e prazos para encontrar parâmetros ideais.

  2. Adicionar stop loss para reduzir o risco de perda.

  3. Combinar com as tendências de preços dos produtos relacionados para validar os sinais.

  4. Usar machine learning para otimizar dinamicamente parâmetros.

  5. Adicionar filtros para reduzir os falsos sinais, por exemplo tendências de maior prazo, volatilidade, etc.

Conclusão

A estratégia julga o sentimento do mercado comparando a mudança de preço e volume e gera sinais em um formato MACD. Considerando o volume além do preço pode determinar com mais precisão a força de compradores e vendedores. Os parâmetros podem ser otimizados para diferentes produtos e prazos, com potencial de 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))

Mais.