Estratégia de negociação quantitativa multiindicador - Estratégia de superindicador 7 em 1

SMA EMA RSI MACD
Data de criação: 2024-05-23 18:20:25 última modificação: 2024-05-23 18:20:25
cópia: 0 Cliques: 764
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa multiindicador - Estratégia de superindicador 7 em 1

Visão geral

Esta estratégia de negociação quantitativa, denominada “estratégia de superindicadores 7 em 1”, utiliza sete indicadores técnicos populares, incluindo o índice de força relativa (RSI), o índice de dispersação de convergência de médias móveis (MACD), o índice aleatório (Stochastic), as faixas de Bollinger (Bollinger Bands), a média móvel simples (SMA), a média móvel do índice (EMA) e o volume de transação (Volume). A estratégia visa identificar os melhores estados de sobrecompra e sobrevenda do mercado, identificando os melhores estados de venda e venda. A estratégia também possui um stop loss e um filtro baseado em tempo para otimizar a execução e o gerenciamento do risco de negociação.

Princípio da estratégia

O princípio central da estratégia é o uso integrado de vários indicadores técnicos para obter um sinal de negociação mais abrangente e confiável. Cada indicador tem seu método de cálculo exclusivo e seu ângulo de interpretação do movimento do mercado. Por exemplo, o RSI mede a velocidade e a intensidade das mudanças de preços; o MACD julga tendências com base em cruzamentos de médias móveis; o indicador aleatório determina níveis de sobrecompra e sobrevenda comparando o preço de liquidação com a faixa de preços em um determinado período; e a faixa de Brin estabelece um trajeto de baixa de acordo com a volatilidade dos preços.

A estratégia julga integralmente a intensidade do sinal de vários indicadores, definindo um limiar. Quando os indicadores atingem certas condições combinadas, um sinal de compra e venda é gerado. Ao mesmo tempo, a estratégia também considera outras informações do mercado, como volume de transação, para confirmar a movimentação dos preços. Além disso, a estratégia inclui medidas de gerenciamento e otimização de risco, como stop loss e filtragem de período de negociação, para controlar o risco ao mesmo tempo em que se aproveita a oportunidade.

Análise de vantagens

A principal vantagem da estratégia de super indicadores 7 em 1 reside na sua abrangência e flexibilidade. Considerando vários indicadores em conjunto, a estratégia é capaz de verificar sinais de mercado de diferentes ângulos, aumentando a probabilidade de gerar oportunidades de negociação confiáveis. Mesmo que alguns indicadores individuais emitam sinais enganosos, a estratégia ainda pode fazer o julgamento correto, desde que a maioria dos indicadores seja consistente.

Além disso, a estratégia também oferece uma ampla variedade de opções de parâmetros, que o usuário pode ajustar de acordo com suas preferências e estilo de negociação. Diferentes combinações de parâmetros podem gerar diferentes sensibilidades e frequências de sinais, adaptando-se a diferentes condições de mercado. A estratégia também possui ferramentas de gerenciamento de risco, como o Stop Loss e o filtro de período de negociação, o que aumenta ainda mais sua praticidade e controlada.

Análise de Riscos

Embora tenha muitos benefícios, a estratégia também apresenta alguns riscos potenciais. Primeiro, o desempenho da estratégia depende muito da racionalidade dos parâmetros escolhidos. A configuração inadequada dos parâmetros pode causar distorção do sinal, resultando em decisões de negociação erradas.

Além disso, em situações extremas, vários indicadores podem falhar ao mesmo tempo, levando a estratégias erradas. As estratégias também podem produzir sinais frequentemente conflitantes em mercados turbulentos, resultando em excesso de negociação e perda rápida de fundos.

Direção de otimização

Para melhorar ainda mais a robustez e o potencial de receita da estratégia, pode-se otimizar a estratégia em vários aspectos:

  1. A análise e otimização mais sistemática dos parâmetros de cada indicador para encontrar a melhor combinação de parâmetros.
  2. A introdução de mais indicadores não-preços, como os indicadores de sentimentos, indicadores fundamentais, etc., para ampliar a perspectiva da estratégia.
  3. Para aprofundar a lógica de stop-loss, configure uma proporção de stop-loss dinâmica ou adote um stop-loss móvel.
  4. Considerações sobre eventos específicos (como a publicação de dados econômicos importantes) são incluídas na filtragem do período de negociação.
  5. A segunda confirmação dos sinais gerados pela estratégia, como o desempenho do indicador em vários períodos de tempo.

