Tendência dinâmica seguindo vários indicadores estratégia de negociação de realização de lucro em lote

EMA MACD RSI ATR
Data de criação: 2025-02-10 14:49:11 última modificação: 2025-02-10 14:49:11
cópia: 2 Cliques: 378
1
focar em
1617
Seguidores

Tendência dinâmica seguindo vários indicadores estratégia de negociação de realização de lucro em lote

Visão geral

Trata-se de uma estratégia de negociação quantitativa que combina o acompanhamento de tendências e a análise técnica. A estratégia confirma os sinais de negociação através de múltiplos indicadores técnicos, e utiliza um mecanismo de gerenciamento de posições em blocos e posições dinâmicas, que visa capturar as principais tendências do mercado e controlar o risco. A estratégia integra vários indicadores técnicos, como EMA, MACD e RSI, para identificar potenciais oportunidades de negociação através de cruzamentos e desvios entre indicadores.

Princípio da estratégia

A lógica de negociação central da estratégia é baseada nos seguintes elementos-chave:

  1. Os sinais de entrada usam filtros de indicadores de múltiplas técnicas: o EMA rápido com o cruzamento do EMA lento, o sinal MACD Gold/Dead/Dead e o indicador RSI Overbought/Overbought. O ingresso múltipla exige que o EMA rápido atravesse o EMA lento, o MACD Gold e o RSI abaixo de 70; o ingresso em branco requer que o EMA rápido atravesse o EMA lento, o MACD Dead e o RSI acima de 30.
  2. O controle de risco usa um stop loss de proporção fixa, definido em 5% do preço de abertura.
  3. Mecanismo de parada por lotes: o primeiro parâmetro está localizado em 8% e o segundo parâmetro está localizado em 12%, ajustando dinamicamente a posição do segundo parâmetro para se adaptar à flutuação do mercado.
  4. A gestão de posições é baseada em cálculos dinâmicos do ATR, com um controle de risco máximo de 5% para uma posição máxima de não mais de 40% dos juros da conta.

Vantagens estratégicas

  1. A verificação cruzada de múltiplos indicadores técnicos permite filtrar de forma eficaz os sinais falsos e melhorar a qualidade das transações.
  2. A aplicação de um mecanismo de bloqueio por lotes permite bloquear parte dos lucros e não perder totalmente os benefícios da continuidade da situação.
  3. O sistema de gerenciamento de posições dinâmicas pode ajustar automaticamente a escala de negociação de acordo com a volatilidade do mercado, controlando efetivamente o risco.
  4. Um bom sistema de controle de risco, incluindo stop loss fixo, posições dinâmicas e limites de posse máxima, assegura a estabilidade da estratégia a longo prazo.
  5. A lógica da estratégia é clara, os parâmetros são ajustáveis, facilitando a otimização de acordo com diferentes condições de mercado.

Risco estratégico

  1. Em mercados de alta volatilidade, pode haver problemas frequentes de stop loss, e é necessário ter cuidado para ajustar os parâmetros ou suspender a negociação quando a volatilidade do mercado é muito alta.
  2. Os turbulentos mercados horizontais podem levar a perdas contínuas, sendo recomendado o aumento do mecanismo de julgamento de horizontais.
  3. A filtragem de múltiplos indicadores pode causar a perda de parte da tendência, podendo não ser tão eficaz quanto a estratégia de um único indicador em um mercado de forte tendência.
  4. O mecanismo de bloqueio por lotes pode não ser capaz de liquidar a posição em tempo hábil em um mercado em rápida reversão e deve ser considerado o aumento do julgamento de sinais de reversão.

Direção de otimização da estratégia

  1. Considere a introdução de um mecanismo de filtragem de volatilidade no mercado, reduzindo posições ou suspensão de negociação quando a volatilidade é excessiva.
  2. Pode-se aumentar o julgamento da força da tendência, ajustando a posição de parada durante a forte tendência para obter mais lucro da tendência.
  3. Optimizar o sistema de gestão de posições e considerar a inclusão de ajustes de posições dinâmicos baseados em ganhos e perdas.
  4. Adicionar mecanismos de julgamento do estado do mercado, usando diferentes combinações de parâmetros em diferentes estados de mercado.
  5. Considere a inclusão de indicadores de volume de transação para aumentar a confiabilidade dos sinais de transação.

Resumir

A estratégia, através da utilização conjunta de múltiplos indicadores técnicos, em combinação com o bloqueio por lotes e a gestão de posições dinâmicas, constrói um sistema de negociação relativamente perfeito. As vantagens da estratégia são o controle de risco completo e a alta confiabilidade do sinal de negociação, mas também há a desvantagem de que pode perder parte da situação.

