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

Тенденция в соответствии со стратегией динамической сетки размеров позиций

Автор:Чао Чжан, Дата: 2024-12-12 11:19:17
Тэги:ТТМЕМАГРИДDCAATRSMA

 Trend Following Dynamic Grid Position Sizing Strategy

Обзор

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

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

Основная логика заключается в расчете состояния TTM, реализованном с помощью следующих шагов: 1. Вычислить две EMA на основе параметра ttmPeriod: EMA минимумов (lowMA) и максимумов (highMA) 2. Определить два пороговых уровня между высокой и низкой МР: - Низкий Третий:13положение снизу - Высокий Третий:23положение снизу 3. Определить состояние TTM на основе ценовой позиции закрытия относительно этих порогов: - Возвращает 1 (верхний тренд), когда закрытие превышает максимум - возвращает 0 (низкий тренд), когда закрытие ниже минимума - возвращает -1 (нейтральное состояние), когда close находится между 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)

Связанные

Больше