
O Multi-Module Shock Market Trading System é uma estratégia de negociação quantitativa projetada especialmente para situações de choque, que combina habilmente vários indicadores técnicos, como Bollinger Bands, RSI, MACD e ADX, formando um sistema de negociação altamente adaptável. A estratégia usa um conceito de design modular, que inclui duas lógicas de negociação mutuamente independentes e mutuamente excluintes: o módulo de retorno do valor médio de confirmação dinâmica e o módulo de inversão do limite de Bollinger Bands, capaz de capturar oportunidades de retorno de preços em um ambiente de mercado de choque e apoiar a rotação.
Do ponto de vista da análise de código, o princípio central da estratégia é baseado na identificação e compreensão precisa das características do mercado de turbulência. Em primeiro lugar, a estratégia usa o indicador ADX para determinar se o mercado está em um estado de turbulência e considera os sinais de negociação apenas quando o valor do ADX está abaixo do limiar definido. Este design filtra eficazmente os falsos sinais que podem causar perdas em mercados de tendência.
Após a confirmação do estado de choque, a estratégia gera um sinal de transação através de dois módulos lógicos independentes:
Modulo de Regressão de Confirmação de Média de Energia (logia 1)Quando os preços se desviam da trajectória da faixa de Bryn, a combinação do MACD Gold/Dead Forks com o RSI confirma a direção da dinâmica, formando um sinal de fazer mais ou fazer menos. Este módulo está preocupado com a mudança de dinâmica dos preços em flutuação, quando o indicador de dinâmica mostra que pode retornar à média.
Módulo de inversão de limite da faixa de Bryn (logia 2): Quando o preço toca a faixa de Brin para baixo e há sinais de rebote, combinado com o julgamento do RSI sobre o nível de sobrecompra e sobrevenda, forma um sinal de negociação de reversão. Este módulo capta as oportunidades de reversão do preço nas áreas extremas.
No gerenciamento de negociações, a estratégia usa o stop loss ATR dinâmico para fornecer controle de risco; além disso, vários mecanismos de parada foram projetados, incluindo o stop-stop de correlação entre as bandas de Bryn Mawr e o RSI. O design mais importante é o mecanismo de reposição de posições e reposição de posições com a mesma lógica, que garante a reposição de posições entre as diferentes lógicas, rastreando com precisão a lógica de origem de cada transação, enquanto permite a reposição inteligente sob a mesma estrutura lógica, equilibrando efetivamente os riscos e os ganhos.
ModularidadeA estratégia adota uma estrutura modular, separando as diferentes lógicas de negociação, o que torna o sistema mais flexível, podendo ativar ou desativar módulos específicos individualmente de acordo com a situação do mercado, aumentando a adaptabilidade da estratégia.
Identificação precisa do estado do mercadoO indicador ADX é usado para identificar os mercados de turbulência, evitar transações desnecessárias em mercados de tendência e reduzir os sinais falsos.
Mecanismo de confirmação de múltiplos sinaisCada sinal de negociação requer a co-confirmação de vários indicadores, como a combinação de posição de preço, indicadores de energia e indicadores de oscilação, reduzindo significativamente a probabilidade de erro de julgamento.
Gestão inteligente de armazénsA principal vantagem da estratégia reside no seu inovador sistema de gestão de posições, que permite o aumento inteligente de posições em uma mesma lógica e a rejeição de posições entre diferentes lógicas, permitindo aproveitar ao máximo a situação de vantagem e evitar conflitos de sinais.
Controle de risco em vários níveisO sistema de gerenciamento de risco é formado por três elementos: o stop loss ATR dinâmico, várias estratégias de parada (stop de Brin, stop de inversão RSI) e o mecanismo de saída de inversão RSI somente em caso de lucro.
Mecanismo de confirmação de preço de fechamentoAprovado:barstate.isconfirmedO controle evita o sinal falso quando o K não está fechado, melhorando a qualidade das transações.
Apoio em visualizaçãoA estratégia fornece elementos visuais, como o canal de Brin e a linha de parada dinâmica ATR, para que os comerciantes possam ter uma visão intuitiva do estado do mercado e do funcionamento da estratégia.
A concussão identifica o risco de erroApesar do uso do indicador ADX para identificar mercados de turbulência, ainda pode haver erros no julgamento do estado do mercado, especialmente durante a transição de uma tendência de reviravolta de turbulência, o que pode levar a sinais de negociação inadequados. A solução é ajustar o valor do ADX ou adicionar outros indicadores de confirmação de tendência, como o índice de força de tendência.
Parâmetros de dependência de otimizaçãoO desempenho da estratégia é altamente dependente da configuração de parâmetros, incluindo o ciclo de Brin, os limites do RSI, os parâmetros MACD, etc. Diferentes cenários de mercado podem exigir diferentes combinações de parâmetros. É recomendável encontrar a combinação de parâmetros ideal por meio de rastreamento de dados históricos e verificar periodicamente a eficácia dos parâmetros.
Risco de acumulação de depósitosEmbora a estratégia permita o posicionamento lógico, em condições de mercado extremas pode levar a uma concentração excessiva de posições, aumentando os prejuízos. O risco pode ser controlado através da definição de limites para o número máximo de posicionamentos e para a proporção de capital de cada posicionamento.
Risco de ruptura entre as zonas de tremor: Quando o mercado passa de uma ruptura para uma tendência, a estratégia pode enfrentar grandes perdas. Recomenda-se a adição de condições de filtro de ruptura de tendência ou o fechamento automático de todas as posições lógicas de choque após a confirmação da tendência.
Risco de atraso nos indicadoresOs indicadores técnicos, por si só, apresentam um certo atraso, o que pode levar a que o tempo de entrada ou saída não seja o ideal. Pode-se tentar introduzir indicadores mais sensíveis ou otimizar os parâmetros dos indicadores existentes, equilibrando a sensibilidade com a confiabilidade.
Parâmetros dinâmicos se adaptamAtualmente, a estratégia usa parâmetros fixos. Pode-se considerar a introdução de um mecanismo de adaptação da taxa de flutuação, ajustando os parâmetros de diferença padrão da faixa de Bryn, o ATR multiplicado, etc., de acordo com a dinâmica de volatilidade do mercado, para que a estratégia se adapte melhor a diferentes condições de mercado.
Aumentar a classificação do cenário de mercadoAlém da simples divisão de tremor/trend, pode-se dividir ainda mais os estados de mercado, como tremor fraco, tremor forte, tendência inicial, etc., configurando os parâmetros e lógica de negociação mais ótimos para cada estado de mercado.
Otimização da gestão de fundosA estratégia atual utiliza uma gestão de capital de percentagem fixa, podendo considerar-se a introdução de uma metodologia de dimensionamento de posições baseada na volatilidade, aumentando posições em ambientes de baixa volatilidade e reduzindo posições em ambientes de alta volatilidade, para otimizar o retorno ajustado ao risco.
Classificação da qualidade do sinalPode-se criar um sistema de classificação de qualidade para os sinais de negociação, com base em vários fatores (como a consistência do indicador, a posição do preço, etc.) para classificar os sinais, aumentando a posição apenas quando um sinal de alta qualidade aparece, enquanto um sinal de baixa qualidade reduz o investimento.
Otimização da estratégia de suspensãoAs estratégias atuais de suspensão são relativamente simples, e pode ser considerado a introdução de suspensão dinâmica, como a suspensão móvel baseada em ATR ou os objetivos de suspensão auto-adaptáveis à largura de banda de Brin, o que torna a suspensão mais flexível.
Aprendizagem de máquinaA introdução de algoritmos de aprendizagem de máquina, como florestas aleatórias ou máquinas vetoriais de suporte, pode melhorar a precisão da identificação do estado do mercado e da geração de sinais por meio de modelos de treinamento de dados históricos.
Adicionar filtro de tempo de transaçãoAtividade: pode ser adicionado um filtro de tempo de negociação para as características do período ativo de diferentes mercados, evitando negociações em períodos de baixa liquidez ou alta volatilidade, reduzindo o risco de deslizamento e execução.
O Multi-Modular Shock Market Trading System é uma estratégia de negociação quantitativa elaborada para capturar oportunidades de negociação em mercados em choque, através da fusão de vários indicadores tecnológicos clássicos e da adoção de ideias de design modular. Sua maior inovação é a realização de um mecanismo de recusa de posições entre posições inteligentes e posições entre diferentes lógicas sob a mesma lógica, equilibrando o potencial de ganho e o controle de risco.
Apesar de existirem riscos potenciais, como dependência de parâmetros e erro de avaliação do estado do mercado, esses riscos podem ser efetivamente controlados por meio de otimização racional de parâmetros, mecanismos de adaptação dinâmica e classificação mais precisa do ambiente de mercado. A direção de otimização futura se concentra principalmente em ajustes de parâmetros dinâmicos, gerenciamento de fundos mais refinado e introdução de tecnologias avançadas, como aprendizado de máquina, com o objetivo de aumentar ainda mais a estabilidade e a adaptabilidade da estratégia.
Em geral, esta é uma estratégia de mercado de choque perfeita em teoria e prática, adequada para ser usada como parte de um sistema de negociação quantitativa a médio e longo prazo, ou aplicada isoladamente em fases de mercado em que a turbulência é evidente. Para os comerciantes de quantidade, a estratégia fornece um bom quadro básico que pode ser personalizado e otimizado de acordo com o estilo de negociação individual e as características do mercado.
/*backtest
start: 2025-04-01 00:00:00
end: 2025-07-13 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
args: [["v_input_bool_1",false],["RunMode",1,358374]]
*/
strategy("Modular Oscillation Strategy", overlay=true, default_qty_value=10)
// =================================================================================
// Universal Indicator Parameters
// =================================================================================
bb_len = input.int(20, title="BB Period", group="Universal Indicators")//BB period
bb_stddev = input.float(2.0, title="BB Std Dev", group="Universal Indicators")//BB std dev multiplier
rsi_len = input.int(14, title="RSI Period", group="Universal Indicators")//RSI period
rsi_ma_len = input.int(14, title="RSI MA Period", group="Universal Indicators")//RSI MA period
macd_fast = input.int(12, title="MACD Fast", group="Universal Indicators")//MACD fast period
macd_slow = input.int(26, title="MACD Slow", group="Universal Indicators")//MACD slow period
macd_signal = input.int(9, title="MACD Signal", group="Universal Indicators")//MACD signal period
atr_len = input.int(14, title="ATR Period", group="Universal Indicators")//ATR period
adx_len = input.int(14, title="ADX Period", group="Universal Indicators")//ADX period
// =================================================================================
// Logic 1: Momentum Confirmed Mean Reversion
// =================================================================================
use_logic1 = input.bool(true, title="Enable Logic 1", group="Logic 1")//Enable Logic 1
adx_threshold_logic1 = input.float(40.0, "ADX Oscillation Threshold", group="Logic 1")//ADX threshold
atr_multiplier_logic1 = input.float(1.8, "ATR Stop Multiplier", group="Logic 1", step=0.1)//ATR stop multiplier
use_bb_exit_logic1 = input.bool(true, "BB Upper/Lower Exit", group="Logic 1")//Use BB exit
use_rsi_exit_logic1 = input.bool(true, "RSI MA Reversal Exit", group="Logic 1")//Use RSI exit
// =================================================================================
// Logic 2: Bollinger Band Extreme Reversal
// =================================================================================
use_logic2 = input.bool(true, title="Enable Logic 2", group="Logic 2")//Enable Logic 2
rsi_ob_logic2 = input.int(70, "RSI Overbought", group="Logic 2")//RSI overbought
rsi_os_logic2 = input.int(30, "RSI Oversold", group="Logic 2")//RSI oversold
adx_threshold_logic2 = input.float(30, "ADX Oscillation Threshold", group="Logic 2")//ADX threshold
atr_multiplier_logic2 = input.float(1.8, "ATR Stop Multiplier", group="Logic 2", step=0.1)//ATR stop multiplier
use_bb_exit_logic2 = input.bool(true, "BB Middle Exit", group="Logic 2")//Use BB middle exit
use_rsi_exit_logic2 = input.bool(true, "RSI MA Reversal Exit", group="Logic 2")//Use RSI exit
// =================================================================================
// Indicator Calculations
// =================================================================================
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bb_len, bb_stddev)//Calculate BB lines
rsi = ta.rsi(close, rsi_len)//Calculate RSI
rsi_ma = ta.sma(rsi, rsi_ma_len)//Calculate RSI MA
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)//Calculate MACD
atr = ta.atr(atr_len)//Calculate ATR
[_, _, adx_value] = ta.dmi(adx_len, adx_len)//Calculate ADX
// Market State Judgment
is_ranging_market_logic1 = adx_value < adx_threshold_logic1//Check L1 oscillation
is_ranging_market_logic2 = adx_value < adx_threshold_logic2//Check L2 oscillation
// Price and Indicator Events
price_below_bb_middle = close < bb_middle//Price below BB middle
price_above_bb_middle = close > bb_middle//Price above BB middle
price_crosses_back_above_lower = ta.crossover(close, bb_lower)//Price cross up BB lower
price_crosses_back_below_upper = ta.crossunder(close, bb_upper)//Price cross down BB upper
macd_golden_cross = ta.crossover(macd_line, signal_line)//MACD golden cross
macd_death_cross = ta.crossunder(macd_line, signal_line)//MACD death cross
rsi_above_ma = rsi > rsi_ma//RSI above MA
rsi_below_ma = rsi < rsi_ma//RSI below MA
// Exit Events
exit_long_bb_upper_target = ta.crossover(close, bb_upper)//Price cross up BB upper
exit_short_bb_lower_target = ta.crossunder(close, bb_lower)//Price cross down BB lower
exit_long_bb_middle_target = ta.crossover(close, bb_middle)//Price cross up BB middle
exit_short_bb_middle_target = ta.crossunder(close, bb_middle)//Price cross down BB middle
exit_long_rsi_reversal = ta.crossunder(rsi, rsi_ma)//RSI cross down MA
exit_short_rsi_reversal = ta.crossover(rsi, rsi_ma)//RSI cross up MA
// =================================================================================
// Position State Management
// =================================================================================
var bool is_logic1_active = false//Init L1 state
var bool is_logic2_active = false//Init L2 state
is_logic1_active := false//Reset L1 state
is_logic2_active := false//Reset L2 state
//Check open trades for active logic
if strategy.opentrades > 0
for i = 0 to strategy.opentrades - 1
trade_id = strategy.opentrades.entry_id(i)
if str.contains(trade_id, "Logic1")
is_logic1_active := true//Mark L1 active
if str.contains(trade_id, "Logic2")
is_logic2_active := true//Mark L2 active
// =================================================================================
// Entry Conditions
// =================================================================================
// Logic 1 Entry Conditions
logic1_long_condition = use_logic1 and not use_logic2 and is_ranging_market_logic1 and macd_golden_cross and rsi_above_ma and price_below_bb_middle
//L1 long: Enable L1, disable L2, oscillating, MACD gold cross, RSI>MA, price<BB middle
logic1_short_condition = use_logic1 and not use_logic2 and is_ranging_market_logic1 and macd_death_cross and rsi_below_ma and price_above_bb_middle
//L1 short: Enable L1, disable L2, oscillating, MACD death cross, RSI<MA, price>BB middle
// Logic 2 Entry Conditions
logic2_long_condition = use_logic2 and not use_logic1 and is_ranging_market_logic2 and price_crosses_back_above_lower and rsi <= rsi_os_logic2
//L2 long: Enable L2, disable L1, oscillating, price cross up BB lower, RSI oversold
logic2_short_condition = use_logic2 and not use_logic1 and is_ranging_market_logic2 and price_crosses_back_below_upper and rsi >= rsi_ob_logic2
//L2 short: Enable L2, disable L1, oscillating, price cross down BB upper, RSI overbought
// =================================================================================
// Strategy Execution - Long Trades
// =================================================================================
// Logic 1 Long Execution
if use_logic1
if logic1_long_condition
strategy.entry("Logic1Long", strategy.long, comment="Logic1-Long")//Enter L1 long
strategy.exit("StopLoss1Long", from_entry="Logic1Long", stop=close - atr * atr_multiplier_logic1)
//Set L1 long stop loss
// Logic 1 Long BB Profit Taking
if use_bb_exit_logic1
if exit_long_bb_upper_target
strategy.close("Logic1Long", comment="Logic1-Upper Exit")//L1 upper exit
// Logic 1 Long RSI Reversal Profit Taking
if use_rsi_exit_logic1
if strategy.position_size > 0 and exit_long_rsi_reversal and price_above_bb_middle
float total_profit_L1_long = 0.0
for i = 0 to strategy.opentrades - 1
if str.contains(strategy.opentrades.entry_id(i), "Logic1Long")
total_profit_L1_long += strategy.opentrades.profit(i)
//Calculate L1 long profit
if total_profit_L1_long > 0
strategy.close("Logic1Long", comment="Logic1-Profit&RSI Reversal")
//Close L1 long on profit & RSI reversal
// Logic 2 Long Execution
if use_logic2
if logic2_long_condition
strategy.entry("Logic2Long", strategy.long, comment="Logic2-Long")//Enter L2 long
strategy.exit("StopLoss2Long", from_entry="Logic2Long", stop=close - atr * atr_multiplier_logic2)
//Set L2 long stop loss
// Logic 2 Long BB Profit Taking
if use_bb_exit_logic2
if exit_long_bb_middle_target
strategy.close("Logic2Long", comment="Logic2-Middle Exit")//L2 middle exit
// Logic 2 Long RSI Reversal Profit Taking
if use_rsi_exit_logic2
if is_logic2_active and strategy.position_size > 0 and exit_long_rsi_reversal and price_above_bb_middle
float total_profit_L2_long = 0.0
for i = 0 to strategy.opentrades - 1
if str.contains(strategy.opentrades.entry_id(i), "Logic2Long")
total_profit_L2_long += strategy.opentrades.profit(i)
//Calculate L2 long profit
if total_profit_L2_long > 0
strategy.close("Logic2Long", comment="Logic2-Profit&RSI Reversal")
//Close L2 long on profit & RSI reversal
// =================================================================================
// Strategy Execution - Short Trades
// =================================================================================
// Logic 1 Short Execution
if use_logic1
if logic1_short_condition
strategy.entry("Logic1Short", strategy.short, comment="Logic1-Short")//Enter L1 short
strategy.exit("StopLoss1Short", from_entry="Logic1Short", stop=close + atr * atr_multiplier_logic1)
//Set L1 short stop loss
// Logic 1 Short BB Profit Taking
if use_bb_exit_logic1
if exit_short_bb_lower_target
strategy.close("Logic1Short", comment="Logic1-Lower Exit")//L1 lower exit
// Logic 1 Short RSI Reversal Profit Taking
if use_rsi_exit_logic1
if strategy.position_size < 0 and exit_short_rsi_reversal and price_below_bb_middle
float total_profit_L1_short = 0.0
for i = 0 to strategy.opentrades - 1
if str.contains(strategy.opentrades.entry_id(i), "Logic1Short")
total_profit_L1_short += strategy.opentrades.profit(i)
//Calculate L1 short profit
if total_profit_L1_short > 0
strategy.close("Logic1Short", comment="Logic1-Profit&RSI Reversal")
//Close L1 short on profit & RSI reversal
// Logic 2 Short Execution
if use_logic2
if logic2_short_condition
strategy.entry("Logic2Short", strategy.short, comment="Logic2-Short")//Enter L2 short
strategy.exit("StopLoss2Short", from_entry="Logic2Short", stop=close + atr * atr_multiplier_logic2)
//Set L2 short stop loss
// Logic 2 Short BB Profit Taking
if use_bb_exit_logic2
if exit_short_bb_middle_target
strategy.close("Logic2Short", comment="Logic2-Middle Exit")//L2 middle exit
// Logic 2 Short RSI Reversal Profit Taking
if use_rsi_exit_logic2
if is_logic2_active and strategy.position_size < 0 and exit_short_rsi_reversal and price_below_bb_middle
float total_profit_L2_short = 0.0
for i = 0 to strategy.opentrades - 1
if str.contains(strategy.opentrades.entry_id(i), "Logic2Short")
total_profit_L2_short += strategy.opentrades.profit(i)
//Calculate L2 short profit
if total_profit_L2_short > 0
strategy.close("Logic2Short", comment="Logic2-Profit&RSI Reversal")
//Close L2 short on profit & RSI reversal
// =================================================================================
// Visualization
// =================================================================================
// Plotting
plot(bb_upper, title="Upper Track", color=color.new(color.teal, 50))//Plot BB upper
plot(bb_middle, title="Middle Track", color=color.new(color.gray, 70))//Plot BB middle
plot(bb_lower, title="Lower Track", color=color.new(color.teal, 50))//Plot BB lower