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

RSI ADX ATR EMA TP
Дата создания: 2024-12-20 14:24:34 Последнее изменение: 2024-12-20 14:24:34
Копировать: 0 Количество просмотров: 397
1
Подписаться
1617
Подписчики

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

Обзор

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

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

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

  1. Вступительные требования выполняются одновременно: объем торгов больше 1 млн, ADX больше 25 показывает явную тенденцию, RSI больше 60 показывает сильную динамику, ATR больше 2 обеспечивает достаточно пространства для колебаний, цена поддерживает восходящую тенденцию выше 200-дневной средней линии.
  2. Степенная стоп-дизайн: первая стоп-дизайн находится на 15%, ликвидация 50% позиций; второй стоп-дизайн находится на 30%, ликвидация оставшихся позиций. Эта конструкция может заблокировать часть прибыли заранее, но не пропустить большую тенденцию.
  3. Стоп-контроль: установка 15% стоп-паузы, а также ликвидация позиций, когда RSI ниже 50 или цена падает ниже 200 средней линии.
  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)