Les ressources ont été chargées... Je charge...

Stratégie de rupture de canal adaptative avec système de négociation dynamique de support et de résistance

Auteur:ChaoZhang est là., Date: 2025-01-06 11h40 et 35 min
Les étiquettes:R.R.ATRRRSLTP- Je vous en prie.

img

Résumé

Cette stratégie est un système de trading avancé basé sur des niveaux de support et de résistance, combinant des canaux de tendance dynamiques avec une fonctionnalité de gestion des risques.

Principes de stratégie

La logique de base comprend plusieurs éléments clés:

  1. Les niveaux de support et de résistance sont calculés sur la base des prix les plus bas et les plus élevés au cours d'une période de rétrospective définie par l'utilisateur
  2. La largeur dynamique du canal est définie par des paramètres en pourcentage, en construisant des canaux supérieurs et inférieurs en fonction des niveaux de support et de résistance
  3. Les signaux d'achat sont déclenchés lorsque le prix s'approche du niveau de support (à moins de 1% de distance)
  4. Le système calcule automatiquement les niveaux de stop-loss et de take-profit en fonction des pourcentages définis par l'utilisateur
  5. Les transactions ne sont exécutées que dans une plage de temps de backtesting spécifiée
  6. Les rapports risque/rendement sont calculés et affichés en temps réel pour aider les traders à évaluer les rendements potentiels par rapport aux risques.

Les avantages de la stratégie

  1. Haute adaptabilité: les niveaux de support et de résistance s'adaptent dynamiquement aux changements du marché, en s'adaptant aux différents environnements du marché
  2. Gestion complète des risques: intègre le calcul du ratio stop-loss, take-profit et risque-rendement avec la visualisation
  3. Signaux de négociation clairs: fournit des signaux d'entrée distincts, réduisant l'impact du jugement subjectif
  4. Excellente visualisation: différents niveaux de prix sont affichés intuitivement à travers différentes lignes de couleur et étiquettes
  5. Paramètres flexibles: permet aux utilisateurs d'ajuster les paramètres en fonction de leur style de négociation personnel et des caractéristiques du marché

Risques stratégiques

  1. Risque de volatilité des marchés: peut déclencher des signaux de négociation excessifs sur des marchés très volatils
  2. Risque de fausse rupture: les prix qui s'approchent des niveaux de soutien peuvent entraîner de fausses ruptures menant à des signaux incorrects.
  3. Sensibilité des paramètres: les performances de la stratégie dépendent fortement de la période de rétrospective et des paramètres de largeur de canal
  4. Limitation de négociation unidirectionnelle: ne prend actuellement en charge que les positions longues, potentiellement manquant des opportunités courtes
  5. Dépendance du temps: l'efficacité de la stratégie est limitée à une plage de temps de backtesting spécifiée

Directions d'optimisation de la stratégie

  1. Ajouter un filtre de tendance: intégrer des moyennes mobiles ou des indicateurs de dynamique pour filtrer les signaux de contre-tendance
  2. Directions de négociation complètes: ajouter une logique de négociation courte pour améliorer la globalité de la stratégie
  3. Optimiser la génération de signaux: intégrer des indicateurs de volume pour vérifier la validité de l'éclatement des prix
  4. Réglage dynamique du stop-loss: régler dynamiquement les distances de stop-loss en fonction de l'ATR ou de la volatilité
  5. Améliorer la gestion des positions: ajuster dynamiquement la taille des positions en fonction du rapport risque/rendement et de la volatilité du marché

Résumé

Cette stratégie combine des concepts d'analyse technique clés - niveaux de support/résistance et canaux de tendance - pour construire un système de trading logiquement rigoureux et contrôlé par le risque.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Support and Resistance with Trend Lines and Channels", overlay=true)

