Stratégie de canal de prix adaptatif

Auteur:ChaoZhang est là., Date: 2023-12-04 16:33:45 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de canal de prix adaptatif basée sur l'indicateur Average True Range (ATR) et l'indice Directionnel Moyen (ADX).

La logique de la stratégie

  1. Calculer le plus haut maximum (HH) et le plus bas minimum (LL) sur une longueur donnée.

  2. Calculer +DI et -DI en fonction des mouvements de prix à la hausse et à la baisse.

  3. Si ADX < 25, le marché est considéré comme latéralement. Si close > canal supérieur (HH - ATR multiplicateur * ATR), aller long. Si close < canal inférieur (LL + ATR multiplicateur * ATR), aller court.

  4. Si ADX >= 25 et +DI > -DI, le marché est haussier.

  5. Si ADX >= 25 et +DI < -DI, le marché est baissier.

  6. Position de sortie après les barres de longueur de sortie depuis l'entrée.

Analyse des avantages

  1. La stratégie s'adapte automatiquement en fonction des conditions du marché, en utilisant une stratégie de canal sur le marché latéral et une tendance sur le marché tendance.

  2. L'utilisation de l'ATR et de l'ADX assure l'adaptabilité.

  3. La sortie forcée ajoute de la stabilité.

Analyse des risques

  1. L'ADX peut générer de faux signaux fréquemment.

  2. Les mauvais paramètres ATR et ADX entraînent de mauvaises performances.

  3. Incapable de se protéger efficacement contre les événements du cygne noir.

Directions d'optimisation

  1. Optimiser les paramètres pour l'ATR et l'ADX afin d'améliorer la capacité d'adaptation.

  2. Ajouter un stop loss pour limiter les pertes.

  3. Ajoutez des filtres pour éviter les faux signaux.

Conclusion

La stratégie combine des indicateurs et des mécanismes pour s'adapter aux conditions du marché, mais des erreurs d'appréciation peuvent survenir en raison des limitations des indicateurs, des optimisations futures des paramètres et du contrôle des risques.


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

//@version=5
strategy("Adaptive Price Channel Strategy", overlay=true)

length = input(20, title="Length")
exit_length = input(10, title="Exit After X Periods")
atr_multiplier = input(3.2, title="ATR Multiplier")

startDate = input(defval = timestamp("2019-01-15T08:15:15+00:00"), title = "Start Date")
endDate = input(defval = timestamp("2033-04-01T08:15:00+00:00"), title = "End Date")

hh = ta.highest(high, length)
ll = ta.lowest(low, length)
atr = ta.atr(length)

// calculate +DI and -DI
upMove = high - high[1]
downMove = low[1] - low
plusDM = na(upMove[1]) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
minusDM = na(downMove[1]) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
plusDI = ta.rma(plusDM, length) / atr * 100
minusDI = ta.rma(minusDM, length) / atr * 100

// calculate ADX
dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, length)

var int barSinceEntry = na

if (not na(close[length]) )
    if (adx < 25) // Sideways market
        if (close > hh - atr_multiplier * atr)
            strategy.entry("PChLE", strategy.long, comment="PChLE")
            barSinceEntry := 0
        else if (close < ll + atr_multiplier * atr)
            strategy.entry("PChSE", strategy.short, comment="PChSE")
            barSinceEntry := 0
    else if (adx >= 25 and plusDI > minusDI) // Bullish market
        if (close > hh - atr_multiplier * atr)
            strategy.entry("PChLE", strategy.long, comment="PChLE")
            barSinceEntry := 0
    else if (adx >= 25 and plusDI < minusDI) // Bearish market
        if (close < ll + atr_multiplier * atr)
            strategy.entry("PChSE", strategy.short, comment="PChSE")
            barSinceEntry := 0

if (na(barSinceEntry))
    barSinceEntry := barSinceEntry[1] + 1
else if (barSinceEntry >= exit_length)
    strategy.close("PChLE")
    strategy.close("PChSE")
    barSinceEntry := na

plot(hh, title="Highest High", color=color.green, linewidth=2)
plot(ll, title="Lowest Low", color=color.red, linewidth=2)



Plus de