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

Конвергенционная стратегия MACD с R:R, ежедневными лимитами и более жесткими стоп-лоссами

Автор:Чао Чжан, Дата: 2024-06-03 16:47:56
Тэги:MACD

img

Обзор

Эта стратегия использует конвергенцию и дивергенцию индикатора MACD для генерации торговых сигналов. Когда линия MACD пересекает линию сигнала, а значение линии MACD больше 1,5 или меньше -1,5, она генерирует длинные и короткие сигналы соответственно. Стратегия устанавливает фиксированные уровни получения прибыли и остановки потерь и вводит концепцию соотношения риск-вознаграждение (R: R). Кроме того, она использует ежедневные предельные потери и лимиты прибыли и более строгий отслеживающий стоп-лосс для лучшего контроля рисков.

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

  1. Расчет линии MACD и линии сигнала индикатора MACD.
  2. Определить ситуации перекрестного действия между линией MACD и линией сигнала, рассматривая при этом, превышает ли значение линии MACD определенные пороговые значения (1.5 и -1.5).
  3. При появлении длинного сигнала открыть длинную позицию с ценой получения прибыли текущей самой высокой цене + 600 минимальных единиц тика и ценой остановки по текущей самой низкой цене - 100 минимальных единиц тика.
  4. При появлении короткого сигнала открыть короткую позицию с ценой получения прибыли от текущей самой низкой цены - 600 минимальных единиц тика и ценой остановки по текущей самой высокой цене + 100 минимальных единиц тика.
  5. Ввести логику последующего стоп-лосса: когда цена повышается (длинная позиция) или падает (короткая позиция) более 300 минимальных тиковых единиц по отношению к цене входа, переместить цену стоп-лосса на цену входа + (цена закрытия - цена входа - 300) для длинных позиций или цену входа - (цена входа - цена закрытия - 300) для коротких позиций.
  6. Установите пределы максимального ежедневного убытка и прибыли: когда ежедневный убыток достигает 600 минимальных тиковых единиц или прибыль достигает 1800 минимальных тиковых единиц, закрыть все позиции.

Анализ преимуществ

  1. Сочетание индикатора MACD с ценовыми пороговыми условиями эффективно отфильтровывает некоторые звуковые сигналы.
  2. Фиксированное соотношение риск-вознаграждение (R:R) позволяет контролировать риск и вознаграждение каждой сделки.
  3. Логика стоп-лосса защищает прибыль после формирования тренда и уменьшает снижение.
  4. Максимальные суточные лимиты по потерям и прибыли помогают контролировать ежедневный риск и избегать чрезмерных потерь или прибыли с последующим снижением.

Анализ рисков

  1. Индикатор MACD имеет эффект задержки, который может привести к задержке или ложным сигналам.
  2. Фиксированные уровни получения прибыли и стоп-лосса могут не адаптироваться к различным рыночным условиям и могут часто возникать на нестабильных рынках.
  3. Логика остановки потерь может не остановить убытки во время изменения тренда, что приводит к возврату прибыли.
  4. Суточные пределы максимальных потерь и прибыли могут привести к тому, что стратегия закрывает позиции преждевременно, когда суточная тенденция ясна, упуская потенциальную прибыль.

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

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

Резюме

Эта стратегия использует конвергенцию и дивергенцию индикатора MACD для генерации торговых сигналов при внедрении мер контроля риска, таких как соотношение риск-вознаграждение, последующая стоп-лосс и ежедневные лимиты.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838

//@version=5
strategy("MACD Convergence Strategy with R:R, Daily Limits, and Tighter Stop Loss", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// MACD settings
fastLength = input.int(12, title="Fast Length", minval=1)
slowLength = input.int(26, title="Slow Length", minval=1)
signalSmoothing = input.int(9, title="Signal Smoothing", minval=1)
source = input(close, title="Source")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)

// Plot MACD and signal line
plot(macdLine, title="MACD Line", color=color.blue)
plot(signalLine, title="Signal Line", color=color.red)

// Define convergence conditions
macdConvergenceUp = ta.crossover(macdLine, signalLine) and macdLine > 1.5
macdConvergenceDown = ta.crossunder(macdLine, signalLine) and macdLine < -1.5

// Define take profit and stop loss

        
    
takeProfit = 600
stopLoss = 100

// Plot buy and sell signals on the chart
plotshape(series=macdConvergenceDown, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")
plotshape(series=macdConvergenceUp, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")

// Execute short and long orders with defined take profit and stop loss
if (macdConvergenceDown)
    strategy.entry("Short", strategy.short, qty=1, stop=high + (stopLoss / syminfo.mintick), limit=low - (takeProfit / syminfo.mintick))

if (macdConvergenceUp)
    strategy.entry("Long", strategy.long, qty=1, stop=low - (stopLoss / syminfo.mintick), limit=high + (takeProfit / syminfo.mintick))

// Trailing stop logic
var float entryPrice = na
var float trailingStopPrice = na

if (strategy.position_size != 0)
    entryPrice := strategy.opentrades.entry_price(0)

if (strategy.position_size > 0)  // For long positions
    if (close - entryPrice > 300)
        trailingStopPrice := entryPrice + (close - entryPrice - 300)

if (strategy.position_size < 0)  // For short positions
    if (entryPrice - close > 300)
        trailingStopPrice := entryPrice - (entryPrice - close - 300)

if (strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice)
    strategy.close("Long", comment="Trailing Stop")

if (strategy.position_size < 0 and not na(trailingStopPrice) and close > trailingStopPrice)
    strategy.close("Short", comment="Trailing Stop")

// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
    startOfDayEquity := strategy.equity

maxDailyLoss = 600
maxDailyProfit = 1800
currentDailyPL = strategy.equity - startOfDayEquity

if (currentDailyPL <= -maxDailyLoss)
    strategy.close_all(comment="Max Daily Loss Reached")

if (currentDailyPL >= maxDailyProfit)
    strategy.close_all(comment="Max Daily Profit Reached")


Связанные

Больше