Автоматизированный торговый тренд, следующий за динамическими стратегиями управления рисками

MA MACD ATR TP/SL VOL
Дата создания: 2025-04-03 13:43:11 Последнее изменение: 2025-04-03 13:43:11
Копировать: 4 Количество просмотров: 400
2
Подписаться
319
Подписчики

Автоматизированный торговый тренд, следующий за динамическими стратегиями управления рисками Автоматизированный торговый тренд, следующий за динамическими стратегиями управления рисками

Обзор

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

Стратегический принцип

Стратегия включает в себя четыре основных технологических компонента:

  1. Определение тенденции в движущихся средних: использование кратковременных ((20 циклов) и долгосрочных ((100 циклов) пересекающихся средних для определения направления тенденции рынка.
  2. Подтверждение MACD-сигнала: проверка эффективности трендового сигнала с помощью MACD-линии и ее относительной позиции к сигнальной линии.
  3. Фильтрация объема сделок: обеспечивает, чтобы сделки происходили в условиях активного рынка, сравнивая текущий объем с историческим средним объемом.
  4. Динамический риск-менеджмент: используйте показатели ATR для расчета стоп-стоп и установки максимальных потерь и максимальных лимитов вывода в день.

Стратегические преимущества

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

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

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

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

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Strategia Semmoncino", shorttitle="semmoncino", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.05)

// Inputs
useVolumeFilter = input.bool(true, title="Usa Filtro di Volume")
volumeThreshold = input.float(1.5, title="Soglia Volume (x Media)", minval=1)
atrPeriod = input.int(14, title="ATR Period", minval=1)
atrMultiplier = input.float(2.0, title="ATR Multiplier", minval=0.1)
takeProfitMultiplier = input.float(6.0, title="Take Profit Multiplier", minval=1.0)  // Aumentato per ottimizzare
riskPerTrade = input.float(2.0, title="Rischio per Trade (%)", minval=0.1) / 100
maxDailyLoss = input.float(2.0, title="Perdita Massima Giornaliera (%)", minval=0.1) / 100
maxDrawdown = input.float(10.0, title="Drawdown Massimo (%)", minval=0.1) / 100
shortMAPeriod = input.int(20, title="MA Breve Termine", minval=1)
longMAPeriod = input.int(100, title="MA Lungo Termine", minval=1)

// MACD Inputs
macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalLength = input.int(9, title="MACD Signal Length")

showSignals = input.bool(true, title="Mostra Segnali di Entrata")

// Prezzi di Apertura e Chiusura delle Candele Precedenti (senza repainting)
prevOpen = ta.valuewhen(1, open, 0)
prevClose = ta.valuewhen(1, close, 0)

// Calculate ATR
atr = ta.atr(atrPeriod)

// Calculate Volume Filter
volumeAvg = ta.sma(volume, 20)
volumeFilter = useVolumeFilter ? volume > (volumeAvg * volumeThreshold) : true

// Calculate Moving Averages
shortMA = ta.sma(close, shortMAPeriod)
longMA = ta.sma(close, longMAPeriod)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
macdConditionLong = macdLine > signalLine
macdConditionShort = macdLine < signalLine

// Determine Trend Direction
uptrend = shortMA > longMA
downtrend = shortMA < longMA

// Determine Order Conditions
longCondition = prevClose > prevOpen and volumeFilter and uptrend and macdConditionLong
shortCondition = prevClose < prevOpen and volumeFilter and downtrend and macdConditionShort

// Calcola la dimensione della posizione basata sul capitale iniziale
initialCapital = strategy.initial_capital
positionSize = (initialCapital * riskPerTrade) / (atr * atrMultiplier)

// Calculate Take Profit and Stop Loss Levels dynamically using ATR
takeProfitLong = close + (atr * takeProfitMultiplier)
stopLossLong = close - (atr * 1.5)  // Ridotto per ottimizzare
takeProfitShort = close - (atr * takeProfitMultiplier)
stopLossShort = close + (atr * 1.5)  // Ridotto per ottimizzare

// Limite di Perdita Giornaliera
var float dailyLossLimit = na
if na(dailyLossLimit) or (time - time) > 86400000 // Se è un nuovo giorno
    dailyLossLimit := strategy.equity * (1 - maxDailyLoss)

// Drawdown Massimo
var float drawdownLimit = na
if na(drawdownLimit)
    drawdownLimit := strategy.equity * (1 - maxDrawdown)

// Controllo delle Perdite
if strategy.equity < dailyLossLimit
    strategy.cancel_all()
    strategy.close_all()
    label.new(bar_index, high, text="Perdita Giornaliera Massima Raggiunta", color=color.red)

if strategy.equity < drawdownLimit
    strategy.cancel_all()
    strategy.close_all()
    label.new(bar_index, high, text="Drawdown Massimo Raggiunto", color=color.red)

// Strategy Entries
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", limit=takeProfitLong, stop=stopLossLong)

if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", limit=takeProfitShort, stop=stopLossShort)

// Plot Entry Signals
plotshape(series=longCondition and showSignals ? close : na, location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")
plotshape(series=shortCondition and showSignals ? close : na, location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")

// Plot Moving Averages
plot(shortMA, color=color.blue, title="MA Breve Termine", linewidth=2)
plot(longMA, color=color.orange, title="MA Lungo Termine", linewidth=2)

// Plot MACD
hline(0, "Zero Line", color=color.gray)
plot(macdLine - signalLine, title="MACD Histogram", color=color.red, style=plot.style_histogram)