В этой статье представлена количественная торговая стратегия под названием “Kyrie Crossover @zaytrade”. Эта стратегия объединяет двунаправленный перекрестный и многочасовой индикатор DMI для принятия торговых решений путем захвата рыночных тенденций. В основе стратегии лежит использование перекрестных сигналов краткосрочного перекрестного ((10-часовой EMA) и долгосрочного перекрестного ((323-часовой EMA), а также объединение показателей DMI с несколькими временными периодами, такими как 5 минут, 15 минут, 30 минут и 1 час, для подтверждения направления и силы тенденции.
Принципы этой стратегии можно разделить на следующие части:
Двойная равномерная скрещивание:Стратегия использует краткосрочную ЭМА ((10 циклов) и долгосрочную ЭМА ((323 циклов) для захвата рыночных тенденций. Когда краткосрочная ЭМА проходит через долгосрочную ЭМА, это означает потенциальные возможности для покупки; когда краткосрочная ЭМА проходит через долгосрочную ЭМА, это означает потенциальные возможности для продажи.
Показатели DMI с множественными временными циклами:Для дальнейшего подтверждения направления и силы тренда в стратегии используется индикатор DMI с несколькими временными периодами. Индикатор DMI состоит из ADX (средний индикатор направленности), + DI (повышающий индикатор направленности) и - DI (снижающий индикатор направленности).
Тенденции подтверждаются:Стратегия подтверждает тренд путем комплексного рассмотрения равнолинейных перекрестных сигналов и многовременных показателей DMI. Стратегия создает соответствующий торговый сигнал, когда равнолинейные перекрестные сигналы совпадают с направлением тренда показателя DMI. Например, когда краткосрочная EMA пересекает долгосрочную EMA, и многовременные показатели DMI показывают тенденцию к повышению.
Управление рисками:Стратегия использует метод управления позициями, основанный на процентах риска.riskPercentageEMA
Параметры для контроля риска на каждой сделке. Кроме того, стратегия использует стоп-лосс, чтобы ограничить потенциальные потери.
Поймать рыночные тенденции:В сочетании с двулинейным скрещиванием и многовременными показателями DMI, стратегия может эффективно улавливать основные тенденции рынка. Этот метод может помочь трейдеру подчиниться широкому направлению рынка и повысить вероятность успешной торговли.
Подтверждение многократного цикла:Стратегия рассчитывает показатели DMI на несколько временных периодов, включая 5 минут, 15 минут, 30 минут и 1 час. Такой многовременный метод анализа может обеспечить более полный и надежный сигнал подтверждения тенденции и уменьшить возникновение ложных сигналов.
Гибкие параметры:Стратегия предоставляет множество регулируемых параметров, таких как краткосрочный цикл EMA, длительный цикл EMA, цикл ADX smoothing и длина DI. Пользователи могут оптимизировать эти параметры в соответствии со своим стилем торговли и рыночными особенностями, чтобы получить лучшую торговую производительность.
Управление рисками:В стратегию встроен метод управления позициями, основанный на процентах риска, который пользователь может настроить,riskPercentageEMA
Параметры для контроля риска на каждой сделке. Кроме того, стратегия также использует стоп-лосс, чтобы ограничить потенциальные потери, повышая эффективность управления рисками.
Параметры оптимизации:В значительной степени эффективность стратегии зависит от выбора параметров. Неправильная настройка параметров может привести к плохой эффективности стратегии и даже к значительному отступлению. Таким образом, в реальных условиях необходимо оптимизировать и тестировать параметры, чтобы найти оптимальную комбинацию параметров, подходящую для текущих рыночных условий.
Задержка в развитии:Поскольку стратегия зависит от среднелинейных пересечений и показателей DMI для подтверждения тренда, в условиях быстрого изменения рынка может быть определенная задержка в создании сигнала. Это означает, что стратегия может пропустить некоторые ранние возможности для тренда или дать сигнал только тогда, когда тренд уже перевернулся.
Рынок в шоке:В шокирующем рынке колебания цен могут привести к частым пересечениям средней линии и изменениям показателя DMI. Это может привести к тому, что стратегия будет генерировать больше торговых сигналов, увеличивая затраты на торговлю и риск отмены. Таким образом, в шокирующем рынке, эффективность стратегии может быть затронута.
“Черная лебедь”:Стратегия, основанная на исторических данных и статистических моделях, может не реагировать на некоторые экстремальные рыночные события, такие как события с черной свиньей. Это может привести к тому, что стратегия понесет большие потери в этих особых случаях.
Изменение динамических параметров:Можно рассмотреть возможность внедрения механизмов динамической корректировки параметров, адаптируя параметры стратегии в зависимости от волатильности рынка и интенсивности тренда. Это может помочь стратегии лучше адаптироваться к различным рыночным условиям и повысить устойчивость стратегии.
Многофакторное подтверждение:Помимо среднелинейного пересечения и показателя DMI, для дальнейшего подтверждения тенденции могут быть введены другие технические показатели или фундаментальные факторы. Например, для получения более надежных торговых сигналов могут быть объединены такие показатели, как объем оборота, волатильность и рыночные настроения.
Оптимизация стоп-лосса:Можно оптимизировать местоположение стоп-стоп-убытков, например, использовать методы, такие как мобильный стоп, динамический стоп. Это может помочь стратегии лучше защитить прибыль, ограничивая потенциальные потери.
Управление позициями:Можно внедрить более продвинутые методы управления позициями, такие как формула Келли, фиксированная пропорциональная инвестиция и т. д. Это может помочь стратегии динамично регулировать позиции в различных рыночных условиях, повысить эффективность использования средств и способность контролировать риск.
Оптимизация машинного обучения:Можно попытаться объединить алгоритмы машинного обучения с этой стратегией, чтобы оптимизировать выбор параметров и генерацию сигналов стратегии путем изучения исторических данных и распознавания моделей. Это может помочь стратегии автоматически адаптироваться к изменениям рынка, повысить адаптивность и устойчивость стратегии.
В данной статье представлена стратегия количественного трейдинга, основанная на двухуровневом скрещивании и многовременных 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)