Это количественная стратегия торговли, которая включает в себя несколько технических индикаторов. Она сочетает в себе скользящие средние, MACD, полосы Боллинджера, RSI и другие индикаторы для реализации многофакторной модели автоматической торговли.
Торговые сигналы этой стратегии состоят из следующих частей:
Когда вышеперечисленные индикаторы одновременно выпускают сигналы купли или продажи, стратегия принимает соответствующие длинные или короткие решения.
В частности, когда быстрый скользящий средний пересекает медленный, гистограммы MACD начинают увеличиваться, RSI отскакивает из зоны перепроданности, а цена приближается к нижней рельсе полос Боллинджера, это считается сигналом обратного тренда для длинного входа.
И когда быстрый MA пересекает медленный MA, гистограммы MACD начинают снижаться, RSI падает из зоны перекупленности, и цена достигает верхних полос Боллинджера, это рассматривается как краткосрочное верхнее изменение для короткого входа.
Сочетая сигналы из нескольких индикаторов, можно эффективно отфильтровать ложные сигналы и улучшить стабильность стратегии.
Наибольшее преимущество этой стратегии заключается в том, что она использует многофакторную модель торговли, что повышает надежность сигналов, стабильность и рентабельность стратегии.
Многофакторная модель может эффективно проверять торговые сигналы друг с другом и уменьшать помехи от фальшивых сигналов.
Показатели из разных категорий могут охватить более полные характеристики движения рынка и сделать более точные суждения.
Сочетание нескольких показателей может сгладить колебания отдельных и обеспечить более стабильную доходность.
Показатели и их вес в комбинации могут быть гибко скорректированы для адаптации стратегии к различным рыночным условиям.
Некоторые риски этой стратегии должны быть рассмотрены:
Сложное сочетание нескольких показателей требует точной настройки параметров и испытаний, в противном случае это может вызвать недействительные сигналы.
Поскольку производительность одного продукта может быть недостаточно стабильной, для диверсификации рисков необходимо создать портфель, состоящий из подходящих продуктов.
Механизмы размещения позиций и остановки потерь должны строго контролироваться для ограничения потерь в экстремальных рыночных условиях.
Некоторые направления этой стратегии можно оптимизировать:
Испытать комбинации нескольких показателей для выявления оптимальных параметров, таких как подразумеваемая волатильность, объем и т.д.
Использование методов машинного обучения для автоматического создания оптимальных комбинаций индикаторов и наборов параметров.
Делайте больше обратных тестов и оптимизации в более длительные временные рамки, корректируйте весы соответственно для разных этапов рынка.
Включить инструменты управления рисками для строгого контроля потерь на отдельных сделках и общих позициях.
Эта стратегия в полной мере использует преимущества различных технических показателей и формирует многофакторную модель, которая эффективно повышает точность сигналов.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Математическая Торговая Система с Ишимоку, TP/SL, ADX, RSI, OBV", shorttitle="МТС Ишимоку TP/SL ADX RSI OBV", overlay=true) is_short_enable = input(0, title="Короткие сделки") is_long_enable = input(1, title="Длинные сделки") // Входные параметры для скользящих средних fast_length = input(21, title="Быстрый период") slow_length = input(26, title="Медленный период") // Входные параметры для Ишимоку tenkan_length = input(9, title="Тенкан-сен") kijun_length = input(26, title="Киджун-сен") senkou_length = input(52, title="Сенкоу-спан B") // Входные параметры для ADX adx_length = input(14, title="ADX период") adx_level = input(30, title="ADX уровень") // Входные параметры для RSI rsi_length = input(14, title="RSI период") rsi_overbought = input(70, title="RSI перекупленность") rsi_oversold = input(30, title="RSI перепроданность") // Входные параметры для OBV obv_length = input(14, title="OBV период") // Вычисление скользящих средних fast_ma = ta.sma(close, fast_length) slow_ma = ta.sma(close, slow_length) // Вычисление Ишимоку tenkan_sen = ta.sma(high + low, tenkan_length) / 2 kijun_sen = ta.sma(high + low, kijun_length) / 2 senkou_span_a = (tenkan_sen + kijun_sen) / 2 senkou_span_b = ta.sma(close, senkou_length) // Вычисление ADX [diplus, diminus, adx_value] = ta.dmi(14, adx_length) // Вычисление RSI rsi_value = ta.rsi(close, rsi_length) // Вычисление OBV f_obv() => ta.cum(math.sign(ta.change(close)) * volume) f_obv_1() => ta.cum(math.sign(ta.change(close[1])) * volume[1]) f_obv_2() => ta.cum(math.sign(ta.change(close[2])) * volume[2]) f_obv_3() => ta.cum(math.sign(ta.change(close[3])) * volume[3]) obv_value = f_obv() price_is_up = close[1] > close[3] price_crossover_fast_ma = close > fast_ma fast_ma_is_up = ta.sma(close[1], fast_length) > ta.sma(close[3], fast_length) rsi_is_trand_up = ta.rsi(close[1], rsi_length) > ta.rsi(close[3], rsi_length) rsi_is_upper_50 = rsi_value > 50 obv_is_trand_up = f_obv_1() > f_obv_3() and obv_value > ta.sma(obv_value, obv_length) is_up = price_is_up and price_crossover_fast_ma and fast_ma_is_up and rsi_is_trand_up and rsi_is_upper_50 and obv_is_trand_up fast_ma_is_down = close < fast_ma rsi_is_trend_down = ta.rsi(close[1], rsi_length) < ta.rsi(close[2], rsi_length) rsi_is_crossover_sma = rsi_value < ta.sma(rsi_value, rsi_length) obv_is_trend_down = f_obv_1() < f_obv_2() obv_is_crossover_sma = obv_value < ta.sma(obv_value, obv_length) is_down = fast_ma_is_down and rsi_is_trend_down and rsi_is_crossover_sma and obv_is_trend_down and obv_is_crossover_sma //----------// // MOMENTUM // //----------// ema8 = ta.ema(close, 8) ema13 = ta.ema(close, 13) ema21 = ta.ema(close, 21) ema34 = ta.ema(close, 34) ema55 = ta.ema(close, 55) longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55 exitLongEmaCondition = ema13 < ema55 shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55 exitShortEmaCondition = ema13 > ema55 // ---------- // // OSCILLATORS // // ----------- // rsi = ta.rsi(close, 14) longRsiCondition = rsi < 70 and rsi > 40 exitLongRsiCondition = rsi > 70 shortRsiCondition = rsi > 30 and rsi < 60 exitShortRsiCondition = rsi < 30 // Stochastic length = 14, smoothK = 3, smoothD = 3 kFast = ta.stoch(close, high, low, 14) dSlow = ta.sma(kFast, smoothD) longStochasticCondition = kFast < 80 exitLongStochasticCondition = kFast > 95 shortStochasticCondition = kFast > 20 exitShortStochasticCondition = kFast < 5 // Логика входа и выхода longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0 exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0 shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0 exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0 enter_long = (ta.crossover(close, senkou_span_a) or is_up) and longCondition enter_short = (ta.crossunder(close, senkou_span_a) or is_down) and shortCondition exit_long = ((ta.crossunder(fast_ma, slow_ma) or ta.crossunder(close, senkou_span_b) or enter_short) or exitLongCondition) exit_short = ((ta.crossover(fast_ma, slow_ma) or ta.crossover(close, senkou_span_b) or enter_long) or exitShortCondition) // Выполнение сделок if is_long_enable == 1 strategy.entry("Long", strategy.long, when=enter_long) strategy.close("Long", when=exit_long) if is_short_enable == 1 strategy.entry("Short", strategy.short, when=enter_short) strategy.close("Short", when=exit_short)