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

Движущийся средний тренд Т3 по стратегии с последующей остановкой потери

Автор:Чао Чжан, Дата: 2024-11-28 15:17:13
Тэги:T3MASMAЕМА

img

Обзор

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

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

Стратегия состоит из трех основных компонентов: идентификация тренда, подтверждение сигнала и управление рисками. Во-первых, она использует T3 Moving Average в качестве основного инструмента идентификации тренда, который уменьшает задержку при сохранении плавности с помощью шестикратных экспоненциальных вычислений скользящих сред. Во-вторых, она вычисляет диапазоны волатильности цен с использованием индикатора лимонного тренда и фильтрует сигналы с помощью индикатора 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)

Связанные

Больше