
Esta estratégia é um sistema de negociação de acompanhamento de tendências que combina vários indicadores técnicos. Ele combina sinais de mercado de várias dimensões, como média móvel (EMA), rastreamento de volatilidade (ATR), tendência de volume de transação (PVT) e oscilador de dinâmica (Ninja), para melhorar a precisão da negociação por meio de sincronia de sinais. A estratégia usa um mecanismo de parada dinâmica e, ao mesmo tempo, controla rigorosamente o risco ao seguir a tendência.
A lógica central da estratégia baseia-se em quatro pilares principais:
A geração de sinais de transação requer que os seguintes requisitos sejam cumpridos:
A estratégia constrói um sistema de negociação relativamente completo por meio de mecanismos de sinergia e parada dinâmica de vários indicadores. A principal vantagem da estratégia reside no seu mecanismo de confirmação de sinal multidimensional e no controle rigoroso do risco. Embora exista um certo risco de atraso e falso sinal, a estratégia deve manter um desempenho estável em diferentes ambientes de mercado por meio de otimização e aperfeiçoamento contínuos.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Triple Indicator Strategy", shorttitle="TIS", overlay=true)
// --- Inputs ---
var string calcGroup = "Calculation Parameters"
atrLength = input.int(22, title="ATR Period", group=calcGroup)
atrMult = input.float(3.0, title="ATR Multiplier", step=0.1, group=calcGroup)
emaLength = input.int(200, title="EMA Length", group=calcGroup)
// --- ATR and EMA Calculations ---
atr = atrMult * ta.atr(atrLength)
ema200 = ta.ema(close, emaLength)
// --- Chandelier Exit Logic ---
longStop = ta.highest(high, atrLength) - atr
shortStop = ta.lowest(low, atrLength) + atr
var int dir = 1
dir := close > shortStop ? 1 : close < longStop ? -1 : dir
buySignal = dir == 1 and dir[1] == -1
sellSignal = dir == -1 and dir[1] == 1
// --- Price Volume Trend (PVT) ---
pvt = ta.cum((close - close[1]) / close[1] * volume)
pvtSignal = ta.ema(pvt, 21)
pvtBuy = ta.crossover(pvt, pvtSignal)
pvtSell = ta.crossunder(pvt, pvtSignal)
// --- Ninja Indicator ---
ninjaOsc = (ta.ema(close, 3) - ta.ema(close, 13)) / ta.ema(close, 13) * 100
ninjaSignal = ta.ema(ninjaOsc, 24)
ninjaBuy = ta.crossover(ninjaOsc, ninjaSignal)
ninjaSell = ta.crossunder(ninjaOsc, ninjaSignal)
// --- Strategy Conditions ---
longCondition = buySignal and close > ema200 and (pvtBuy or ninjaBuy)
shortCondition = sellSignal and close < ema200 and (pvtSell or ninjaSell)
if longCondition
strategy.entry("Buy", strategy.long)
strategy.exit("Exit Long", "Buy", stop=low - atr)
if shortCondition
strategy.entry("Sell", strategy.short)
strategy.exit("Exit Short", "Sell", stop=high + atr)
// --- Plotting ---
plot(ema200, title="EMA 200", color=color.blue, linewidth=2)
plotshape(buySignal, title="Chandelier Buy", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Chandelier Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
// --- Labels for Buy/Sell with price ---
if buySignal
label.new(bar_index, low, "Buy: " + str.tostring(close), color=color.green, style=label.style_label_up, yloc=yloc.belowbar, size=size.small)
if sellSignal
label.new(bar_index, high, "Sell: " + str.tostring(close), color=color.red, style=label.style_label_down, yloc=yloc.abovebar, size=size.small)
// --- Alerts ---
alertcondition(longCondition, title="Buy Alert", message="Buy Signal Triggered!")
alertcondition(shortCondition, title="Sell Alert", message="Sell Signal Triggered!")