Тенденция после стратегии, основанной на двойном скользящем среднем перекрестном показателе и многовременном индикаторе DMI

Автор:Чао Чжан, Дата: 2024-03-22 14:23:30
Тэги:

img

Обзор стратегии

Эта статья представляет количественную торговую стратегию под названием Kyrie Crossover @zaytrade. Стратегия сочетает в себе двойной скользящий средний кроссовер и многочасовой индикатор DMI для захвата рыночных тенденций для принятия торговых решений. Ядро стратегии заключается в использовании сигналов кроссовера краткосрочной скользящей средней (10-периодической EMA) и долгосрочной скользящей средней (323-периодической EMA), подтверждая направление и силу тренда с использованием индикаторов DMI в нескольких временных рамках, таких как 5-минутная, 15-минутная, 30-минутная и 1-часовая.

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

Принципы этой стратегии можно разделить на следующие части:

  1. Кроссовер двойной скользящей средней:Стратегия использует краткосрочную EMA (10-периодическую) и долгосрочную EMA (323-периодическую) для отслеживания рыночных тенденций. Когда краткосрочная EMA пересекается выше долгосрочной EMA, это указывает на потенциальную длинную возможность; когда краткосрочная EMA пересекается ниже долгосрочной EMA, это указывает на потенциальную короткую возможность. Этот метод перекрестного пересечения скользящих средних может эффективно идентифицировать переломные моменты рынка и направления тренда.

  2. Индикатор DMI с несколькими временными рамками:Для дальнейшего подтверждения направления и силы тренда стратегия использует индикаторы DMI на нескольких временных отрезках. индикатор DMI состоит из ADX (средний направленный индекс), +DI (положительный направленный индикатор) и -DI (отрицательный направленный индикатор). путем сравнения относительной силы +DI и -DI можно определить, является ли текущий тренд бычьим или медвежьим. стратегия рассчитывает индикаторы DMI на 5-минутных, 15-минутных, 30-минутных и 1-часовых временных отрезках для получения более всеобъемлющей информации о тренде.

  3. Подтверждение тенденции:Стратегия подтверждает тенденцию, всесторонне рассматривая сигналы пересечения скользящей средней величины и индикаторы DMI с несколькими временными рамками. Когда сигнал пересечения скользящей средней величины соответствует направлению тренда, указанному индикаторами DMI, стратегия генерирует соответствующие торговые сигналы. Например, когда краткосрочная EMA пересекает длинную EMA, и несколько временных рамок индикаторов DMI показывают рост, стратегия генерирует длинный сигнал.

  4. Управление рисками:Стратегия использует метод размещения позиций на основе процента риска.riskPercentageEMAКроме того, стратегия использует ордера стоп-лосса для ограничения потенциальных потерь.

Преимущества стратегии

  1. Захватывание трендов:Благодаря сочетанию двойных показателей скользящей средней и многочасовых показателей DMI, стратегия может эффективно отслеживать основные тенденции на рынке.

  2. Подтверждение с несколькими временными рамками:Стратегия рассчитывает индикаторы DMI на нескольких временных отрезках, включая 5-минутный, 15-минутный, 30-минутный и 1-часовой.

  3. Гибкие параметры:Стратегия предлагает различные регулируемые параметры, такие как краткосрочный период EMA, долгосрочный период EMA, период сглаживания ADX и длина DI. Пользователи могут оптимизировать эти параметры на основе своего стиля торговли и характеристик рынка для достижения лучших результатов торговли.

  4. Управление рисками:Стратегия включает в себя метод размещения позиций на основе процента риска, позволяющий пользователям контролировать риск каждой сделки, устанавливаяriskPercentageEMAКроме того, стратегия использует ордера стоп-лосса для ограничения потенциальных потерь, повышая эффективность управления рисками.

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

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

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

  3. Шопи Маркетс:На нестабильных рынках колебания цен могут приводить к частым пересечениям скользящих средних и изменениям показателей DMI. Это может привести к тому, что стратегия генерирует больше торговых сигналов, увеличивает торговые затраты и риски снижения. Поэтому эффективность стратегии может быть затронута нестабильными рыночными условиями.

  4. События Черного Лебедя:Стратегия основана на исторических данных и статистических моделях. При экстремальных рыночных событиях, таких как события черного лебедя, стратегия может не реагировать правильно и своевременно. Это может привести к значительным потерям для стратегии в этих особых обстоятельствах.