// Inputs
lookback = input.int(20, title="Lookback Period for Support/Resistance", minval=1)
channelWidth = input.float(0.01, title="Channel Width (%)", minval=0.001) / 100
startDate = input(timestamp("2023-01-01 00:00"), title="Backtesting Start Date")
endDate = input(timestamp("2023-12-31 23:59"), title="Backtesting End Date")

// Check if the current bar is within the testing range
inTestingRange = true

// Support and Resistance Levels
supportLevel = ta.lowest(low, lookback)  // Swing low (support)
resistanceLevel = ta.highest(high, lookback)  // Swing high (resistance)

// Trend Lines and Channels
var line supportLine = na
var line resistanceLine = na
var line upperChannelLine = na
var line lowerChannelLine = na

// Calculate channel levels
upperChannel = resistanceLevel * (1 + channelWidth)  // Upper edge of channel
lowerChannel = supportLevel * (1 - channelWidth)  // Lower edge of channel

// Create or update the support trend line
// if na(supportLine)
//     supportLine := line.new(bar_index, supportLevel, bar_index + 1, supportLevel, color=color.green, width=2, extend=extend.right)
// else
//     line.set_y1(supportLine, supportLevel)
//     line.set_y2(supportLine, supportLevel)

// // Create or update the resistance trend line
// if na(resistanceLine)
//     resistanceLine := line.new(bar_index, resistanceLevel, bar_index + 1, resistanceLevel, color=color.red, width=2, extend=extend.right)
// else
//     line.set_y1(resistanceLine, resistanceLevel)
//     line.set_y2(resistanceLine, resistanceLevel)

// // Create or update the upper channel line
// if na(upperChannelLine)
//     upperChannelLine := line.new(bar_index, upperChannel, bar_index + 1, upperChannel, color=color.blue, width=1, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(upperChannelLine, upperChannel)
//     line.set_y2(upperChannelLine, upperChannel)

// // Create or update the lower channel line
// if na(lowerChannelLine)
//     lowerChannelLine := line.new(bar_index, lowerChannel, bar_index + 1, lowerChannel, color=color.purple, width=1, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(lowerChannelLine, lowerChannel)
//     line.set_y2(lowerChannelLine, lowerChannel)

// Buy Condition: When price is near support level
buyCondition = close <= supportLevel * 1.01 and inTestingRange
if buyCondition
    strategy.entry("Buy", strategy.long)

// Stop Loss and Take Profit
stopLossPercentage = input.float(1.5, title="Stop Loss Percentage", minval=0.0) / 100
takeProfitPercentage = input.float(3.0, title="Take Profit Percentage", minval=0.0) / 100

var float longStopLoss = na
var float longTakeProfit = na
if strategy.position_size > 0
    longStopLoss := strategy.position_avg_price * (1 - stopLossPercentage)
    longTakeProfit := strategy.position_avg_price * (1 + takeProfitPercentage)
    strategy.exit("Exit Buy", "Buy", stop=longStopLoss, limit=longTakeProfit)

// Visualize Entry, Stop Loss, and Take Profit Levels
var float entryPrice = na
if buyCondition
    entryPrice := close
if not na(entryPrice)
    label.new(bar_index, entryPrice, text="Entry: " + str.tostring(entryPrice, "#.##"), style=label.style_label_up, color=color.green, textcolor=color.white)

if strategy.position_size > 0
    line.new(bar_index, longStopLoss, bar_index + 1, longStopLoss, color=color.red, width=1, extend=extend.right)
    line.new(bar_index, longTakeProfit, bar_index + 1, longTakeProfit, color=color.blue, width=1, extend=extend.right)

// Risk-to-Reward Ratio (Optional)
if not na(entryPrice) and not na(longStopLoss) and not na(longTakeProfit)
    riskToReward = (longTakeProfit - entryPrice) / (entryPrice - longStopLoss)
    label.new(bar_index, entryPrice, text="R:R " + str.tostring(riskToReward, "#.##"), style=label.style_label_up, color=color.yellow, textcolor=color.black, size=size.small)

Relationnée

Plus de