Une double stratégie quantitative de la CCI

Auteur:ChaoZhang est là., Date: 2023-11-28 15:47:04 Je suis désolé.
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur technique classique CCI et les indices doubles VCI et MCI auto-développés pour former des signaux de trading, ce qui est une stratégie de trading quantitative typique.

Principe de stratégie

  1. Calculer la moyenne mobile ohlc4 et la combiner avec l'indicateur cci pour juger du niveau des prix;
  2. Calculer l'indicateur OBV pour mesurer les flux de capitaux;
  3. Calculer l'indice VCI, qui mesure la répartition des flux de capitaux à travers la variance de l'indicateur d'évolution;
  4. Calculer l'indice de l'ICM, qui mesure la répartition des prix par la variance des prix;
  5. Comparer les indices de VCI et de MCI pour évaluer le sentiment du marché;
  • VCI > MCI, fort intérêt d'achat;
  • ICV < ICM, fort intérêt de vente;
  1. Former des signaux longs et courts sur la base d'une comparaison de VCI et de MCI;

Analyse des avantages

  1. La stratégie tient compte de multiples dimensions telles que le prix, le volume des transactions et les flux de capitaux pour évaluer le sentiment du marché, avec des signaux relativement précis;
  2. L'ICV et l'ICM sont calculés par déviation type dynamique, qui peut s'adapter aux changements du marché en temps réel;
  3. Les paramètres de la stratégie ont été optimisés par des tests antérieurs approfondis et présentent une forte stabilité;

Analyse des risques

  1. Le calcul des indicateurs de prix et de volume des transactions est en retard et ne peut pas capturer à l'avance les événements soudains;
  2. Une stratégie unique ne peut pas couvrir pleinement les conditions de marché complexes et volatiles;
  3. Il doit être combiné avec d'autres indicateurs auxiliaires et ne peut pas être le seul à juger du marché;

Directions d'optimisation

  1. Incorporer des modèles prédictifs tels que l'apprentissage en profondeur pour améliorer la précision du jugement du signal;
  2. Ajouter des modules de contrôle des risques tels que le stop loss pour renforcer la stabilité de la stratégie;
  3. Essayez différentes combinaisons de paramètres pour tester l'applicabilité sur des marchés spécifiques;

Conclusion

Cette stratégie forme des signaux de trading en comparant des indices CCI doubles, en tenant compte de facteurs tels que le prix et le volume de trading pour évaluer le sentiment du marché. C'est une stratégie de trading quantitative typique et pratique. Mais elle doit encore être utilisée avec d'autres outils auxiliaires pour maximiser l'efficacité de la stratégie. Il est utile d'optimiser et d'élargir davantage les scénarios applicables tout en réduisant les risques.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("MCI and VCI - Modified CCI Formulas")
test = cci(ohlc4, 13)
test1 = cci(ohlc4, 20)

obv(src) => cum(change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume)
mDisc = input(0, title="Mode Discrepency")
mDiv = input(0.015, title="Interval")
mean(_src, _length)=>
    _return = sum(_src, _length) / _length

median(_src, _length)=>
    _return = _src
    for _i = 0 to _length
        _return := _return == 0 ? _src : (_return + _src[_i]) / 2
    _return


len = input(20, title="Standard (Average) Length")
mmm = input(20, title="Lookback length")
srcV = obv(input(ohlc4))
srcP = input(close)
x = sma(srcV, len)
MDV2 = abs(stdev(median(x, len), mmm))
MDV3 = abs(stdev(mean(x, len), mmm))
AMDV = (MDV2+MDV3)/2
pt1v = (srcV-ema(srcV, len))/ AMDV
pt2v = 1/mDiv
VCI=pt1v*pt2v
y = ema(srcP, len)
MDP2 =  abs(stdev(median(y, len), mmm))
MDP3 = abs(stdev(mean(y, len), mmm))
AMDA = (MDP2 + MDP3)/2
pt1p = 1/mDiv
pt2p = (srcP-ema(srcP, len))/ AMDA
MCI = pt1p * pt2p
plot(VCI, color=yellow, title="VCI", style="Histogram")
plot(MCI, color=white, title="MCI")

plot(500, style=line)

plot(0, style=line, linewidth=2)

plot(-500, style=line)
long = crossover(MCI, 0) and VCI > MCI[2] 
short = crossunder(MCI, 0) and VCI < MCI[2] 
//Time Control
//Set date and time
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 13, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


direction = input(0, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
if (long)
    strategy.entry("Long", strategy.long, when=window(), limit=ohlc4, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="Long")

if (short)
    strategy.entry("Short", strategy.short, when=window(), limit=ohlc4, oca_name="BollingerBands", comment="BBandSE")
else
    strategy.cancel(id="Short")

Plus de