Stratégie de trading quantitative multifactorielle combinant RSI et CCI dynamiques


Date de création: 2023-11-27 18:54:34 Dernière modification: 2023-11-27 18:54:34
Copier: 0 Nombre de clics: 732
1
Suivre
1617
Abonnés

Stratégie de trading quantitative multifactorielle combinant RSI et CCI dynamiques

Aperçu

Cette stratégie permet de réaliser une stratégie de trading quantitative multifactorielle en combinant un indicateur RSI dynamique, un indicateur CCI et une moyenne MA multiple. Cette stratégie prend en compte de manière globale plusieurs dimensions telles que la tendance, les surachats et les survente, pour rendre des jugements et générer des signaux de trading.

Principe de stratégie

Indicateurs techniques

  • Ligne moyenne MA: calcul de la moyenne des prix de clôture sur une période donnée pour déterminer la tendance des prix
  • Indicateur de faiblesse relative du RSI: déterminez les zones de surachat et de survente
  • Indicateur CCI sur le mouvement: comment juger si le marché est sur-acheté ou sur-vendu
  • Indicateur Stoch KDJ: pour juger si un indicateur aléatoire s’écarte de la tendance dominante

Signaux de négociation

Signaux d’achat: MA12 avec MA26, CCI inférieur à 100 (survendu), Stoch KDJ inférieur à 80 (survendu)

Signaux de vente: dépréciation dynamique sous le RSI, Stoch KDJ au-dessus de 80 (surcompte)

Avantages stratégiques

  1. Le pilotage multifacteur, le jugement global, la réduction des faux signaux
  2. La dépréciation dynamique sellable, détection en temps réel des surachats et des survente
  3. Une combinaison de tendances, de hasard et de plusieurs indicateurs techniques courants
  4. Adaptation à plusieurs paramètres et grande flexibilité

Risque stratégique

  1. Les combinaisons de facteurs sont trop complexes et les paramètres sont difficiles à optimiser
  2. La performance de la stratégie est fortement liée au choix des paramètres
  3. Optimisation des paramètres strictement selon le processus de quantification
  4. Risque élevé d’adaptation à la courbe

Optimisation de la stratégie

  1. Plus d’ensembles de données pour tester la robustesse des stratégies
  2. Test de combinaison de plusieurs groupes de paramètres pour trouver le paramètre optimal
  3. Augmentation du mécanisme de stop-loss pour réduire le maximum de retraits
  4. Augmenter le contrôle des positions pour éviter les pertes de titres
  5. Tester l’adéquation des différents types de contrats

Résumer

Cette stratégie utilise un ensemble d’indicateurs techniques et de jugements axés sur plusieurs facteurs pour rechercher les meilleurs paramètres grâce à une optimisation des paramètres et à une vérification statistique rigoureuse, ce qui permet d’obtenir de meilleurs résultats stratégiques. Cependant, la complexité est élevée, il est nécessaire de prévenir les risques de surajustement, tout en contrôlant les positions et les arrêts de perte pour réduire le retrait maximum.

Code source de la stratégie
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)