L'indicateur RSI dynamique et la stratégie de négociation quantitative multifactorielle combinée de l'ICC

Auteur:ChaoZhang est là., Date: 2023-11-27 18:54:34 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie combine des moyennes mobiles dynamiques RSI, CCI et multiples MA pour mettre en œuvre une stratégie de trading quantitative axée sur plusieurs facteurs.

Principe de stratégie

Indicateurs techniques

  • MA: Calcule le prix de clôture moyen sur une période pour déterminer l'évolution des prix
  • RSI: Les juges ont suracheté et survendu des niveaux
  • CCI: État des juges surachetés et survendus
  • Stoch KDJ: les juges déviation du stochastique par rapport à la tendance principale

Signaux de négociation

Signal d'achat: MA12 dépasse MA26, CCI inférieur à 100 (survente), Stoch KDJ inférieur à 80 (survente)

Signal de vente: le RSI dépasse le seuil dynamique, le KDJ du stock est supérieur à 80 (suracheté)

Les avantages

  1. Facteurs multiples, jugement complet, moins de faux signaux
  2. seuil dynamique pour la détection des surachats et des survendues en temps réel
  3. Combine des indicateurs techniques de tendance, stochastiques et traditionnels
  4. Adoptant le réglage de plusieurs paramètres, une grande flexibilité

Les risques

  1. Combinaison multi-facteurs trop complexe, réglage de paramètres difficile
  2. Performance fortement liée à la sélection des paramètres
  3. Requiert un processus quantitatif strict pour optimiser les paramètres
  4. Risque élevé d'adaptation à la courbe

Optimisation

  1. Plus de tests de séries de données pour la robustesse de la stratégie
  2. Tests de combinaison de plusieurs paramètres pour trouver l'optimum
  3. Ajouter un stop loss pour réduire le tirage maximum
  4. Ajouter la dimension de position pour éviter la poursuite et la mort
  5. Adaptabilité à l'essai entre différents produits

Conclusion

Cette stratégie combine de multiples indicateurs techniques et des jugements basés sur plusieurs facteurs avec un réglage des paramètres et une validation statistique pour obtenir de bons résultats.


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

Plus de