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

Система управления капиталом на основе динамики RSI и силы тренда ADX

Автор:Чао Чжан, Дата: 2024-12-20 14:24:34
Тэги:РСИADXATRЕМАТП

img

Обзор

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

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

Основная логика стратегии включает следующие ключевые элементы:

  1. Условия вступления требуют одновременного удовлетворения: объем торговли больше 1M, ADX больше 25, что указывает на ясную тенденцию, RSI больше 60, показывающий сильный импульс, ATR больше 2, обеспечивающий достаточный диапазон волатильности, цена выше 200-дневной скользящей средней, поддерживающей восходящий тренд.
  2. Этапированный дизайн получения прибыли: первое получение прибыли на 15%, закрытие 50% позиции; второе получение прибыли на 30%, закрытие оставшейся позиции.
  3. Контроль стоп-лосса: позиция стоп-лосса 15% защищает капитал, а также выходит, когда RSI падает ниже 50 или цена падает ниже 200 MA.
  4. Управление использованием: отслеживание стратегического капитала в режиме реального времени, запуск контроля системного риска и очистка всех позиций при использовании более 30%.

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

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

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

  1. Многоиндикаторная фильтрация может привести к упущению некоторых торговых возможностей
  2. Частые стоп-лосы могут быть вызваны на колеблющихся рынках
  3. Установка фиксированного процента стоп-лосса и выигрыша может не подходить для всех рыночных условий
  4. Стратегия опирается на технические показатели, может иметь недостаточный ответ на фундаментальные внезапные события
  5. Требуется больший размер капитала для удовлетворения требований к объему торговли

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

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

Резюме

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


/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)


Связанные

Больше