Basé sur une stratégie de trading quantitative multifactorielle


Date de création: 2024-01-31 13:55:37 Dernière modification: 2024-01-31 13:55:37
Copier: 0 Nombre de clics: 714
1
Suivre
1617
Abonnés

Basé sur une stratégie de trading quantitative multifactorielle

Aperçu

La stratégie est une stratégie de trading quantitatif combinant plusieurs indicateurs techniques. Elle intègre plusieurs indicateurs tels que les moyennes mobiles, le MACD, les bandes de Brin et le RSI, permettant des transactions automatisées pilotées par des modèles multifactoriels.

Principe de stratégie

Les signaux de trading de cette stratégie proviennent des éléments suivants:

  1. Les moyennes mobiles doubles forment une fourchette dorée
  2. Le MACD forme une rupture sur le zéro et une rupture sous le zéro
  3. Brin fait demi-tour
  4. Le RSI est passé de zone acheteur à zone vendeur.

Lorsque plusieurs des indicateurs susmentionnés émettent simultanément des signaux d’achat ou de vente, la stratégie effectue les opérations d’ouverture ou de vente correspondantes.

Plus précisément, lorsque la moyenne mobile rapide traverse la moyenne mobile lente et que les histogrammes MACD affichent une augmentation de la colonne, le RSI rebondit à la hausse depuis la zone de survente et que le prix est proche de la descente de la zone de Brin, il est considéré comme un renversement de tendance, ce qui génère un signal d’achat.

Lorsque la moyenne mobile rapide traverse la moyenne mobile lente, les histogrammes MACD présentent une diminution de la colonne, le RSI descend de la zone de surachat et le prix est proche de la bande de Brin, ce qui génère un signal de vente.

Les signaux émis par cette combinaison de plusieurs indicateurs permettent de filtrer efficacement les faux signaux et d’améliorer la stabilité de la stratégie.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans l’utilisation d’un modèle multifacteur pour les transactions, ce qui améliore la fiabilité du signal et améliore la stabilité et la rentabilité de la stratégie.

  1. Les modèles multifactoriels permettent de vérifier les signaux de transaction les uns par rapport aux autres, réduisant ainsi l’interférence des faux signaux.

  2. Les différentes catégories d’indicateurs permettent de capturer des caractéristiques plus complètes de l’évolution du marché et de rendre des jugements plus précis.

  3. La combinaison de plusieurs facteurs peut atténuer les fluctuations d’un seul indicateur, garantissant une plus grande stabilité des gains.

  4. La flexibilité d’ajuster les indicateurs du portefeuille et le poids de chaque indicateur, pour une stratégie personnalisée pour les différents marchés.

Analyse des risques

Cette stratégie comporte également des risques à prendre en compte:

  1. Les combinaisons complexes de multiples indicateurs, la définition des paramètres et la sélection des indicateurs nécessitent des calculs et des tests précis, sinon des signaux de défaillance peuvent être générés.

  2. Les effets d’une seule variété peuvent être instables, il est nécessaire de choisir la combinaison de variétés appropriée pour la négociation entre les variétés, afin de diversifier le risque d’une seule variété.

  3. Il faut un contrôle strict de la taille des positions et des stratégies de stop-loss pour éviter l’expansion des pertes causées par des conditions extrêmes.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Testez plus de combinaisons d’indicateurs pour trouver les paramètres optimaux. Par exemple, le taux de volatilité, le volume des transactions, etc. d’autres indicateurs sont introduits dans la combinaison.

  2. La génération automatique de combinaisons optimales de stratégies et de configurations de paramètres est effectuée à l’aide de méthodes d’apprentissage automatique.

  3. Testé et optimisé sur une échelle de temps plus longue, le poids est adapté aux différentes phases du marché.

  4. Il s’agit d’un outil de gestion des risques qui maîtrise strictement les stop-loss individuels et les positions globales.

Résumer

La stratégie utilise de multiples indicateurs de négociation pour former un modèle multifacteur, exploite efficacement les avantages des différents indicateurs et améliore la capacité de jugement des signaux. En même temps, il faut également prêter attention à la prévention des risques, car la stabilité et la rentabilité de la stratégie peuvent être améliorées en permanence par l’optimisation et la mise à jour des paramètres.

Code source de la stratégie
/*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)