Indicateur de dynamique Stratégie courte longue

Auteur:ChaoZhang est là., Date: 2023-11-02 16h34 et 48 min
Les étiquettes:

img

Résumé

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.

La logique de la stratégie

  1. Calculer les indicateurs ADX, DMI et CCI.

    • Un ADX élevé indique une tendance forte.
    • Le DMI comprend DI+ et DI-. DI+ indique la force de la tendance haussière tandis que DI- indique la force de la tendance baissière. Si DI+ est supérieur à DI-, il s'agit d'une tendance haussière, et vice versa.
    • L'indice CCI évalue les niveaux de surachat/survente: en dessous de -100, c'est une survente et en dessous de 100, c'est une surachat.
  2. Déterminez la direction de la tendance.

    • Lorsque DI+ dépasse DI-, une tendance haussière est identifiée.
    • Lorsque le DI- dépasse le DI+, une tendance à la baisse est identifiée.
  3. Mettez-vous en position.

    • Lorsque la tendance haussière se forme, l'ADX est élevé et le CCI < -100, long.
    • Lorsqu'une tendance à la baisse se forme, l'ADX est élevé et le CCI > 100, le cours est court.
  4. Position de sortie avec stop loss.

    • Lorsque long, quittez lorsque DI- dépasse DI+.
    • En cas de coupure, sortez lorsque DI+ dépasse DI-.

Analyse des avantages

  1. L'ADX filtre les transactions pendant les tendances faibles.

  2. Le DMI réduit les erreurs dans l'identification des tendances.

  3. L'entrée en vigueur de la surextension de la CCI améliore le calendrier et réduit les risques.

  4. La combinaison des indicateurs de momentum améliore la précision.

  5. Limites de perte par transaction.

Risques et couverture

  1. Le niveau de l'ADX doit être élevé pour assurer une tendance suffisamment forte.

  2. DMI est en retard sur la tendance au début.

  3. Fréquence de trading CCI élevée, élargir la portée CCI pour filtrer le bruit.

  4. 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.

Directions d'optimisation

  1. Optimiser les paramètres ADX pour équilibrer le filtrage du bruit et la tendance de capture.

  2. Optimiser les paramètres DMI pour équilibrer le décalage et la sensibilité.

  3. Optimiser les paramètres de l'ICC pour équilibrer la fréquence des transactions et la capture des retours.

  4. Testez l'ajout ou la modification d'indicateurs pour obtenir de meilleures combinaisons, par exemple MACD, KDJ.

  5. Testez sur différents produits pour trouver le meilleur.

  6. Optimiser la taille des positions pour contrôler le risque tout en maintenant le suivi des tendances.

Conclusion

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


Plus de