Através dessas otimizações, a estratégia pode aumentar ainda mais sua capacidade de lidar com um ambiente de mercado complexo e, ao mesmo tempo, manter uma vantagem, trazendo um retorno mais robusto para os usuários.

Resumir

Em geral, a estratégia de super indicadores 7 em 1 é uma estratégia de negociação quantitativa robusta e concebida de forma abrangente. Ele combina habilmente sete indicadores técnicos comuns, capta o pulso do mercado de vários ângulos e fornece sinais de compra e venda confiáveis para os comerciantes.

No entanto, o desempenho da estratégia ainda é influenciado por fatores como a escolha de parâmetros, o ambiente de mercado e outros, e os comerciantes precisam ajustá-los com base em sua própria experiência e resultados de feedback. Com a introdução de mais dimensões de indicadores, a otimização da lógica de stop-loss e o refinamento da filtragem do período de negociação, a estratégia deve melhorar ainda mais sua resistência ao risco e seu potencial de lucro.

Código-fonte da estratégia
/*backtest
start: 2024-04-22 00:00:00
end: 2024-05-22 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Super Indicator 7 in 1', shorttitle='Super Indicator 7 in 1', overlay=true, initial_capital=100, pyramiding=0, default_qty_value=10000, default_qty_type=strategy.cash)

// Defining indicator parameters
show_plots = input(false, title="Show Plots", group="Visibility")
show_indicators = input(false, title="Show Indicators", group="Visibility")
show_trades = input(true, title="Show Trades", group="Visibility")
show_labels = input(false, title="Show Labels", group="Visibility")
start_hour = input.int(0, title="Start Hour (24h format)", group="Time-Based Filter", minval=0, maxval=24)
end_hour = input.int(24, title="End Hour (24h format)", group="Time-Based Filter", minval=0, maxval=24)
stop_trading = input(false, "Stop Trading", group="Time-Based Filter")
trade_time = (hour >= start_hour and hour <= end_hour)
bgcolor(trade_time and (start_hour != 0 or end_hour != 24) ? color.new(color.blue, 90) : na)

volume_length = input.int(1, title="Volume SMA Length", group="Volume", minval=1, step=1)
sma_period = input.int(50, title="SMA Period", group="Moving Averages")
ema_period = input.int(50, title="EMA Period", group="Moving Averages")
bb_length = input.int(20, title='Bollinger Bands Length', group="Bollinger Bands")
mult = input.float(2.0, title='Bollinger Bands MultFactor', group="Bollinger Bands")
src = input(close, title='Bollinger Bands Source', group="Bollinger Bands")
rsi_length = input.int(14, title='RSI Length', group="RSI")
macd_fast_length = input.int(12, title='MACD Fast Length', group="MACD")
macd_slow_length = input.int(26, title='MACD Slow Length', group="MACD")
macd_signal_length = input.int(9, title='MACD Signal Smoothing', group="MACD")
stoch_length = input.int(14, title='Stochastic Length', group="Stochastic")
smoothK = input.int(3, title='Stochastic %K Smoothing', group="Stochastic")
smoothD = input.int(3, title='Stochastic %D Smoothing', group="Stochastic")
tp_percent = input.float(0.14, title="Take Profit (%)", group="Trade Settings", minval=0.01, step=0.01) / 100
sl_percent = input.float(0.25, title="Stop Loss (%)", group="Trade Settings", minval=0.01, step=0.01) / 100

// Calculating indicators
dev = mult * ta.stdev(src, bb_length)
upper = ta.sma(src, bb_length) + dev
lower = ta.sma(src, bb_length) - dev
rsi_value = ta.rsi(close, rsi_length)
stoch_value = ta.stoch(close, high, low, stoch_length)
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
k = ta.sma(stoch_value, smoothK)
d = ta.sma(k, smoothD)
sma = ta.sma(close, sma_period)
ema = ta.ema(close, ema_period)
volume_ma = ta.sma(volume, volume_length)
volume_condition = volume >= volume_ma

// Signal definitions(-10%, Normal, +10% and ! failed indicator)
min_buy_signal = rsi_value < 33 and rsi_value > 30 and stoch_value < 22 and stoch_value > 20 and low < lower and macd_line < 0 and volume_condition
min_sell_signal = rsi_value > 63 and rsi_value < 70 and stoch_value > 72 and stoch_value < 80 and high > upper and macd_line > 0 and volume_condition
buy_signal = rsi_value < 30 and stoch_value < 20 and low < lower and macd_line < 0 and volume_condition
sell_signal = rsi_value > 70 and stoch_value > 80 and high > upper and macd_line > 0 and volume_condition
max_buy_signal = rsi_value < 27 and stoch_value < 18 and low < lower and macd_line < 0 and volume_condition
max_sell_signal = rsi_value > 77 and stoch_value > 80 and high > upper and macd_line > 0 and volume_condition
buy_condition = (rsi_value < 30 ? 1 : 0) + (stoch_value < 20 ? 1 : 0) + (macd_line < 0 ? 1 : 0) + (low < lower ? 1 : 0) + (volume_condition ? 1 : 0) == 4
sell_condition = (rsi_value > 70 ? 1 : 0) + (stoch_value > 80 ? 1 : 0) + (macd_line > 0 ? 1 : 0) + (high > upper ? 1 : 0) + (volume_condition ? 1 : 0) == 4

// Plotting buy and sell signals
plotshape(show_plots and min_buy_signal, style=shape.triangleup, location=location.belowbar, color=#00ffb7, size=size.small, title="Min Buy Signal")
plotshape(show_plots and min_sell_signal, style=shape.triangledown, location=location.abovebar, color=#efa803, size=size.small, title="Min Sell Signal")
plotshape(show_plots and buy_signal and not max_buy_signal, style=shape.triangleup, location=location.belowbar, color=#004cff, size=size.small, title="Buy Signal")
plotshape(show_plots and sell_signal and not max_sell_signal, style=shape.triangledown, location=location.abovebar, color=#ffff00, size=size.small, title="Sell Signal")
plotshape(show_plots and max_buy_signal, style=shape.triangleup, location=location.belowbar, color=#1eff00, size=size.small, title="Max Buy Signal")
plotshape(show_plots and max_sell_signal, style=shape.triangledown, location=location.abovebar, color=#ff0000, size=size.small, title="Max Sell Signal")
plotshape(show_plots and buy_condition and not min_buy_signal and not buy_signal and not max_buy_signal, style=shape.triangleup, location=location.belowbar, color=#ffffff, size=size.small, title="Buy Condition")
plotshape(show_plots and sell_condition and not min_sell_signal and not sell_signal and not max_sell_signal, style=shape.triangledown, location=location.abovebar, color=#ffffff, size=size.small, title="Sell Condition")

// Plotting moving averages
plot(show_indicators ? sma : na, color=#fc0000, linewidth=2, title="SMA")
plot(show_indicators ? ema : na, color=#00aaff, linewidth=2, title="EMA")

// Crossover labels for moving averages
BullCross = ta.crossover(ema, sma)
BearCross = ta.crossunder(ema, sma)

if (show_labels)
    if (BullCross)
        label.new(bar_index, sma, color=color.green, textcolor=color.white, style=label.style_cross, size=size.huge)
    if (BearCross)
        label.new(bar_index, sma, color=color.red, textcolor=color.white, style=label.style_cross, size=size.huge)

// Calculating take profit and stop loss
long_take_profit = close * (1 + tp_percent)
long_stop_loss = close * (1 - sl_percent)
short_take_profit = close * (1 - tp_percent)
short_stop_loss = close * (1 + sl_percent)

// Opening long and short orders based on signals
if (show_trades and trade_time and not stop_trading)
    if (min_buy_signal or buy_signal or max_buy_signal or buy_condition)
        strategy.entry("Open Long", strategy.long)
        strategy.exit("TP/SL Long", limit=long_take_profit, stop=long_stop_loss)
    if (min_sell_signal or sell_signal or max_sell_signal or sell_condition)
        strategy.entry("Open Short", strategy.short)
        strategy.exit("TP/SL Short", limit=short_take_profit, stop=short_stop_loss)