Динамическая тенденция, следующая за несколькими индикаторами, пакетная стратегия получения прибыли

EMA MACD RSI ATR
Дата создания: 2025-02-10 14:49:11 Последнее изменение: 2025-02-10 14:49:11
Копировать: 2 Количество просмотров: 378
1
Подписаться
1617
Подписчики

Динамическая тенденция, следующая за несколькими индикаторами, пакетная стратегия получения прибыли

Обзор

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

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

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

  1. Входные сигналы используют фильтры с использованием нескольких технологических показателей: скрещивание быстрой ЭМА с медленной ЭМА, MACD-форекс/смертный форекс и RSI сверхпокупки сверхпродажи. Многоголовый вход требует прохождения медленной ЭМА, MACD-форекса на быстрой ЭМА и RSI ниже 70, а вход в пустой рынок требует прохождения медленной ЭМА, MACD-смертного форекса под быстрой ЭМА и RSI выше 30.
  2. Контроль риска применяет фиксированный стоп-процент, установленный на уровне 5% от цены открытия позиции.
  3. Механизм разделения стопов: первый стоп находится на уровне 8%, второй стоп - на уровне 12%, а второй стоп - на уровне 12%, чтобы динамически адаптироваться к рыночным колебаниям.
  4. Управление позициями основывается на динамическом расчете ATR, максимальный риск на одну позицию контролируется на уровне 5%, а максимальная позиция не превышает 40% от доли в аккаунте.

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

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

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

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

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

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

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

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

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

//@version=6
strategy("Hang Strategy Aggressive", overlay=true, initial_capital=1000, currency=currency.USDT, default_qty_type=strategy.cash, default_qty_value=100)

// === 参数设置 ===
fastLength = input.int(5, "快速EMA长度")
slowLength = input.int(15, "慢速EMA长度")
rsiLength = input.int(7, "RSI长度")
atrPeriod = input.int(10, "ATR周期")
leverageMultiple = input.float(3.0, "杠杆倍数", minval=1.0, step=0.5)

// === 止盈止损参数 ===
stopLossPercent = input.float(5.0, "止损百分比", minval=1.0, step=0.5)
firstTakeProfitPercent = input.float(8.0, "第一止盈点百分比", minval=1.0, step=0.5)
secondTakeProfitPercent = input.float(12.0, "第二止盈点百分比", minval=1.0, step=0.5)
firstTakeProfitQtyPercent = input.float(50.0, "第一止盈仓位百分比", minval=1.0, maxval=100.0, step=5.0)

// === 技术指标 ===
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
superFastEMA = ta.ema(close, 3)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrPeriod)

// === 趋势判断 ===
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
macdCross = (macdLine > signalLine) and (macdLine[1] < signalLine[1])
macdCrossDown = (macdLine < signalLine) and (macdLine[1] > signalLine[1])

// === 交易信号 ===
longCondition = (fastEMA > slowEMA) and macdCross and (rsi < 70)
shortCondition = (fastEMA < slowEMA) and macdCrossDown and (rsi > 30)

// === 平仓信号 ===
exitLong = shortCondition or (fastEMA < slowEMA)
exitShort = longCondition or (fastEMA > slowEMA)

// === 仓位管理 ===
maxRiskPerTrade = 0.05
basePosition = strategy.equity * maxRiskPerTrade
atrAmount = atr * close
riskPosition = basePosition / atrAmount * leverageMultiple
positionSize = math.min(riskPosition, strategy.equity * 0.4 / close)

// === 交易状态变量 ===
var isLong = false
var isShort = false
var partialTpTriggered = false
var float stopPrice = na
var float firstTpPrice = na
var float secondTpPrice = na
var float firstTpQty = na

// === 交易执行 ===
// 多头入场
if (longCondition and not isLong and not isShort)
    strategy.entry("多", strategy.long, qty=positionSize)
    isLong := true
    partialTpTriggered := false

// 空头入场
if (shortCondition and not isShort and not isLong)
    strategy.entry("空", strategy.short, qty=positionSize)
    isShort := true
    partialTpTriggered := false

// === 止盈止损逻辑 ===
if (strategy.position_size > 0)  // 多仓
    stopPrice := strategy.position_avg_price * (1 - stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 + firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 + secondTakeProfitPercent/100)
    
    if (close[1] <= stopPrice or low <= stopPrice)
        strategy.close_all("多止损")
        isLong := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] >= firstTpPrice or high >= firstTpPrice))
        strategy.order("多第一止盈", strategy.short, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := high * (1 + 0.04)  // 基于当前最高价再上涨4%
    
    if (close[1] >= secondTpPrice or high >= secondTpPrice)
        strategy.close_all("多第二止盈")
        isLong := false
        partialTpTriggered := false

if (strategy.position_size < 0)  // 空仓
    stopPrice := strategy.position_avg_price * (1 + stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 - firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 - secondTakeProfitPercent/100)
    
    if (close[1] >= stopPrice or high >= stopPrice)
        strategy.close_all("空止损")
        isShort := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] <= firstTpPrice or low <= firstTpPrice))
        strategy.order("空第一止盈", strategy.long, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := low * (1 - 0.04)  // 基于当前最低价再下跌4%
    
    if (close[1] <= secondTpPrice or low <= secondTpPrice)
        strategy.close_all("空第二止盈")
        isShort := false
        partialTpTriggered := false

// === 其他平仓条件 ===
if (exitLong and isLong)
    strategy.close_all("多平仓")
    isLong := false
    partialTpTriggered := false

if (exitShort and isShort)
    strategy.close_all("空平仓")
    isShort := false
    partialTpTriggered := false

// === 绘图 ===
plot(fastEMA, "快速EMA", color=color.blue)
plot(slowEMA, "慢速EMA", color=color.red)
plot(superFastEMA, "超快EMA", color=color.green)

// 绘制止盈止损线
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, "开仓价", color=color.yellow)
plot(strategy.position_size != 0 ? stopPrice : na, "止损线", color=color.red)
plot(strategy.position_size != 0 ? firstTpPrice : na, "第一止盈线", color=color.green)
plot(strategy.position_size != 0 ? secondTpPrice : na, "第二止盈线", color=color.blue)