
A estratégia de negociação de auto-adaptação de combinação de múltiplos sinais é um sistema de negociação quantitativa abrangente que combina vários indicadores de análise técnica para gerar sinais de negociação. A estratégia utiliza principalmente os três principais indicadores técnicos do EMA crossover, RSI overbought and oversold e MACD, e combina o filtro de volume de negociação e o mecanismo de confirmação de quadros de tempo mais elevados para formar um sistema de negociação completo. A estratégia também inclui um módulo de gerenciamento de risco, que usa um percentual fixo de stop loss, um stop loss e um tracking de stop loss ATR para controlar efetivamente o risco de cada transação.
O princípio central da estratégia é aumentar a precisão das decisões de negociação através da combinação de vários sinais de negociação. A implementação específica é a seguinte:
EMA sinal de cruzamento: Use o cruzamento do EMA rápido (default 9 cycle) e do EMA lento (default 21 cycle) para identificar mudanças de tendência. Um sinal de compra é gerado quando o EMA rápido atravessa o EMA lento e um sinal de venda quando o EMA rápido atravessa o EMA lento.
O RSI supera os sinais de compra e vendaO RSI usa um indicador relativamente forte (RSI) para identificar o estado de sobrecompra e sobrevenda do mercado. Quando o RSI é inferior a 30 (RSI padrão) é considerado como uma sobrevenda, gerando um sinal de compra; Quando o RSI é superior a 70 (RSI padrão) é considerado como uma sobrecompra, gerando um sinal de venda.
Sinais MACD: Use a linha principal do indicador MACD e a linha de sinal para confirmar a direção da tendência. Quando a linha principal do MACD atravessa a linha de sinal, gera um sinal de compra. Quando a linha principal do MACD atravessa a linha de sinal, gera um sinal de venda.
Logística de combinação de sinaisA estratégia oferece duas combinações - “Any” (trigga qualquer sinal) e “All” (trigga todos os sinais ativados ao mesmo tempo). No modo “Any”, apenas um sinal ativado é acionado para gerar um sinal de negociação; no modo “All”, todos os sinais ativados devem ser acionados ao mesmo tempo para gerar um sinal de negociação.
Mecanismo de filtragem:
Gestão de posiçõesA estratégia utiliza o método de percentagem de fundos para determinar o tamanho da posição de cada transação, usando por defeito 10% da participação da conta.
Gestão de Riscos:
Análise de sinal multidimensionalAo combinar vários indicadores técnicos, a estratégia permite analisar o mercado de diferentes perspectivas, reduzindo o impacto de falsos sinais e aumentando a confiabilidade das decisões de negociação.
Combinação de sinais flexíveisOs utilizadores podem escolher entre “Any” ou “All” para se adaptar a diferentes estilos de negociação e condições de mercado. Em mercados com maior volatilidade, o “All” pode reduzir os sinais errôneos; em tendências claras, o “Any” pode capturar oportunidades de forma mais sensível.
Mecanismos de filtragem em vários níveisO filtro de volume de transação e o mecanismo de confirmação de um período de tempo mais alto adicionam uma camada de verificação adicional, reduzindo efetivamente os sinais de transação errados, especialmente quando o mercado é ordenado horizontalmente.
Uma boa gestão de riscosA estratégia possui um sistema completo de controle de risco, incluindo um limite de perda percentual e um tracking de perda ATR, que pode ajustar automaticamente a posição de perda de acordo com as mudanças na volatilidade do mercado, protegendo efetivamente os fundos.
Alta personalizaçãoA estratégia permite que o usuário ajuste vários parâmetros, incluindo a duração do EMA, o RSI, os parâmetros MACD, etc., permitindo que o comerciante otimize de acordo com seu estilo de negociação e mercado-alvo.
Intuitivas e visuaisA estratégia fornece indicações gráficas claras, incluindo linhas EMA e setas de sinais de compra e venda, para ajudar os comerciantes a entender e avaliar os sinais de negociação de forma intuitiva.
Parâmetros de otimização excessivaParâmetros de otimização excessiva podem fazer com que a estratégia tenha um bom desempenho em testes históricos, mas um mau desempenho em transações reais (risco de sobre-ajuste). A solução é usar um ciclo de retorno suficientemente longo e realizar testes de robustez.
Conflito de sinaisEm certas condições de mercado, diferentes sinais podem ser contraditórios, causando confusão. Por exemplo, o EMA pode indicar uma tendência ascendente, enquanto o RSI já está na zona de supercompra. A solução é dar prioridade ao sinal claro ou usar o modo “All” para garantir a consistência.
Problemas de atrasoTodos os indicadores técnicos usados apresentam um certo grau de atraso, especialmente a EMA e a MACD. Em mercados de rápida mudança, isso pode levar a um momento de entrada ou saída pouco ideal. A solução é considerar um ciclo de indicadores mais curto ou combinar a análise do comportamento do preço.
Limites de adaptabilidade do mercadoA estratégia funciona melhor em mercados com tendências evidentes, mas pode gerar mais sinais errados em mercados com oscilações intercalares. A solução é adicionar filtros de intensidade de tendência ou suspender a negociação quando um mercado com oscilações é identificado.
Risco financeiroEmbora a estratégia inclua um mecanismo de stop loss, em condições de mercado extremas (por exemplo, queda de capital ou falta de liquidez), o stop loss pode não ser executado como esperado. A solução é reduzir adequadamente a proporção de capital por transação e usar uma configuração de stop loss mais conservadora.
Adicionado filtro de força de tendênciaA adição de ADX ou indicadores semelhantes para medir a força da tendência e negociar somente quando a tendência é clara pode reduzir significativamente os falsos sinais em mercados de turbulência. Esta melhoria pode resolver o problema de que as estratégias são fáceis de produzir sinais errados em mercados de risco.
Aumentar o filtro de tempoA adição de um filtro de tempo pode evitar a negociação em períodos de baixa eficiência. Por exemplo, pode evitar períodos de alta volatilidade de abertura e fechamento do mercado, ou atividade apenas em determinados períodos de negociação.
Ajuste de parâmetros dinâmicosAjuste automático dos parâmetros do indicador com base na volatilidade do mercado. Por exemplo, prolongar o ciclo EMA em um ambiente de alta volatilidade e reduzir o ciclo em um ambiente de baixa volatilidade. Esse ajuste adaptativo pode melhorar a capacidade de adaptação da estratégia em diferentes condições de mercado.
Adição de componentes de aprendizagem de máquinaIntrodução de algoritmos de aprendizagem de máquina para otimizar a distribuição de peso de sinais e a importância de ajustar os sinais de acordo com a dinâmica de desempenho histórico. Isso permite que a estratégia ajuste automaticamente sua lógica de decisão conforme as condições de mercado mudam.
Melhorias na gestão de posiçõesRealizar um ajuste de posição baseado na volatilidade, aumentando a posição em um ambiente de baixa volatilidade e reduzindo a posição em um ambiente de alta volatilidade. Isso pode aumentar a eficiência do uso de fundos, mantendo o risco relativamente constante.
Adição de filtros básicosPara alguns mercados, a combinação de indicadores fundamentais (como a temporada de resultados, a divulgação de dados econômicos, etc.) pode evitar a negociação antes e depois de eventos de incerteza significativa, reduzindo o risco potencial.
Melhorar a estratégia de stop lossO principal objetivo é o de: Realizar um stop loss inteligente baseado em pontos de suporte e resistência, e não apenas em porcentagens fixas ou múltiplos de ATR. Esta abordagem pode ser melhor adaptada à estrutura do mercado, evitando o prejuízo desnecessário causado pelo ruído do mercado.
A estratégia de negociação de portfólio de múltiplos sinais é um sistema de negociação abrangente e flexível que fornece sinais de negociação relativamente confiáveis através da combinação de vários indicadores técnicos e mecanismos de filtragem. A vantagem central da estratégia reside na sua capacidade de análise abrangente e no sistema de gerenciamento de risco perfeito, que permite manter uma certa eficácia em diferentes condições de mercado.
No entanto, a estratégia também apresenta alguns riscos e limitações inerentes, como o excesso de otimização de parâmetros e o atraso de sinais. A robustez e adaptabilidade da estratégia podem ser aumentadas ainda mais pela implementação da direção de otimização recomendada, especialmente o aumento dos filtros de intensidade de tendência e a realização de ajustes de parâmetros dinâmicos.
Em última análise, por mais perfeita que seja a estratégia, ela precisa ser adaptada ao ambiente de mercado e aos objetivos de negociação individuais. A monitorização contínua do desempenho da estratégia, bem como a avaliação e otimização regulares, são a chave para a eficácia da estratégia a longo prazo. A estratégia fornece um bom ponto de partida para os comerciantes de quantificação, que podem ser desenvolvidos em sistemas de negociação mais complexos e personalizados.
/*backtest
start: 2024-04-22 00:00:00
end: 2025-04-21 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"TRX_USD"}]
*/
//@version=5
strategy("Full‑Featured Multi‑Signal Strategy By Andi Tan", overlay=true)
// === POSITION SIZE ===
posPct = input.float(10, "Position Size (% Equity)", minval=0.1, step=0.1)
// === INPUTS SIGNALS ===
useEMA = input.bool(true, "Enable EMA Crossover")
emaFastLen = input.int(9, "EMA Fast Length", minval=1)
emaSlowLen = input.int(21, "EMA Slow Length", minval=1)
useRSI = input.bool(true, "Enable RSI Signal")
rsiLen = input.int(14, "RSI Length", minval=1)
rsiOB = input.int(70, "RSI Overbought", minval=50, maxval=100)
rsiOS = input.int(30, "RSI Oversold", minval=0, maxval=50)
useMACD = input.bool(true, "Enable MACD Signal")
macdFast = input.int(12, "MACD Fast Length", minval=1)
macdSlow = input.int(26, "MACD Slow Length", minval=1)
macdSig = input.int(9, "MACD Signal Length", minval=1)
mode = input.string("Any", "Signal Combination", options=["Any","All"])
showArrows = input.bool(true, "Show Buy/Sell Arrows")
// === RISK MANAGEMENT ===
slPct = input.float(1.0, "Stop‑Loss (%)", minval=0) / 100
tpPct = input.float(2.0, "Take‑Profit (%)", minval=0) / 100
useTrail = input.bool(true, "Enable ATR Trailing Stop")
atrLen = input.int(14, "ATR Length", minval=1)
trailMul = input.float(1.5, "ATR Multiplier", minval=0.1)
// === FILTERS ===
useVolFilt = input.bool(true, "Enable Volume Filter")
volLen = input.int(20, "Volume MA Length", minval=1)
useHigherTF = input.bool(true, "Enable Higher‑TF Confirmation")
higherTF = input.string("60", "Higher‑TF Timeframe", options=["5","15","60","240","D","W"])
// === CALCULATIONS ===
// EMA crossover
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
emaUp = ta.crossover(emaFast, emaSlow)
emaDown = ta.crossunder(emaFast, emaSlow)
// RSI
rsiVal = ta.rsi(close, rsiLen)
rsiBuy = rsiVal < rsiOS
rsiSell = rsiVal > rsiOB
// MACD
[macdLine, macdSignal, _] = ta.macd(close, macdFast, macdSlow, macdSig)
macdBuy = ta.crossover(macdLine, macdSignal)
macdSell = ta.crossunder(macdLine, macdSignal)
// Combine base signals with if…else (bukan ternary terpecah)
var bool buyBase = false
var bool sellBase = false
if mode == "Any"
buyBase := (useEMA and emaUp) or (useRSI and rsiBuy) or (useMACD and macdBuy)
sellBase := (useEMA and emaDown) or (useRSI and rsiSell) or (useMACD and macdSell)
else
buyBase := ((not useEMA) or emaUp) and ((not useRSI) or rsiBuy) and ((not useMACD) or macdBuy)
sellBase := ((not useEMA) or emaDown) and ((not useRSI) or rsiSell) and ((not useMACD) or macdSell)
// Volume filter
volMA = ta.sma(volume, volLen)
buyF = buyBase and (not useVolFilt or volume > volMA)
sellF = sellBase and (not useVolFilt or volume > volMA)
// ——— HIGHER‑TF EMA (dipanggil di top‑scope) ———
htEMA = request.security(syminfo.tickerid, higherTF, ta.ema(close, emaSlowLen))
// Final buy/sell signals
buySignal = buyF and (not useHigherTF or close > htEMA)
sellSignal = sellF and (not useHigherTF or close < htEMA)
// ATR untuk trailing
atrVal = ta.atr(atrLen)
// === ORDERS ===
if buySignal
float qty = (strategy.equity * posPct/100) / close
strategy.entry("Long", strategy.long, qty=qty)
if sellSignal
float qty = (strategy.equity * posPct/100) / close
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("Exit Long", from_entry="Long",
loss=slPct * close, profit=tpPct * close,
trail_points = useTrail ? atrVal * trailMul : na)
strategy.exit("Exit Short", from_entry="Short",
loss=slPct * close, profit=tpPct * close,
trail_points = useTrail ? atrVal * trailMul : na)
// === PLOTS ===
plot(useEMA ? emaFast : na, title="EMA Fast", color=color.orange)
plot(useEMA ? emaSlow : na, title="EMA Slow", color=color.blue)
plotshape(showArrows and buySignal, title="Buy", location=location.belowbar,
style=shape.arrowup, text="BUY")
plotshape(showArrows and sellSignal, title="Sell", location=location.abovebar,
style=shape.arrowdown, text="SELL")