
O sistema de negociação de movimentos de cruzamento de dupla equilíbrio é uma estratégia de negociação baseada em movimentos, que usa o clássico cruzamento de 8⁄21 de médias móveis do índice (EMA) para identificar uma reversão de tendência e gerar um sinal de negociação multi-espaço. A estratégia inclui parâmetros de parada e parada que geram automaticamente o risco e bloqueiam os lucros. A lógica central da estratégia é fazer um sinal múltiplo quando o EMA de 8 ciclos sobe através do EMA de 21 ciclos (EMA) e fazer um sinal de vazio quando o EMA de 8 ciclos desce através do EMA de 21 ciclos (EMA). Cada posição é automaticamente retirada quando o parâmetro de parada predefinido é atingido (definido como o percentual de ganho após a entrada) ou o stop loss (definido como o percentual de perda após a entrada).
O princípio central da estratégia é baseado na relação cruzada entre as médias móveis indexadas de dois períodos diferentes para determinar a direção da mudança na tendência do mercado. A estratégia é implementada principalmente através das seguintes partes-chave:
Cálculo do indicador:
shortEma = ta.ema(close, shortEmaLength)longEma = ta.ema(close, longEmaLength)Condições de transação:
longCondition = ta.crossover(shortEma, longEma)shortCondition = ta.crossunder(shortEma, longEma)Gestão de Riscos:
longTakeProfit = close * (1 + takeProfitPerc / 100)longStopLoss = close * (1 - stopLossPerc / 100)shortTakeProfit = close * (1 - takeProfitPerc / 100)shortStopLoss = close * (1 + stopLossPerc / 100)Execução da transação:
noOpenPosition = strategy.position_size == 0Este design garante que a estratégia possa capturar oportunidades rapidamente quando a tendência muda, enquanto protege os fundos com parâmetros de risco predefinidos.
Ao analisar o código em profundidade, a estratégia tem as seguintes vantagens significativas:
Identificação de tendências simples e eficazesO cruzamento da EMA 8⁄21 é um método de identificação de tendências amplamente comprovado e capaz de capturar eficazmente as mudanças na dinâmica do mercado.
Gerenciamento de riscos completoO mecanismo de parada e parada de perda incorporado protege automaticamente o capital e bloqueia os lucros, reduzindo significativamente o risco de negociação emocional.
Configuração de parâmetros flexívelOs usuários podem ajustar a duração do ciclo EMA, a parada e a porcentagem de perda de acordo com diferentes mercados e preferências de risco pessoais.
Capacidade de negociação bidirecionalA estratégia é apoiada por over and under, que permite encontrar oportunidades em diversos cenários de mercado.
Evitar transações duplicadasA estratégia é projetada para garantir que nenhuma nova transação seja aberta antes que uma transação seja totalmente fechada, evitando o risco de sobre-transação e dispersão de fundos.
Visualização clara: permite aos traders entender intuitivamente o estado de operação da estratégia através do traçado de linhas EMA e sinais de negociação.
Ampliação da aplicabilidadeA estratégia é compatível com várias variedades de negociação e períodos de tempo, incluindo criptomoedas, divisas, ações e índices.
Apesar do bom desenho da estratégia, existem os seguintes riscos potenciais:
Mercado horizontal não está indo bemEm mercados de turbulência sem uma clara tendência, os sinais de cruzamento do EMA podem ocorrer com frequência, resultando em várias paradas de perda.
Limitação de percentual fixo de stop lossA volatilidade varia consideravelmente de acordo com os mercados e períodos de tempo, e uma percentagem fixa de stop loss pode não ser adequada para todas as situações.
Ponto de deslizamento e risco de execuçãoNo caso de negociações em ações, pode não ser possível executar ordens exatamente de acordo com os preços gerados pela estratégia, especialmente em mercados com pouca liquidez.
Dependência excessiva em dados históricosOs parâmetros da estratégia foram baseados em dados históricos, mas o comportamento do mercado pode mudar no futuro.
Dependência de um único indicadorA estratégia depende apenas do cruzamento EMA, sem o uso de indicadores auxiliares para confirmar o sinal, o que pode levar a um sinal errado.
Para mitigar esses riscos, recomenda-se:
Depois de analisar o código, aqui estão os possíveis direções de otimização:
adxLength = input.int(14, title="ADX Length")
adxThreshold = input.int(25, title="ADX Threshold")
adxValue = ta.adx(high, low, close, adxLength)
isTrending = adxValue > adxThreshold
atrPeriod = input.int(14, title="ATR Period")
atrMultiplierSL = input.float(2.0, title="ATR Multiplier for Stop Loss")
atrMultiplierTP = input.float(3.0, title="ATR Multiplier for Take Profit")
atrValue = ta.atr(atrPeriod)
dynamicStopLoss = atrValue * atrMultiplierSL
dynamicTakeProfit = atrValue * atrMultiplierTP
Adicionado filtro de tempo de negociaçãoEvite negociar em períodos de alta volatilidade durante os períodos de abertura e fechamento do mercado.
Mecanismo de bloqueio parcial de lucrosQuando o negócio atinge um determinado nível de lucro, o stop loss é movido para o preço de custo ou para um lucro de bloqueio parcial.
Aumentar o volume de transações confirmadasA EMA só executa transações quando o volume de transações aumenta, em combinação com o indicador de volume de transações.
volumeCondition = volume > ta.sma(volume, 20) * 1.2
validLongCondition = longCondition and volumeCondition
Essas orientações de otimização podem não apenas aumentar a robustez da estratégia, mas também adaptá-la a diferentes cenários de mercado, aumentando a lucratividade geral e reduzindo o risco.
O sistema de negociação de tração de cruzamento de dupla linha uniforme é uma estratégia de negociação estruturada, clara e fácil de entender e implementar. Utiliza sinais de cruzamento de 8⁄21 EMA para capturar mudanças de tendência no mercado e gerencia automaticamente o risco com parâmetros de parada e perda predefinidos. A estratégia é adequada para várias variedades de negociação e períodos de tempo, especialmente em mercados com tendências evidentes.
A principal vantagem da estratégia reside na sua lógica concisa e no seu mecanismo de gestão de risco completo, o que torna o processo de negociação altamente automatizado e reduz a interferência de fatores emocionais. Ao mesmo tempo, evita o risco de excesso de negociação, ao ser projetado para evitar transações sobrepostas.
No entanto, a estratégia pode ser desafiada em mercados turbulentos, e sua adaptabilidade precisa ser melhorada por meio de medidas de otimização, como a adição de filtros de tendência e stop loss dinâmico. Além disso, a confirmação de volume de negociação e otimizar o tempo de entrada também são meios eficazes para melhorar o desempenho da estratégia.
Em geral, trata-se de uma estratégia que equilibra a simplicidade e a eficácia, sendo adequada como ponto de partida para iniciantes em negociação automatizada, ou como parte do portfólio de investidores experientes. Através de ajustes razoáveis de parâmetros e otimização contínua, a estratégia é capaz de manter um desempenho estável em várias condições de mercado.
/*backtest
start: 2024-07-14 00:00:00
end: 2025-07-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
*/
//@version=5
strategy("JWs Algo", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
shortEmaLength = input.int(8, title="Short EMA Length")
longEmaLength = input.int(21, title="Long EMA Length")
takeProfitPerc = input.float(2.0, title="Take Profit (%)", step=0.1)
stopLossPerc = input.float(1.0, title="Stop Loss (%)", step=0.1)
// === INDICATORS ===
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
// === CONDITIONS ===
longCondition = ta.crossover(shortEma, longEma)
shortCondition = ta.crossunder(shortEma, longEma)
// === PLOTTING ===
plot(shortEma, title="8 EMA", color=color.orange)
plot(longEma, title="21 EMA", color=color.blue)
// === STRATEGY EXECUTION ===
// Convert percentage inputs into price levels
longTakeProfit = close * (1 + takeProfitPerc / 100)
longStopLoss = close * (1 - stopLossPerc / 100)
shortTakeProfit = close * (1 - takeProfitPerc / 100)
shortStopLoss = close * (1 + stopLossPerc / 100)
// === CHECK FOR OPEN POSITION ===
noOpenPosition = strategy.position_size == 0
if (longCondition and noOpenPosition)
strategy.entry("Long", strategy.long)
strategy.exit("Long TP/SL", from_entry="Long", limit=longTakeProfit, stop=longStopLoss)
if (shortCondition and noOpenPosition)
strategy.entry("Short", strategy.short)
strategy.exit("Short TP/SL", from_entry="Short", limit=shortTakeProfit, stop=shortStopLoss)
// === SIGNAL MARKERS ===
plotshape(longCondition and noOpenPosition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition and noOpenPosition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)