
Стратегия является количественной торговой стратегией, объединяющей несколько технических индикаторов. Она объединяет несколько индикаторов, таких как движущиеся средние, MACD, бриндовые полосы и RSI, для автоматизированной торговли, управляемой многофакторной моделью.
Торговые сигналы для этой стратегии исходят из следующих частей:
Когда несколько вышеуказанных индикаторов одновременно посылают сигналы о покупке или продаже, стратегия проводит соответствующие операции по открытию или продаже позиции.
В частности, когда быстрые скользящие средние пересекают медленные скользящие средние, и MACD-гистограммы показывают рост столбика, RSI отскочил от зоны перепродажи и поднялся, и цена приближается к нисходящей линии Брин, считается, что ситуация изменилась, и это создает сигнал к покупке.
При прохождении медленно движущейся средней под быстро движущейся средней, 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)