RSI Stratégie de moyenne dynamique de position

Auteur:ChaoZhang est là., Date: 2024-02-06 09:44:05 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie combine l'indice de force relative (RSI) et les principes de moyenne de position de martingale. Elle déclenche une position longue lorsque l'indice de force relative descend en dessous de la ligne de survente, et double la position si le prix continue de baisser.

La logique de la stratégie

  1. Utiliser l'indicateur RSI pour identifier les conditions de survente du marché, la période RSI étant fixée à 14 et le seuil de survente à 30.
  2. Commencer la première position longue avec 5% du capital du compte lorsque le RSI est inférieur à 30.
  3. Si le prix baisse de 0,5% par rapport au prix d'entrée initial, doublez la taille de la position pour la faire baisser en moyenne.
  4. Prenez des profits à 0,5% d'augmentation à chaque fois.
  5. Répétez le cycle.

Analyse des avantages

  • Identifier les conditions de survente du marché avec RSI pour les bons points d'entrée.
  • La moyenne des positions de Martingale fait baisser le prix d'entrée moyen.
  • Les petits profits permettent des gains constants.
  • Convient pour le trading au comptant de pièces à forte capitalisation boursière pour des risques contrôlés.

Analyse des risques

  • Un ralentissement prolongé du marché peut entraîner des pertes importantes.
  • Aucun stop loss signifie une baisse illimitée.
  • Trop de moyennes en bas augmente les pertes.
  • Il y a toujours des risques inhérents à la direction longue.

Directions d'optimisation

  1. Incorporer le stop loss pour limiter la perte maximale.
  2. Optimiser les paramètres du RSI pour trouver les meilleurs signaux de surachat/survente.
  3. Définir une fourchette de bénéfices raisonnable en fonction de la volatilité spécifique des pièces.
  4. Déterminer le rythme de la moyenne sur la base des actifs totaux ou des règles de dimensionnement des positions.

Résumé

Cette stratégie combine l'indicateur RSI et la moyenne de position martingale pour tirer parti des situations de survente avec une moyenne appropriée à la baisse et un petit profit pour des gains réguliers.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stavolt

//@version=5
strategy("RSI Martingale Strategy", overlay=true, default_qty_type=strategy.cash, currency=currency.USD)

// Inputs
rsiLength = input(14, title="RSI Length")
oversoldThreshold = input(30, title="Oversold Threshold") // Keeping RSI threshold
profitTargetPercent = input(0.5, title="Profit Target (%)") / 100
initialInvestmentPercent = input(5, title="Initial Investment % of Equity")

// Calculating RSI
rsiValue = ta.rsi(close, rsiLength)

// State variables for tracking the initial entry
var float initialEntryPrice = na
var int multiplier = 1

// Entry condition based on RSI
if (rsiValue < oversoldThreshold and na(initialEntryPrice))
    initialEntryPrice := close
    strategy.entry("Initial Buy", strategy.long, qty=(strategy.equity * initialInvestmentPercent / 100) / close)
    multiplier := 1

// Adjusting for errors and simplifying the Martingale logic
// Note: This section simplifies the aggressive position size adjustments without loops
if (not na(initialEntryPrice))
    if (close < initialEntryPrice * 0.995) // 0.5% drop from initial entry
        strategy.entry("Martingale Buy 1", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 2)
        multiplier := 2 // Adjusting multiplier for the next potential entry

    if (close < initialEntryPrice * 0.990) // Further drop
        strategy.entry("Martingale Buy 2", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 4)
        multiplier := 4

    // Additional conditional entries could follow the same pattern

// Checking for profit target to close positions
if (strategy.position_size > 0 and (close - strategy.position_avg_price) / strategy.position_avg_price >= profitTargetPercent)
    strategy.close_all(comment="Take Profit")
    initialEntryPrice := na // Reset for next cycle


Plus de