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

Système de stratégie de moyenne dynamique des coûts basé sur les bandes de Bollinger et le RSI

Auteur:ChaoZhang est là., Date: 2024-11-27 16:37:12
Les étiquettes:BBIndice de résistanceDCASMATP

img

Résumé

Cette stratégie est un système de négociation quantitatif qui combine les bandes de Bollinger, l'indice de force relative (RSI) et la moyenne dynamique des coûts (DCA). La stratégie implémente la création automatique de positions grâce à des règles de gestion de l'argent établies pendant les fluctuations du marché, tout en intégrant des indicateurs techniques pour la détermination des signaux d'achat / vente afin d'obtenir une exécution contrôlée des risques. Le système comprend également une logique de prise de profit et une fonctionnalité de suivi des bénéfices cumulés pour une surveillance et une gestion efficaces des performances commerciales.

Principes de stratégie

La stratégie fonctionne sur la base des composantes essentielles suivantes:

  1. Bandes de Bollinger pour déterminer les plages de volatilité des prix, en considérant l'achat à la bande inférieure et la vente à la bande supérieure
  2. RSI pour confirmer les conditions de surachat/survente, confirmer les conditions de survente inférieures à 25 et les conditions de surachat supérieures à 75
  3. Le module DCA calcule dynamiquement la taille des positions sur la base du fonds propres du compte pour une gestion adaptative des capitaux
  4. Le module de prise de profit fixe un objectif de 5% pour la clôture automatique des positions
  5. La surveillance de l'état du marché calcule les variations du marché sur 90 jours pour évaluer les tendances globales
  6. Le suivi des bénéfices cumulés enregistre les bénéfices/pertes de chaque transaction pour l'évaluation des performances de la stratégie

Les avantages de la stratégie

  1. La validation croisée d'indicateurs techniques multiples améliore la fiabilité du signal
  2. La gestion dynamique des positions évite les risques liés aux positions fixes
  3. Des conditions raisonnables de prise de bénéfices assurent des bénéfices en temps opportun
  4. Les capacités de surveillance des tendances du marché aident à mieux comprendre la situation
  5. Un système complet de suivi des bénéfices facilite l'analyse de la stratégie
  6. Un système d'alerte bien configuré offre des opportunités de négociation en temps réel

Risques stratégiques

  1. Les marchés instables peuvent déclencher des signaux fréquents augmentant les coûts de négociation
  2. Les indicateurs RSI peuvent être en retard sur les marchés en tendance
  3. Le taux de profit fixe peut être supprimé trop tôt en cas de forte tendance
  4. La stratégie DCA peut entraîner des retires significatifs en cas de tendance à la baisse prolongée Recommandations en matière de gestion des risques:
  • Définir les limites de position maximales
  • Ajuster dynamiquement les paramètres en fonction de la volatilité du marché
  • Ajouter des filtres de tendance
  • Mettre en œuvre une stratégie de prise de bénéfices à plusieurs niveaux

Directions d'optimisation de la stratégie

  1. Optimisation dynamique des paramètres:
  • Les paramètres des bandes de Bollinger s'adaptent à la volatilité
  • Les seuils de l'indice de résistance varient en fonction des cycles du marché
  • L'allocation de DCA s'ajuste en fonction de la taille du compte
  1. Amélioration du système de signalisation:
  • Ajouter une confirmation de volume
  • Inclure une analyse de la tendance
  • Intégrer la validation croisée d'indicateurs techniques supplémentaires
  1. Amélioration du contrôle des risques:
  • Mettre en œuvre un stop-loss dynamique
  • Ajoutez le contrôle de la prise maximale
  • Fixer des limites de perte quotidiennes

Résumé

La stratégie construit un système de trading complet grâce à une combinaison d'analyses techniques et de méthodes de gestion de l'argent. Ses atouts résident dans la confirmation de signaux multiples et une gestion approfondie des risques, bien qu'elle nécessite encore des tests et une optimisation approfondis dans le trading en direct.


/*backtest
start: 2023-11-27 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true)

// Input Parameters
length = input.int(20, title="BB Length")  // Adjusted BB length
mult = input.float(2.5, title="BB Multiplier")  // Adjusted BB multiplier
rsiLength = input.int(14, title="RSI Length")  // Adjusted RSI length
rsiBuyLevel = input.int(25, title="RSI Buy Level")  // Adjusted RSI Buy Level
rsiSellLevel = input.int(75, title="RSI Sell Level")  // Adjusted RSI Sell Level
dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step")
takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy")

// Calculate DCA position size
equity = strategy.equity  // Account equity
dcaPositionSize = (equity * dcaPositionSizePercent) / 100  // DCA position size as percentage of equity

// Bollinger Bands Calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// RSI Calculation
rsi = ta.rsi(close, rsiLength)

// Plotting Bollinger Bands and RSI levels
plot(upper, color=color.red, title="Bollinger Upper")
plot(lower, color=color.green, title="Bollinger Lower")
hline(rsiBuyLevel, "RSI Buy Level", color=color.green)
hline(rsiSellLevel, "RSI Sell Level", color=color.red)

// Buy and Sell Signals
buySignal = (rsi < rsiBuyLevel and close <= lower)
sellSignal = (rsi > rsiSellLevel and close >= upper)

// DCA Strategy: Enter Long or Short based on signals with calculated position size
if (buySignal)
    strategy.entry("DCA Buy", strategy.long)

if (sellSignal)
    strategy.entry("DCA Sell", strategy.short)

// Take Profit Logic
if (strategy.position_size > 0)  // If long
    strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100))

if (strategy.position_size < 0)  // If short
    strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100))

// Plot Buy/Sell Signals on the chart
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white)

// Alerts for Buy/Sell Signals
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected")

// Cumulative Profit Calculation
var float buyPrice = na
var float profit = na
var float cumulativeProfit = 0.0  // Cumulative profit tracker

if (buySignal)
    buyPrice := close
if (sellSignal and not na(buyPrice))
    profit := (close - buyPrice) / buyPrice * 100
    cumulativeProfit := cumulativeProfit + profit  // Update cumulative profit
    label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down)
    buyPrice := na  // Reset buyPrice after sell

// Plot cumulative profit on the chart
var label cumulativeLabel = na
if (not na(cumulativeProfit))
    if not na(cumulativeLabel)
        label.delete(cumulativeLabel)
    cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up)

// Market Change over 3 months Calculation
threeMonthsBars = 3 * 30 * 24  // Approximation of 3 months in bars (assuming 1 hour per bar)
priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars])
marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100

// Plot market change over 3 months
var label marketChangeLabel = na
if (not na(marketChange))
    if not na(marketChangeLabel)
        label.delete(marketChangeLabel)
    marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up)

// Both labels (cumulative profit and market change) are displayed simultaneously
var label infoLabel = na
if (not na(cumulativeProfit) and not na(marketChange))
    if not na(infoLabel)
        label.delete(infoLabel)
    infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)


Relationnée

Plus de