Basierend auf einer quantitativen Multifaktor-Handelsstrategie


Erstellungsdatum: 2024-01-31 13:55:37 zuletzt geändert: 2024-01-31 13:55:37
Kopie: 0 Klicks: 714
1
konzentrieren Sie sich auf
1617
Anhänger

Basierend auf einer quantitativen Multifaktor-Handelsstrategie

Überblick

Die Strategie ist eine quantitative Trading-Strategie, die mehrere technische Indikatoren kombiniert. Sie kombiniert mehrere Indikatoren wie beispielsweise Moving Averages, MACD, Bollinger Bands und RSI, um einen automatisierten Handel zu ermöglichen, der von einem Multifaktormodell angetrieben wird.

Strategieprinzip

Die Handelssignale für diese Strategie stammen aus folgenden Teilen:

  1. Doppelte Moving Averages bilden eine Gold- und Todesfalle
  2. Der MACD bildet einen Auf- und Unterbruch der Null-Achse.
  3. Brin und seine Band umdrehen.
  4. RSI über Kauf- und Verkaufszonen umgekehrt

Wenn mehrere der oben genannten Indikatoren gleichzeitig ein Kauf- oder Verkaufssignal senden, führt die Strategie eine entsprechende Kauf- oder Verkaufsposition durch.

Wenn der RSI aus der Überverkaufszone zurückschlägt und der Preis nahe der Bollinger-Absenkung ist, wird der Kurs als umgekehrt betrachtet, was ein Kaufsignal erzeugt.

Wenn der MACD-Histogramm unterhalb des schnellen Moving Averages durch den langsamen Moving Average fällt, wird der RSI aus der Überkaufzone abgesenkt und der Preis in der Nähe des Bollinger Bands auf Kurs gebracht, um einen Verkauf zu signalisieren.

Durch diese Kombination von mehreren Indikatoren kann man die falschen Signale effizient filtern und die Strategie stabilisieren.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass ein Multifaktormodell für den Handel verwendet wird, das die Signalzuverlässigkeit erhöht und die Stabilität und Ertragsrate der Strategie erhöht.

  1. Multi-Faktor-Modelle können gegenseitige Verifizierung von Handelssignalen ermöglichen, um die Störung durch falsche Signale zu reduzieren.

  2. Die verschiedenen Kategorien der Indikatoren ermöglichen es, ein umfassenderes Merkmal der Marktentwicklung zu erfassen und eine genauere Beurteilung vorzunehmen.

  3. Eine Kombination aus mehreren Faktoren kann die Schwankungen eines einzelnen Indikators ausgleichen und die Erträge stabiler machen.

  4. Flexible Anpassung der Portfolio-Indikatoren und der Gewichte der einzelnen Indikatoren für eine individualisierte Strategie für verschiedene Märkte.

Risikoanalyse

Die Strategie birgt auch einige Risiken, die beachtet werden müssen:

  1. Komplexe Mehrindikator-Kombinationen, Parameter-Einstellungen und Indikator-Auswahl erfordern präzise Berechnungen und Tests, die sonst leicht zu Fehlsignalen führen können.

  2. Die Wirkung einer einzigen Sorte kann instabil sein, und es ist notwendig, die richtige Sortenkombination für den Handel zwischen den Sorten auszuwählen, um das Risiko einer einzigen Sorte zu verteilen.

  3. Es ist notwendig, die Größe der Positionen und die Stop-Loss-Strategie streng zu kontrollieren, um die Verluste aus Extremsituationen zu verhindern.

Optimierungsrichtung

Die Strategie hat folgende Optimierungsmöglichkeiten:

  1. Versuchen Sie, eine Kombination aus mehr Indikatoren zu testen, um die optimalen Parameter zu finden. Weitere Indikatoren, wie z. B. die Volatilität, die Transaktionsmenge, werden in die Kombination aufgenommen.

  2. Automatische Erzeugung der optimalen Strategie-Kombination und Parameterkonfiguration mit Hilfe von Machine Learning Methoden.

  3. Tests und Optimierungen auf längeren Zeitskala, Gewichte für verschiedene Marktphasen.

  4. In Kombination mit Risikomanagement-Tools, strenge Kontrolle der einzelnen Stop-Loss und Gesamtposition.

Zusammenfassen

Die Strategie nutzt verschiedene Handelsindikatoren, um ein Multifaktormodell zu bilden, um die Vorteile verschiedener Indikatoren zu nutzen und die Signalentscheidungsfähigkeit zu verbessern. Gleichzeitig muss auf Risikokontrolle geachtet werden, um die Stabilität und Ertragsfähigkeit der Strategie durch Parameteroptimierung und -aktualisierung kontinuierlich zu verbessern.

Strategiequellcode
/*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)