
A estratégia é um sistema de negociação integrado, que combina o acompanhamento de tendências com métodos de negociação de bandas, para construir um sistema de negociação completo através do cruzamento equilátero entre EMA e SMA, identificação de pontos altos e baixos de bandas, filtragem de volume de transação e mecanismo de parada percentual e rastreamento de perdas. A estratégia foi projetada com foco na confirmação de sinais multidimensionais, aumentando a precisão e a confiabilidade das negociações através do efeito sincronizado dos indicadores técnicos.
A estratégia usa um mecanismo de filtragem de sinal em vários níveis, primeiro usando a interseção da formação da base da EMA (10) e SMA (21) para julgar a tendência, em seguida, através do alto e baixo ponto de ruptura de seis linhas K à esquerda e à direita para determinar o momento de entrada, enquanto exige que o volume de transação seja maior do que a média móvel de 200 ciclos, garantindo a negociação em um ambiente de abundância de liquidez. O sistema usa um stop loss percentual de 2% e um stop loss de 1% para gerenciar o risco.
A estratégia de construir um sistema de negociação completo, adequado para o acompanhamento de tendências a médio e longo prazo, através de um sistema de linha uniforme, breakouts de preço e verificação de volume de transação. A vantagem do sistema está na confirmação de múltiplos sinais e no mecanismo de gerenciamento de risco aprimorado, mas também é necessário prestar atenção ao desempenho no mercado horizontal. Com a orientação de otimização sugerida, a estratégia ainda tem espaço para ser melhorada, especialmente em termos de melhorias na auto-adaptabilidade que ajudarão a aumentar a estabilidade da estratégia.
/*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)