Stratégie de négociation quantitative à facteurs multiples

Auteur:ChaoZhang est là., Date: 2024-01-31 13:55:37 Je vous en prie.
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de négociation quantitative qui intègre plusieurs indicateurs techniques. Il combine les moyennes mobiles, le MACD, les bandes de Bollinger, le RSI et d'autres indicateurs pour mettre en œuvre un modèle de négociation automatisé axé sur plusieurs facteurs.

La logique de la stratégie

Les signaux de négociation de cette stratégie proviennent des parties suivantes:

  1. Croix d'or et croix de mort des moyennes mobiles doubles
  2. Croisement des lignes zéro du MACD
  3. Les bandes de Bollinger renversements supérieurs et inférieurs des rails
  4. Résultats de l'analyse de l'indicateur de volatilité

Lorsque les indicateurs ci-dessus émettent simultanément des signaux d'achat ou de vente, la stratégie prendra les décisions longues ou courtes correspondantes.

Plus précisément, lorsque la moyenne mobile rapide franchit la moyenne mobile lente, les histogrammes MACD commencent à augmenter, le RSI rebondit de la zone de survente et le prix s'approche du rail inférieur des bandes de Bollinger, il est considéré comme un signal d'inversion de tendance pour une entrée longue.

Et lorsque le MA rapide franchit le seuil inférieur au MA lent, les histogrammes MACD commencent à décliner, le RSI descend de la zone de surachat et le prix atteint les bandes de Bollinger supérieures, il est considéré comme un renversement supérieur à court terme pour une entrée courte.

En combinant des signaux provenant de plusieurs indicateurs, les faux signaux peuvent être filtrés efficacement et la stabilité de la stratégie peut être améliorée.

Analyse des avantages

Le principal avantage de cette stratégie est qu'elle adopte un modèle multifactoriel de négociation, ce qui améliore la fiabilité des signaux, la stabilité et la rentabilité de la stratégie.

  1. Le modèle à facteurs multiples permet de vérifier les signaux de négociation entre eux et de réduire efficacement les interférences de faux signaux.

  2. Les indicateurs appartenant à différentes catégories peuvent capturer des caractéristiques plus complètes des mouvements du marché et faire des jugements plus précis.

  3. La combinaison de plusieurs indicateurs peut atténuer les fluctuations des indicateurs individuels et assurer des rendements plus stables.

  4. Les indicateurs et leurs pondérations dans la combinaison peuvent être ajustés de manière flexible pour adapter la stratégie aux différentes conditions du marché.

Analyse des risques

Certains risques de cette stratégie devraient être pris en considération:

  1. La combinaison complexe d'indicateurs multiples nécessite un réglage et des essais précis des paramètres, sinon elle peut produire des signaux non valides.

  2. Les performances d'un seul produit peuvent ne pas être suffisamment stables.

  3. La taille des positions et les mécanismes de stop loss devraient être strictement contrôlés pour limiter les pertes dans des conditions de marché extrêmes.

Directions d'optimisation

Certaines directions de cette stratégie peuvent être optimisées:

  1. Test de combinaisons de plusieurs indicateurs pour déterminer les paramètres optimaux, tels que la volatilité implicite, le volume, etc.

  2. Utiliser des méthodes d'apprentissage automatique pour générer automatiquement des combinaisons optimales d'indicateurs et de séries de paramètres.

  3. Faites plus de tests et d'optimisation sur des délais plus longs, ajustez les poids en conséquence pour les différentes étapes du marché.

  4. Incorporer des outils de gestion des risques pour contrôler strictement les pertes sur les transactions individuelles et les positions globales.

Conclusion

Cette stratégie tire pleinement parti des avantages de différents indicateurs techniques et forme un modèle multifactoriel, qui améliore efficacement la précision des signaux.


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


Plus de