В процессе загрузки ресурсов... загрузка...

Динамическая стратегия торговли стоп-лосс EMA

Автор:Чао Чжан, Дата: 2024-06-17 16:17:31
Тэги:ЕМАРСИMACD

img

Обзор

Эта стратегия генерирует сигналы покупки и продажи на основе перекрестки 20-дневных и 200-дневных экспоненциальных скользящих средних (EMAs), подтвержденных индикаторами относительной силы (RSI) и конвергенции скользящего среднего (MACD).

Принципы стратегии

  1. Вычислить 20-дневную и 200-дневную EMA. Сигнал покупки генерируется, когда 20-дневная EMA пересекает 200-дневную EMA, а сигнал продажи генерируется, когда 20-дневная EMA пересекает 200-дневную EMA.
  2. Используйте RSI и MACD для подтверждения сигналов перекрестного движения EMA. Сигнал покупки выполняется только тогда, когда RSI выше 50, а линия MACD выше линии сигнала. Сигнал продажи выполняется только тогда, когда RSI ниже 50 и линия MACD ниже линии сигнала.
  3. Установите фиксированную целевую прибыль (например, 20%) и начальный уровень стоп-лосса (например, 10%).
  4. Когда нереализованная прибыль достигает целевой прибыли, цена стоп-лосса поднимается до 10% ниже текущей цены, внедряя динамический стоп-лосс.
  5. Закрыть позицию для получения прибыли, когда цена достигнет динамического уровня стоп-лосса.

Преимущества стратегии

  1. Объединение нескольких технических индикаторов для подтверждения торговых сигналов повышает надежность сигнала.
  2. Динамический метод стоп-лосса помогает зафиксировать прибыль, давая ценам некоторое пространство для отступления, избегая преждевременного закрытия позиции.
  3. Установление фиксированной цели прибыли помогает контролировать риски и достигать стабильной доходности.

Стратегические риски

  1. Кроссоверные сигналы EMA могут часто генерировать ложные сигналы, что приводит к увеличению затрат на торговлю.
  2. На нестабильных рынках стратегия может испытывать последовательные потери.
  3. Установленные целевые показатели прибыли и уровни стоп-лосса могут не хорошо адаптироваться к различным рыночным условиям и могут потребовать корректировки на основе волатильности рынка.

Направления оптимизации стратегии

  1. Включить дополнительные технические показатели или показатели настроения на рынке для повышения точности и надежности сигналов.
  2. Принять адаптивные целевые показатели прибыли и уровни стоп-лосса, которые динамически корректируются на основе волатильности рынка и характеристик активов.
  3. Рассматривать рыночные тенденции и циклы волатильности и применять различные параметры в различных рыночных условиях.

Резюме

Эта стратегия направлена на достижение стабильной прибыли на трендовых рынках. Однако на нестабильных рынках стратегия может столкнуться с рисками частой торговли и последовательных потерь. Поэтому необходима дальнейшая оптимизация и улучшения для повышения адаптивности и надежности стратегии.


/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover Strategy with RSI and MACD Confirmation and Dynamic Trailing Stop Loss", overlay=true)

// Calculate EMAs
ema20 = ta.ema(close, 20)
ema200 = ta.ema(close, 200)

// Calculate RSI
rsi = ta.rsi(close, 14)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Plot EMAs, RSI, and MACD on the chart
plot(ema20, color=color.blue, title="EMA 20")
plot(ema200, color=color.red, title="EMA 200")
hline(70, "Overbought", color=color.red)
hline(30, "Oversold", color=color.green)
plot(rsi, title="RSI", color=color.orange)
hline(0, "Zero Line", color=color.gray)
plot(macdLine, title="MACD Line", color=color.aqua)
plot(signalLine, title="Signal Line", color=color.fuchsia)

// Strategy parameters
targetProfitPercent = 20
trailingStopIncrement = 10

// Strategy variables
var float initialStopLevel = na
var float trailingStopLevel = na

// Strategy rules with RSI and MACD confirmation
longCondition = ta.crossover(ema20, ema200) and rsi > 50 and macdLine > signalLine
shortCondition = ta.crossunder(ema20, ema200) and rsi < 50 and macdLine < signalLine

// Execute trades
if (longCondition)
    strategy.entry("Buy Call", strategy.long)
    initialStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial stop-loss at 10% below entry price

if (shortCondition)
    strategy.entry("Buy Put", strategy.short)

// Calculate profit and loss targets
takeProfit = strategy.position_avg_price * (1 + targetProfitPercent / 100) // 20% profit target

// Update trailing stop loss
if (strategy.opentrades > 0)
    if (strategy.position_size > 0) // Long position
        if (strategy.netprofit >= takeProfit)
            // Update stop-loss based on profit increments
            if (trailingStopLevel == na)
                trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial trailing stop at 10% below entry price
            else
                if (strategy.position_avg_price * (1 - 0.10) > trailingStopLevel)
                    trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Increase stop-loss to 10% below current price
        
        // Apply trailing stop loss
        strategy.exit("Take Profit", "Buy Call", stop=trailingStopLevel)

// Plot buy and sell signals on the chart
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")


Связанные

Больше