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

EMA/SMA Seguindo a tendência com a estratégia de negociação de balanço Filtro combinado de volume e sistema percentual de take-profit/stop-loss

Autora:ChaoZhang, Data: 2024-12-11 15:12:35
Tags:EMASMA

img

Resumo

Esta estratégia é um sistema de negociação abrangente que combina a tendência seguindo com os métodos de negociação swing, utilizando crossovers EMA e SMA, identificação swing high/low, filtragem de volume e mecanismos de take-profit e trailing stop-loss baseados em porcentagem.

Princípios de estratégia

A estratégia emprega um mecanismo de filtragem de sinais de várias camadas, começando com crossovers EMA (10) e SMA (21) para determinação básica da tendência, em seguida, usando breakouts de ponto de pivô esquerdo / direito de 6 bares para o tempo de entrada, enquanto requer volume acima da média móvel de 200 períodos para garantir liquidez suficiente. O sistema usa 2% de take-profit e 1% de stop-loss para gerenciamento de risco. As posições longas são iniciadas quando o preço ultrapassa os máximos de balanço com confirmação de volume; as posições curtas são tomadas quando o preço ultrapassa os mínimos de balanço com confirmação de volume.

Vantagens da estratégia

  1. A confirmação de múltiplos sinais reduz os falsos sinais através da verificação da tendência, da ruptura de preços e da expansão de volume
  2. Gerenciamento flexível dos lucros/perdas com base na percentagem de lucros obtidos com stop-loss
  3. Sistema de visualização abrangente para monitorização de transacções e sinais
  4. Alta personalização com parâmetros de chave ajustáveis
  5. Gestão sistemática do risco através de níveis pré-estabelecidos de stop loss e take profit

Riscos estratégicos

  1. Possíveis falhas de ruptura em mercados variados
  2. A filtragem de volume pode perder alguns sinais válidos
  3. A taxa fixa de lucro pode sair demasiado cedo em tendências fortes
  4. Sistema de média móvel tem atraso inerente em inversões rápidas
  5. Necessidade de considerar o impacto dos custos de negociação nos retornos da estratégia

Orientações de otimização

  1. Introduzir um ajustamento de volatilidade para o ajustamento dinâmico do take-profit/stop-loss
  2. Adicionar filtragem da força da tendência para evitar a negociação em tendências fracas
  3. Otimizar o algoritmo de filtragem de volume considerando mudanças relativas de volume
  4. Implementar filtros baseados no tempo para evitar períodos comerciais desfavoráveis
  5. Considerar a classificação do regime de mercado para adaptação de parâmetros

Resumo

A estratégia constrói um sistema de negociação completo por meio de médias móveis, quebras de preços e verificação de volume, adequado para a tendência de médio a longo prazo.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)

Relacionados

Mais.