Cette stratégie utilise des indicateurs de dynamique, y compris l'indice directionnel moyen (ADX), l'indice de mouvement directionnel (DMI) et l'indice de canal des produits de base (CCI), pour déterminer la direction de la tendance et suivre les tendances.
Calculer les indicateurs ADX, DMI et CCI.
Déterminez la direction de la tendance.
Mettez-vous en position.
Position de sortie avec stop loss.
L'ADX filtre les transactions pendant les tendances faibles.
Le DMI réduit les erreurs dans l'identification des tendances.
L'entrée en vigueur de la surextension de la CCI améliore le calendrier et réduit les risques.
La combinaison des indicateurs de momentum améliore la précision.
Limites de perte par transaction.
Le niveau de l'ADX doit être élevé pour assurer une tendance suffisamment forte.
DMI est en retard sur la tendance au début.
Fréquence de trading CCI élevée, élargir la portée CCI pour filtrer le bruit.
Considérez une stratégie neutre sur le marché lorsqu'il s'agit de positions longues et courtes, afin de couvrir le risque global de position.
Optimiser les paramètres ADX pour équilibrer le filtrage du bruit et la tendance de capture.
Optimiser les paramètres DMI pour équilibrer le décalage et la sensibilité.
Optimiser les paramètres de l'ICC pour équilibrer la fréquence des transactions et la capture des retours.
Testez l'ajout ou la modification d'indicateurs pour obtenir de meilleures combinaisons, par exemple MACD, KDJ.
Testez sur différents produits pour trouver le meilleur.
Optimiser la taille des positions pour contrôler le risque tout en maintenant le suivi des tendances.
La stratégie utilise logiquement l'ADX pour la tendance, le DMI pour la direction et le CCI pour les inversions. Mais les paramètres ont besoin d'optimisation et de dimensionnement de la position pour le contrôle des risques.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true) adxlen = input(9, title="ADX Smoothing") dilen = input(14, title="DI Length") ADX_Entry = input(25, title="ADX Entry") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) cci_length = input(20, minval=1, title="CCI Length") cci_ma = sma(close, cci_length) cci = (close - cci_ma) / (0.015 * dev(close, cci_length)) stop_loss = syminfo.mintick * 100 open_longs = strategy.position_size > 0 open_shorts = strategy.position_size < 0 possible_bull = false possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false possible_bear = false possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false bool bull_entry = crossover(up,down) if(bull_entry and up < ADX_Entry and cci < 0) possible_bull := true bull_entry := false if(possible_bull and up > ADX_Entry and cci > -100) bull_entry := true bool bear_entry = crossover(down,up) if(bear_entry and down < ADX_Entry and cci > 0) possible_bear := true bear_entry := false if(possible_bear and down >= ADX_Entry and cci < 100) bear_entry := true strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry) strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry ) strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))