O recurso está a ser carregado... Carregamento...

Estratégia de negociação de volume de impulso inteligente multi-alvo

Autora:ChaoZhang, Data: 2024-12-12 14:45:04
Tags:SMARSITPSL

img

Esta estratégia é um sistema de negociação inteligente que combina volume, impulso de preço e vários níveis de take-profit/stop-loss. Identifica oportunidades de negociação potenciais através de uma combinação de detecção de anomalias de volume, ganhos de preço e indicadores de impulso, usando gerenciamento em camadas de lucro e stop-loss para otimizar as taxas de risco-recompensa.

Princípios de estratégia

A estratégia é baseada em três sinais de negociação principais: 1) Volume de ruptura - volume atual excede 2x o volume médio de 20 períodos; 2) Ganho de preço - aumento recente de preço excede o limiar definido; 3) Confirmação de impulso - RSI acima de 55 e preço acima da SMA de 50 períodos. Quando essas três condições são atendidas simultaneamente, o sistema gera um sinal longo. A estratégia emprega níveis triplos de take-profit (15%, 25%, 35%) e níveis triplos de stop-loss (-2%, -5%, -10%) para gerenciamento de posição, com dimensionamento flexível de posição em cada nível.

Vantagens da estratégia

  1. A confirmação de sinais múltiplos melhora a precisão da negociação
  2. A abordagem em camadas de take-profit/stop-loss assegura os lucros e controla os riscos
  3. Parâmetros altamente personalizáveis adaptados às diferentes condições do mercado
  4. A combinação de indicadores técnicos e análise de volume fornece sinais mais fiáveis
  5. A função de alerta em tempo real permite a captura oportuna de oportunidades

Riscos estratégicos

  1. Configurações incorretas dos parâmetros podem levar a excesso de negociação
  2. A taxa de prejuízo pode ser elevada durante a volatilidade do mercado.
  3. Dificuldade em executar take-profits/stop-losses em mercados de baixa liquidez
  4. Falta de factores fundamentais importantes
  5. A confiança excessiva em indicadores técnicos pode falhar em mercados variados

Orientações de otimização

  1. Introduzir uma análise das condições do mercado para adaptação dos parâmetros
  2. Adicionar análise de qualidade de volume para filtrar sinais falsos de volume
  3. Incluir indicadores de força da tendência para melhorar a capacidade de seguir a tendência
  4. Otimizar o intervalo entre a obtenção de lucros e a suspensão de perdas para corresponder à volatilidade do mercado
  5. Considerar a adição de um controlo de retirada para melhorar a estabilidade da curva de participação

Resumo

Esta é uma estratégia de negociação madura que integra múltiplos elementos de análise técnica. Através da filtragem rigorosa de sinais e gestão de posição flexível, capta oportunidades de tendência, mantendo um bom controle de risco.


