Dies ist eine quantitative Handelsstrategie, die mehrere technische Indikatoren beinhaltet. Sie kombiniert gleitende Durchschnitte, MACD, Bollinger Bands, RSI und andere Indikatoren, um ein multi-Faktor-modellgetriebenes automatisiertes Trading zu implementieren.
Die Handelssignale dieser Strategie bestehen aus folgenden Teilen:
Wenn die oben genannten Indikatoren gleichzeitig Kauf- oder Verkaufssignale ausgeben, trifft die Strategie entsprechende Long- oder Short-Entscheidungen.
Insbesondere wenn der schnelle gleitende Durchschnitt den langsamen überschreitet, die MACD-Histogramme zu steigen beginnen, der RSI aus der Überverkaufszone aufsteigt und der Preis sich der unteren Bollinger Bands nähert, gilt dies als Trendumkehrsignal für einen Long-Eintrag.
Und wenn der schnelle MA unter den langsamen MA überschreitet, beginnen die MACD-Histogramme zu sinken, der RSI fällt aus dem Überkaufbereich und der Preis erreicht die oberen Bollinger-Bänder, wird er als kurzfristige obere Umkehrung für einen kurzen Einstieg angesehen.
Durch die Kombination von Signalen aus mehreren Indikatoren können gefälschte Signale wirksam herausgefiltert und die Stabilität der Strategie verbessert werden.
Der größte Vorteil dieser Strategie besteht darin, dass ein Multifaktor-Handelsmodell verwendet wird, das die Zuverlässigkeit der Signale, Stabilität und Rentabilität der Strategie erhöht.
Das Multifaktormodell kann Handelssignale untereinander überprüfen und Störungen durch gefälschte Signale wirksam reduzieren.
Indikatoren aus verschiedenen Kategorien können umfassendere Merkmale der Marktbewegungen erfassen und genauere Beurteilungen abgeben.
Die Kombination mehrerer Indikatoren kann die Schwankungen einzelner Indikatoren ausgleichen und eine stabilere Rendite gewährleisten.
Die Indikatoren und ihre Gewichte in der Kombination können flexibel angepasst werden, um die Strategie an die unterschiedlichen Marktbedingungen anzupassen.
Einige Risiken dieser Strategie sollten berücksichtigt werden:
Die komplexe Kombination mehrerer Indikatoren erfordert eine präzise Parameter-Ausrichtung und -Prüfung, da sonst ungültige Signale erzeugt werden können.
Die Leistung eines einzelnen Produktes ist möglicherweise nicht stabil genug, daher sollte ein Portfolio aus geeigneten Produkten aufgebaut werden, um Risiken zu diversifizieren.
Die Größe der Positionen und die Stop-Loss-Mechanismen sollten streng kontrolliert werden, um Verluste unter extremen Marktbedingungen zu begrenzen.
In einigen Richtungen kann diese Strategie optimiert werden:
Testkombinationen mehrerer Indikatoren zur Ermittlung der optimalen Parameter, wie implizite Volatilität, Volumen usw.
Verwenden von Methoden des maschinellen Lernens, um automatisch optimale Kombinationen von Indikatoren und Parametermengen zu generieren.
Mehr Backtests und Optimierungen in längeren Zeitrahmen durchführen, die Gewichte entsprechend für verschiedene Marktstadien anpassen.
Einbeziehung von Risikomanagementinstrumenten zur strikten Kontrolle von Verlusten bei Einzelgeschäften und Gesamtpositionen.
Diese Strategie nutzt in vollem Umfang die Vorteile verschiedener technischer Indikatoren und bildet ein Multifaktormodell, das die Genauigkeit der Signale wirksam verbessert.
/*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)