Руководство по оптимизации

  1. Динамическая регулировка параметров:Рассмотреть возможность внедрения механизма динамической корректировки параметров, который адаптивно корректирует параметры стратегии на основе волатильности рынка и силы тренда.

  2. Многофакторное подтверждение:В дополнение к скользящим средним перекрестным показателям и показателям DMI могут быть введены другие технические показатели или фундаментальные факторы для дальнейшего подтверждения тенденций.

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

  4. Размер позиции:Внедрение более продвинутых методов размещения позиций, таких как критерий Келли или фиксированное фракционное инвестирование.

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

Заключение

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


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Kyrie Crossover @zaytrade ", overlay=true, calc_on_every_tick=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = ta.crossover(emaShort, emaLong)
shortConditionEMA = ta.crossunder(emaShort, emaLong)

// Input parameters for DMI
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma((up > down ? up : 0), len) / truerange)
    minus = fixnan(100 * ta.rma((down > up ? down : 0), len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

// Function to get trend and strength for a given timeframe
getTrendAndStrength(_source, _dilen, _adxlen) =>
    [adxValue, up, down] = adx(_dilen, _adxlen)
    var string trendIndication = ""
    var string trendStrength = ""
    if (up > down) or ((up > down) and (up > down) and (up > adxValue)) // Bullish condition
        trendIndication := "Bullish"
        trendStrength := "Strengthening" 
    else if (down > up) or ((down > up) and (down > up) and (down > adxValue)) // Bearish condition
        trendIndication := "Bearish"
        trendStrength := "Weakening" 
    else
        trendIndication := "No Clear Trend"
        trendStrength := "Sideways"
    [trendIndication, trendStrength]

// Get trend and strength for selected timeframes
[tf1_trend, tf1_strength] = request.security(syminfo.tickerid, "5", getTrendAndStrength(close, dilen, adxlen))
[tf2_trend, tf2_strength] = request.security(syminfo.tickerid, "15", getTrendAndStrength(close, dilen, adxlen))
[tf3_trend, tf3_strength] = request.security(syminfo.tickerid, "30", getTrendAndStrength(close, dilen, adxlen))
[tf4_trend, tf4_strength] = request.security(syminfo.tickerid, "60", getTrendAndStrength(close, dilen, adxlen))
[current_trend, _] = getTrendAndStrength(close, dilen, adxlen)

// Define colors based on trend indication
tf1_color = tf1_trend == "Bullish" ? color.green : (tf1_trend == "Bearish" ? color.red : color.white)
tf2_color = tf2_trend == "Bullish" ? color.green : (tf2_trend == "Bearish" ? color.red : color.white)
tf3_color = tf3_trend == "Bullish" ? color.green : (tf3_trend == "Bearish" ? color.red : color.white)
tf4_color = tf4_trend == "Bullish" ? color.green : (tf4_trend == "Bearish" ? color.red : color.white)
current_color = current_trend == "Bullish" ? color.green : (current_trend == "Bearish" ? color.red : color.white)

// Create and fill the enhanced table for DMI
var table dmiTable = na
if (barstate.islast)
    dmiTable := table.new(position.top_right, 6, 1)
    table.cell(dmiTable, 0, 0, "DMI Metrics", bgcolor=color.new(color.black, 90), width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 1, 0, "5m Trend: " + tf1_trend, bgcolor=tf1_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 2, 0, "15m Trend: " + tf2_trend, bgcolor=tf2_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 3, 0, "30m Trend: " + tf3_trend, bgcolor=tf3_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 4, 0, "1h Trend: " + tf4_trend, bgcolor=tf4_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 5, 0, "Current Trend: " + current_trend, bgcolor=current_color, width=15, height=4, text_color=color.white)

// Strategy logic
if (longConditionEMA)
    strategy.entry("Long", strategy.long)
if (shortConditionEMA)
    strategy.entry("Short", strategy.short)


Больше