Сетка отслеживания тренда, динамическая регулировка позиции, количественная стратегия

TTM EMA GRID DCA ATR SMA
Дата создания: 2024-12-12 11:19:17 Последнее изменение: 2024-12-12 11:19:17
Копировать: 0 Количество просмотров: 169
1
Подписаться
1166
Подписчики

Сетка отслеживания тренда, динамическая регулировка позиции, количественная стратегия

Обзор

Стратегия представляет собой динамическую торговую систему сетки на основе показателей TTM, которая определяет направление рыночных тенденций, рассчитывая показательную скользящую среднюю ((EMA) высоких и низких точек, и развертывает торговую систему сетки вокруг динамически обновляемой базовой цены. Направление сетки и уровень цены изменяются в зависимости от динамики тенденций, и сделки совершаются, когда цена пересекает заранее определенный уровень сетки.

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

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

  1. На основе параметров ttmPeriod рассчитываются две ЭМА: низкая ЭМА (lowMA) и высокая ЭМА (highMA)
  2. Между highMA и lowMA определяются два уровня порога:
    • lowThird: нижняя 13 позиция
    • highThird: нижние 23 позиции
  3. Определить состояние TTM в зависимости от того, где цена закрытия находится по отношению к этим порогам:
    • Возвращение 1 (вверх) при закрытии цены выше highThird
    • Возвращение к нулю, когда конечная цена ниже lowThird
    • Возвращение в нейтральное состояние, когда цена закрытия находится между lowThird и highThird

Торговая система сетки динамически меняется в зависимости от состояния TTM:

  1. Обновление сетчатой цены и направления при изменении статуса TTM
  2. Уровень цены на покупку и продажу в зависимости от направления и расстояния сетки
  3. Выполнение соответствующих операций по покупке или продаже при прорыве цены через сетевой уровень

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

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

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

  1. Задержка определения тренда: существует определенная задержка в показателях TTM на основе EMA, что может привести к задержке сигналов в точке перехода тренда
  2. Риск рыночных потрясений: Частые переключения направления решетки могут привести к чрезмерной торговле и потере комиссионных в поперечно-сдвижных рынках
  3. Стресс в управлении капиталом: большие объемы капитала требуются при одновременном запуске нескольких сетей, что может повлиять на практическую осуществимость стратегии
  4. Влияние скольжения: высокочастотная сетка может столкнуться с большим скольжением при недостаточной ликвидности, что влияет на эффективность стратегии

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

  1. Оптимизация для оценки тенденций:
    • Внедрение многовременного анализа для повышения точности определения тенденций
    • Подтверждение тренда в сочетании с другими техническими показателями, такими как RSI, MACD и т. Д.
  2. Оптимизация параметров сетки:
    • Динамическая коррекция интервала решётки в зависимости от колебаний
    • Введение механизма адаптивной корректировки на уровне сетки
  3. Улучшение управления деньгами:
    • Динамическое распределение позиций
    • Повышение механизма ценообразования рисков
  4. Улучшение механизмов исполнения:
    • Дополнительные механизмы остановки и остановки
    • Оптимизация сроков исполнения заказов

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

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

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

//@version=5
strategy("TTM Grid Strategy", overlay=true)

// Input parameters
int ttmPeriod = input.int(6, minval=1, title="TTM Period")
int gridLevels = input.int(5, minval=2, title="Grid Levels")
float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)")

// Calculate TTM State
ttmState() =>
    lowMA = ta.ema(low, ttmPeriod)
    highMA = ta.ema(high, ttmPeriod)
    lowThird = (highMA - lowMA) / 3 + lowMA
    highThird = 2 * (highMA - lowMA) / 3 + lowMA

    if close > highThird
        1
    else if close < lowThird
        0
    else
        -1

// State tracking variables
var float gridBasePrice = 0.0
var int gridDirection = -1

// Determine grid state
updateGridState(float currentClose, int currentState) =>
    float newBasePrice = gridBasePrice
    int newDirection = gridDirection

    if currentState != -1 and currentState != gridDirection
        newBasePrice := currentClose
        newDirection := currentState
    
    [newBasePrice, newDirection]

// Calculate grid levels
calcGridLevels(float basePrice, int direction, int levels) =>
    float[] buyLevels = array.new_float(levels)
    float[] sellLevels = array.new_float(levels)

    for i = 1 to levels
        multiplier = i * gridSpacing
        if direction == 1  // Buy grid
            array.set(buyLevels, i-1, basePrice * (1 - multiplier))
            array.set(sellLevels, i-1, basePrice * (1 + multiplier))
        else  // Sell grid
            array.set(buyLevels, i-1, basePrice * (1 + multiplier))
            array.set(sellLevels, i-1, basePrice * (1 - multiplier))
    
    [buyLevels, sellLevels]

// Execute grid trades
executeGridTrades(float basePrice, int direction, int levels) =>
    [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels)

    for i = 0 to levels - 1
        float buyLevel = array.get(buyLevels, i)
        float sellLevel = array.get(sellLevels, i)

        if direction == 1  // Buy grid
            if low <= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if high >= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))
        else  // Sell grid
            if high >= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if low <= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))

// Main strategy logic
currentState = ttmState()
[newGridBasePrice, newGridDirection] = updateGridState(close, currentState)

// Update global variables
if newGridBasePrice != gridBasePrice
    gridBasePrice := newGridBasePrice
if newGridDirection != gridDirection
    gridDirection := newGridDirection

// Execute grid trades
executeGridTrades(newGridBasePrice, newGridDirection, gridLevels)

// Visualization
plotColor = newGridDirection == 1 ? color.green : color.red
plot(newGridBasePrice, color=plotColor, style=plot.style_cross)