/*backtest
start: 2024-11-11 00:00:00
end: 2024-12-10 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Volume Spike & Momentum Strategy with Alerts", overlay=true)

// Inputs for customization
priceGainPercent = input.float(5, title="Minimum Price Gain (%)", minval=1)
volumeLookback = input.int(20, title="Volume Lookback Period (Bars)", minval=1)
momentumSmaLength = input.int(50, title="SMA Length for Momentum (Bars)", minval=1)
rsiThreshold = input.float(55, title="RSI Threshold for Momentum", minval=1)

// Take Profit percentages
tp1Percent = input.float(15, title="Take Profit 1 (%)", minval=1)
tp2Percent = input.float(25, title="Take Profit 2 (%)", minval=1)
tp3Percent = input.float(35, title="Take Profit 3 (%)", minval=1)

// Percentage of position to close at each take-profit
tp1ClosePercent = input.float(30, title="Close % at TP1", minval=1, maxval=100)
tp2ClosePercent = input.float(40, title="Close % at TP2", minval=1, maxval=100)
tp3ClosePercent = input.float(30, title="Close % at TP3", minval=1, maxval=100)

// Stop-loss percentages
sl1Percent = input.float(2, title="Stop Loss 1 (%)", minval=0.1)
sl2Percent = input.float(5, title="Stop Loss 2 (%)", minval=0.1)
sl3Percent = input.float(10, title="Stop Loss 3 (%)", minval=0.1)

// Percentage of position to close at each stop-loss
sl1ClosePercent = input.float(30, title="Close % at SL1", minval=1, maxval=100)
sl2ClosePercent = input.float(40, title="Close % at SL2", minval=1, maxval=100)
sl3ClosePercent = input.float(30, title="Close % at SL3", minval=1, maxval=100)

// Detect volume spikes
avgVolume = ta.sma(volume, volumeLookback)   // Average volume over the last X bars (customizable)
volumeSpike = volume > avgVolume * 2         // Spike in volume if current volume is 2x the average

// Detect price gain over the recent period (e.g., 5-10% gain over the last X bars)
priceChangePercent = (close - ta.lowest(close, 5)) / ta.lowest(close, 5) * 100
priceGainCondition = priceChangePercent >= priceGainPercent

// Check for overall momentum using an SMA and RSI
longTermSma = ta.sma(close, momentumSmaLength)
rsi = ta.rsi(close, 14)
momentumCondition = close > longTermSma and rsi >= rsiThreshold

// Store the entry price on a new trade
var float entryPrice = na
if (strategy.opentrades == 0 and (volumeSpike and priceGainCondition and momentumCondition))
    entryPrice := close  // Capture the entry price on a new trade

// Calculate take-profit levels based on the entry price
tp1Price = entryPrice * (1 + tp1Percent / 100)
tp2Price = entryPrice * (1 + tp2Percent / 100)
tp3Price = entryPrice * (1 + tp3Percent / 100)

// Calculate stop-loss levels based on the entry price
sl1Price = entryPrice * (1 - sl1Percent / 100)
sl2Price = entryPrice * (1 - sl2Percent / 100)
sl3Price = entryPrice * (1 - sl3Percent / 100)

// Exit conditions for multiple take-profits
tp1Condition = high >= tp1Price  // Exit partial if price hits take-profit 1
tp2Condition = high >= tp2Price  // Exit partial if price hits take-profit 2
tp3Condition = high >= tp3Price  // Exit full if price hits take-profit 3

// Exit conditions for multiple stop-losses
sl1Condition = low <= sl1Price  // Exit partial if price hits stop-loss 1
sl2Condition = low <= sl2Price  // Exit partial if price hits stop-loss 2
sl3Condition = low <= sl3Price  // Exit full if price hits stop-loss 3

// Buy Condition: When volume spike, price gain, and momentum conditions are met
if (volumeSpike and priceGainCondition and momentumCondition)
    strategy.entry("Buy", strategy.long)

// Alerts for conditions
alertcondition(volumeSpike and priceGainCondition and momentumCondition, title="Entry Alert", message="Entry conditions met: Volume spike, price gain, and momentum detected!")

alertcondition(tp1Condition, title="Take Profit 1", message="Take Profit 1 hit!")
alertcondition(tp2Condition, title="Take Profit 2", message="Take Profit 2 hit!")
alertcondition(tp3Condition, title="Take Profit 3", message="Take Profit 3 hit!")

alertcondition(sl1Condition, title="Stop Loss 1", message="Stop Loss 1 hit!")
alertcondition(sl2Condition, title="Stop Loss 2", message="Stop Loss 2 hit!")
alertcondition(sl3Condition, title="Stop Loss 3", message="Stop Loss 3 hit!")

// Exit conditions: Multiple take-profits and stop-losses
if (tp1Condition)
    strategy.exit("Take Profit 1", "Buy", limit=tp1Price, qty_percent=tp1ClosePercent)

if (tp2Condition)
    strategy.exit("Take Profit 2", "Buy", limit=tp2Price, qty_percent=tp2ClosePercent)

if (tp3Condition)
    strategy.exit("Take Profit 3", "Buy", limit=tp3Price, qty_percent=tp3ClosePercent)

// Stop-loss exits
if (sl1Condition)
    strategy.exit("Stop Loss 1", "Buy", stop=sl1Price, qty_percent=sl1ClosePercent)

if (sl2Condition)
    strategy.exit("Stop Loss 2", "Buy", stop=sl2Price, qty_percent=sl2ClosePercent)

if (sl3Condition)
    strategy.exit("Stop Loss 3", "Buy", stop=sl3Price, qty_percent=sl3ClosePercent)

// Plotting take-profit and stop-loss levels on the chart
plot(tp1Price, color=color.green, style=plot.style_linebr, title="TP1 Level")
plot(tp2Price, color=color.green, style=plot.style_linebr, title="TP2 Level")
plot(tp3Price, color=color.green, style=plot.style_linebr, title="TP3 Level")

plot(sl1Price, color=color.red, style=plot.style_linebr, title="SL1 Level")
plot(sl2Price, color=color.red, style=plot.style_linebr, title="SL2 Level")
plot(sl3Price, color=color.red, style=plot.style_linebr, title="SL3 Level")


Relacionados

Mais.