Contrarian Donchian Channel Touch Entry Strategy avec pause de perte post-stop et perte de stop de suivi

Auteur:ChaoZhang est là., Date: 24 janvier 2024
Les étiquettes:

img

Résumé

La Contrarian Donchian Channel Touch Entry Strategy est une stratégie de trading quantitative basée sur l'indicateur Donchian Channel.

La stratégie entre dans des positions longues / courtes lorsque le prix touche la bande supérieure / inférieure du canal de Donchian. Les niveaux de stop loss et de take profit sont définis pour chaque transaction. Après un stop loss, il y aurait une pause pendant un certain nombre de barres avant de prendre un nouveau commerce dans le même sens.

La logique de la stratégie

La stratégie utilise le canal de Donchian de 20 périodes, composé de la bande supérieure, de la bande inférieure et de la ligne moyenne.

Logique d'entrée

Allez long lorsque le prix touche la bande inférieure; allez court lorsque le prix touche la bande supérieure.

Une pause (par exemple 3 barres) est requise après un stop loss précédent dans le même sens pour éviter de poursuivre les tendances.

Arrêtez de perdre et profitez

Pour chaque transaction, définir un pourcentage fixe de stop loss (par exemple 22%) et un bénéfice de prise dynamique calculé sur la base du ratio risque/rendement (par exemple 2)

Perte de retard

Utilisez un stop-loss de trailing lors des transactions:

Pour les transactions longues, si le prix dépasse la ligne médiane, ajuster le stop loss au milieu du prix d'entrée et de la ligne médiane.

À l'inverse, pour les positions courtes qui passent sous la ligne médiane.

Les avantages

  1. Attrapez les mouvements les plus populaires en utilisant les évasions du canal Donchian.

  2. L'entrée de contact contrariaire s'aligne avec le trading contre l'idée de tendance.

  3. Gestion efficace du risque avec pause stop-loss et arrêt trailing.

  4. Des règles claires et faciles à mettre en œuvre.

Les risques

  1. Des piqûres sur les marchés latéraux pour un système suivant la tendance.

  2. Le stop loss fixe pourrait être sujet à être arrêté prématurément.

  3. Un ajustement trop agressif pourrait faire échouer trop tôt les transactions rentables.

  4. L'optimisation des paramètres est cruciale.

Des possibilités d'amélioration

  1. Optimisez la période de révision du canal Donchian pour obtenir les meilleurs paramètres.

  2. Incorporer des règles de dimensionnement de la position, par exemple réinitialiser périodiquement le nombre de pauses.

  3. Ajoutez des filtres à l'aide d'autres indicateurs pour éviter les fausses éruptions.

  4. Expérience avec le stop loss dynamique.

Résumé

La stratégie Contrarian Donchian Channel Touch Entry intègre l'identification des tendances, la gestion des risques et plus encore.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Contrarian Donchian Channel Strategy - Touch Entry with Post-SL Pause and Trailing Stop", overlay=true, default_qty_value=0.01, default_qty_type=strategy.percent_of_equity)

// Inputs
length = input(20, minval=1, title="Donchian Channel Length")
riskRewardRatio = input(2, title="Risk/Reward Ratio")
stopLossPercent = input(0.22, title="Stop Loss (%)") / 100
pauseCandles = input(3, minval=1, title="Pause After SL (Candles)")

// Donchian Channel Calculation
upper = highest(high, length)
lower = lowest(low, length)
centerline = (upper + lower) / 2  // Calculating the Centerline

// Plotting Donchian Channel and Centerline
plot(upper, color=color.red, title="Upper Band")
plot(lower, color=color.green, title="Lower Band")
plot(centerline, color=color.blue, title="Centerline")

// Tracking Stop Loss Hits and Pause
var longSLHitBar = 0
var shortSLHitBar = 0
var int lastTradeDirection = 0 // 1 for long, -1 for short, 0 for none

// Update SL Hit Bars
if (strategy.position_size[1] > 0 and strategy.position_size == 0)
    if (close[1] < strategy.position_avg_price[1])
        longSLHitBar := bar_index
        lastTradeDirection := 1

if (strategy.position_size[1] < 0 and strategy.position_size == 0)
    if (close[1] > strategy.position_avg_price[1])
        shortSLHitBar := bar_index
        lastTradeDirection := -1

// Entry Conditions - Trigger on touch
longCondition = (low <= lower) and (bar_index - longSLHitBar > pauseCandles or lastTradeDirection != 1)
shortCondition = (high >= upper) and (bar_index - shortSLHitBar > pauseCandles or lastTradeDirection != -1)

// Trade Execution
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Initial Stop Loss and Take Profit Calculation
stopLoss = strategy.position_avg_price * (1 - stopLossPercent)
takeProfit = strategy.position_avg_price * (1 + stopLossPercent * riskRewardRatio)

// Trailing Stop Loss Logic
var float trailingStopLong = na
var float trailingStopShort = na

// Update Trailing Stop for Long Position
if (strategy.position_size > 0)
    if (close > centerline)
        trailingStopLong := (strategy.position_avg_price + centerline) / 2
    stopLoss := na(trailingStopLong) ? stopLoss : max(trailingStopLong, stopLoss)

// Update Trailing Stop for Short Position
if (strategy.position_size < 0)
    if (close < centerline)
        trailingStopShort := (strategy.position_avg_price + centerline) / 2
    stopLoss := na(trailingStopShort) ? stopLoss : min(trailingStopShort, stopLoss)

// Setting Stop Loss and Take Profit for each trade
strategy.exit("SL_TP_Long", "Long", stop=stopLoss, limit=takeProfit)
strategy.exit("SL_TP_Short", "Short", stop=stopLoss, limit=takeProfit)


Plus de