Стратегия количественной торговли с отслеживанием тренда скользящей средней T3 и скользящим стоп-лоссом

T3MA SMA EMA
Дата создания: 2024-11-28 15:17:13 Последнее изменение: 2024-11-28 15:17:13
Копировать: 1 Количество просмотров: 505
1
Подписаться
1617
Подписчики

Стратегия количественной торговли с отслеживанием тренда скользящей средней T3 и скользящим стоп-лоссом

Обзор

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

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

В основе этой стратегии лежат три основные части: выявление тенденций, подтверждение сигналов и управление рисками. Во-первых, использование T3 Moving Average в качестве основного инструмента для выявления тенденций, T3 Average с помощью шестикратного индекса Moving Average позволяет эффективно снизить отставание и сохранить плавность. Во-вторых, с помощью показателя Lemon Trend, который рассчитывает диапазон колебаний цены, в сочетании с показателем TDFI, сигналы фильтруются, и только тогда, когда цена переходит диапазон колебаний и подтверждается показателем TDFI, появляется торговый сигнал.

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

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

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

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

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

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

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

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

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

//@version=5
strategy("Lemon Trend Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Input parameters
lookbackPeriod = input.int(14, "Lookback Period")
t3Length = input.int(200, "T3 MA Length")
t3Factor = input.float(0.7, "T3 Factor", minval=0, maxval=1)

// 移动止损参数
trailingStopPct = input.float(1.5, "移动止损百分比", minval=0.1, step=0.1)
trailingStopActivationPct = input.float(1.0, "移动止损激活百分比", minval=0.1, step=0.1)
 
// === T3 Moving Average Function ===
t3(src, length, factor) =>
    // First EMA
    e1 = ta.ema(src, length)
    // Second EMA
    e2 = ta.ema(e1, length)
    // Third EMA
    e3 = ta.ema(e2, length)
    // Fourth EMA
    e4 = ta.ema(e3, length)
    // Fifth EMA
    e5 = ta.ema(e4, length)
    // Sixth EMA
    e6 = ta.ema(e5, length)
   
    c1 = -factor * factor * factor
    c2 = 3 * factor * factor + 3 * factor * factor * factor
    c3 = -6 * factor * factor - 3 * factor - 3 * factor * factor * factor
    c4 = 1 + 3 * factor + factor * factor * factor + 3 * factor * factor
   
    t3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
 
// Calculate T3 MA
t3ma = t3(close, t3Length, t3Factor)
plot(t3ma, "T3 MA", color=color.blue)
 
// === Lemon Trend Indicator ===
highLowDiff = high - low
normalizedDiff = ta.sma(highLowDiff, lookbackPeriod)
upperBand = ta.highest(high, lookbackPeriod)
lowerBand = ta.lowest(low, lookbackPeriod)
buySignal = ta.crossover(close, upperBand - normalizedDiff)
sellSignal = ta.crossunder(close, lowerBand + normalizedDiff)
 
// === TDFI Indicator ===
tdfiLength = input.int(14, "TDFI Length")
tdfi = ta.ema(close - close[1], tdfiLength)
tdfiSignal = ta.ema(tdfi, 9)
 
// Plot signals
plotshape(buySignal and tdfi > tdfiSignal and close > t3ma, "Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal and tdfi < tdfiSignal and close < t3ma, "Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
 
// === Strategy Logic ===
longCondition = buySignal and tdfi > tdfiSignal and close > t3ma
shortCondition = sellSignal and tdfi < tdfiSignal and close < t3ma
 
// 计算移动止损价格
var float longTrailingStop = na
var float shortTrailingStop = na

// 更新移动止损价格
if (strategy.position_size > 0)
    threshold = strategy.position_avg_price * (1 + trailingStopActivationPct / 100)
    if (high > threshold)
        stopPrice = high * (1 - trailingStopPct / 100)
        if (na(longTrailingStop) or stopPrice > longTrailingStop)
            longTrailingStop := stopPrice
    
if (strategy.position_size < 0)
    threshold = strategy.position_avg_price * (1 - trailingStopActivationPct / 100)
    if (low < threshold)
        stopPrice = low * (1 + trailingStopPct / 100)
        if (na(shortTrailingStop) or stopPrice < shortTrailingStop)
            shortTrailingStop := stopPrice

// Entry orders
if (longCondition)
    strategy.entry("Long", strategy.long)
    longTrailingStop := na
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortTrailingStop := na
 
// Calculate stop loss and take profit levels
longStopLoss = ta.lowest(low, lookbackPeriod)
shortStopLoss = ta.highest(high, lookbackPeriod)
 
// Exit conditions with fixed R:R
fixedRR = input.float(1.8, "Fixed Risk:Reward Ratio")
partialExitPct = input.float(50.0, "Partial Exit Percentage", minval=0, maxval=100) / 100
 
// 综合移动止损和固定止损
if (strategy.position_size > 0)
    longTakeProfit = strategy.position_avg_price + (strategy.position_avg_price - longStopLoss) * fixedRR
    stopPrice = na(longTrailingStop) ? longStopLoss : math.max(longStopLoss, longTrailingStop)
    strategy.exit("Long Exit", "Long", qty_percent=partialExitPct, stop=stopPrice, limit=longTakeProfit)
    
if (strategy.position_size < 0)
    shortTakeProfit = strategy.position_avg_price - (shortStopLoss - strategy.position_avg_price) * fixedRR
    stopPrice = na(shortTrailingStop) ? shortStopLoss : math.min(shortStopLoss, shortTrailingStop)
    strategy.exit("Short Exit", "Short", qty_percent=partialExitPct, stop=stopPrice, limit=shortTakeProfit)

// 绘制移动止损线
plot(strategy.position_size > 0 ? longTrailingStop : na, "Long Trailing Stop", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? shortTrailingStop : na, "Short Trailing Stop", color=color.red, style=plot.style_linebr)