Código-fonte da estratégia
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Hang Strategy Aggressive", overlay=true, initial_capital=1000, currency=currency.USDT, default_qty_type=strategy.cash, default_qty_value=100)

// === 参数设置 ===
fastLength = input.int(5, "快速EMA长度")
slowLength = input.int(15, "慢速EMA长度")
rsiLength = input.int(7, "RSI长度")
atrPeriod = input.int(10, "ATR周期")
leverageMultiple = input.float(3.0, "杠杆倍数", minval=1.0, step=0.5)

// === 止盈止损参数 ===
stopLossPercent = input.float(5.0, "止损百分比", minval=1.0, step=0.5)
firstTakeProfitPercent = input.float(8.0, "第一止盈点百分比", minval=1.0, step=0.5)
secondTakeProfitPercent = input.float(12.0, "第二止盈点百分比", minval=1.0, step=0.5)
firstTakeProfitQtyPercent = input.float(50.0, "第一止盈仓位百分比", minval=1.0, maxval=100.0, step=5.0)

// === 技术指标 ===
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
superFastEMA = ta.ema(close, 3)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrPeriod)

// === 趋势判断 ===
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
macdCross = (macdLine > signalLine) and (macdLine[1] < signalLine[1])
macdCrossDown = (macdLine < signalLine) and (macdLine[1] > signalLine[1])

// === 交易信号 ===
longCondition = (fastEMA > slowEMA) and macdCross and (rsi < 70)
shortCondition = (fastEMA < slowEMA) and macdCrossDown and (rsi > 30)

// === 平仓信号 ===
exitLong = shortCondition or (fastEMA < slowEMA)
exitShort = longCondition or (fastEMA > slowEMA)

// === 仓位管理 ===
maxRiskPerTrade = 0.05
basePosition = strategy.equity * maxRiskPerTrade
atrAmount = atr * close
riskPosition = basePosition / atrAmount * leverageMultiple
positionSize = math.min(riskPosition, strategy.equity * 0.4 / close)

// === 交易状态变量 ===
var isLong = false
var isShort = false
var partialTpTriggered = false
var float stopPrice = na
var float firstTpPrice = na
var float secondTpPrice = na
var float firstTpQty = na

// === 交易执行 ===
// 多头入场
if (longCondition and not isLong and not isShort)
    strategy.entry("多", strategy.long, qty=positionSize)
    isLong := true
    partialTpTriggered := false

// 空头入场
if (shortCondition and not isShort and not isLong)
    strategy.entry("空", strategy.short, qty=positionSize)
    isShort := true
    partialTpTriggered := false

// === 止盈止损逻辑 ===
if (strategy.position_size > 0)  // 多仓
    stopPrice := strategy.position_avg_price * (1 - stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 + firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 + secondTakeProfitPercent/100)
    
    if (close[1] <= stopPrice or low <= stopPrice)
        strategy.close_all("多止损")
        isLong := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] >= firstTpPrice or high >= firstTpPrice))
        strategy.order("多第一止盈", strategy.short, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := high * (1 + 0.04)  // 基于当前最高价再上涨4%
    
    if (close[1] >= secondTpPrice or high >= secondTpPrice)
        strategy.close_all("多第二止盈")
        isLong := false
        partialTpTriggered := false

if (strategy.position_size < 0)  // 空仓
    stopPrice := strategy.position_avg_price * (1 + stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 - firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 - secondTakeProfitPercent/100)
    
    if (close[1] >= stopPrice or high >= stopPrice)
        strategy.close_all("空止损")
        isShort := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] <= firstTpPrice or low <= firstTpPrice))
        strategy.order("空第一止盈", strategy.long, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := low * (1 - 0.04)  // 基于当前最低价再下跌4%
    
    if (close[1] <= secondTpPrice or low <= secondTpPrice)
        strategy.close_all("空第二止盈")
        isShort := false
        partialTpTriggered := false

// === 其他平仓条件 ===
if (exitLong and isLong)
    strategy.close_all("多平仓")
    isLong := false
    partialTpTriggered := false

if (exitShort and isShort)
    strategy.close_all("空平仓")
    isShort := false
    partialTpTriggered := false

// === 绘图 ===
plot(fastEMA, "快速EMA", color=color.blue)
plot(slowEMA, "慢速EMA", color=color.red)
plot(superFastEMA, "超快EMA", color=color.green)

// 绘制止盈止损线
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, "开仓价", color=color.yellow)
plot(strategy.position_size != 0 ? stopPrice : na, "止损线", color=color.red)
plot(strategy.position_size != 0 ? firstTpPrice : na, "第一止盈线", color=color.green)
plot(strategy.position_size != 0 ? secondTpPrice : na, "第二止盈线", color=color.blue)