
A estratégia combina o uso da linha média EMA e do MACD para identificar sinais de tendência em múltiplos quadros temporais para capturar tendências de linha média e longa. A operação de acompanhamento de tendência é executada quando a tendência de curto prazo coincide com a direção da tendência de médio e longo prazo. A estratégia também usa o indicador ATR para definir um stop loss e controlar o risco de flutuação.
A estratégia julga a direção da tendência de médio e longo prazo com a linha de 50 dias EMA e a linha de 100 dias EMA. Quando a tendência de curto prazo é identificada pelo indicador MACD, julgue se a direção da tendência de curto prazo está de acordo com a direção da tendência de médio e longo prazo. Se for, faça uma operação de acompanhamento da tendência.
Concretamente, quando o MACD atravessa a linha lenta na linha rápida e fecha > 50 dias de EMA e fecha > 100 dias de EMA, faça mais; quando o MACD atravessa a linha lenta sob a linha rápida e fecha < 50 dias de EMA e fecha < 100 dias de EMA, faça vazio.
Além disso, a estratégia usa o indicador ATR para calcular a amplitude de flutuação e definir o preço de parada de perda. O ATR de um determinado múltiplo do preço de fechamento como ponto de parada.
Resposta:
A estratégia integra o uso de indicadores como EMA, MACD e ATR para realizar operações de acompanhamento de tendências em vários quadros temporais. Através da otimização de parâmetros, espera-se obter uma melhor taxa de retorno da estratégia. Ao mesmo tempo, é necessário prevenir o atraso dos indicadores, o ajuste de parâmetros e o controle inadequado da volatilidade.
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA-50, EMA-100, and MACD Strategy with ATR for Stop Loss/Profit", overlay=true)
// MACD hesaplama
fastLength = input(12, title="Fast Length")
slowLength = input(26, title="Slow Length")
signalLength = input(9, title="Signal Length")
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalLength)
// EMA-50 ve EMA-100 hesaplama
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
// ATR hesaplama
atrLength = input(14, title="ATR Length")
atrValue = ta.atr(atrLength)
// Take Profit ve Stop Loss çoklayıcıları
takeProfitMultiplier = input(3.0, title="Take Profit Multiplier") // TP, 3 katı ATR
stopLossMultiplier = input(1.0, title="Stop Loss Multiplier")
// Long Pozisyon Koşulları
longCondition = ta.crossover(macdLine, signalLine) and close > ema50 and close > ema100
// Short Pozisyon Koşulları
shortCondition = ta.crossunder(macdLine, signalLine) and close < ema50 and close < ema100
// Take Profit ve Stop Loss Seviyeleri
takeProfitLevel = close + takeProfitMultiplier * atrValue
stopLossLevel = close - stopLossMultiplier * atrValue
// Long Pozisyon İşlemleri
strategy.entry("Long", strategy.long, when=longCondition)
strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
// Short Pozisyon İşlemleri
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)
// Grafikte Gösterme
plot(ema50, color=color.blue, title="EMA-50")
plot(ema100, color=color.red, title="EMA-100")
hline(0, "Zero Line", color=color.gray)