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

Une stratégie de négociation à plusieurs périodes basée sur des moyennes mobiles

Auteur:ChaoZhang est là., Date: le 26-12-2023 à 10h13h34
Les étiquettes:

img

Résumé

Cette stratégie combine trois indicateurs: les moyennes mobiles, les bandes de Bollinger et l'indice de force relative (RSI) pour le trading boursier multipériodique. Elle prend en compte les croisements des moyennes mobiles rapides et lentes, le RSI inférieur à 50 et le prix de clôture inférieur à la bande moyenne de BB lors de l'achat.

La logique de la stratégie

La stratégie utilise principalement trois indicateurs pour la prise de décision. Premièrement, l'indicateur MACD composé de moyennes mobiles rapides et lentes. Les croisements de la ligne rapide au-dessus de la ligne lente génèrent des signaux d'achat. Deuxièmement, les bandes de Bollinger avec des bandes moyennes, supérieures et inférieures.

Plus précisément, la stratégie nécessite d'abord le passage de la moyenne mobile rapide au-dessus de la moyenne mobile lente, indiquant un renforcement de la tendance haussière qui suggère l'achat. Il nécessite également un RSI inférieur à 50, montrant que le prix peut être à des niveaux de survente et présentant des opportunités d'achat. En outre, il nécessite le prix de clôture au-dessous de la bande moyenne BB, indiquant le bas de l'oscillation des prix et un bon point d'entrée.

Pour la prise de profit et le stop loss, lorsque le RSI dépasse 70, il indique que le prix peut être à des niveaux de surachat et que la dynamique de la tendance haussière diminue, ce qui convient à la prise de profit.

Les avantages

La stratégie combine les forces des moyennes mobiles, des bandes de Bollinger et du RSI pour déterminer plus précisément les points d'entrée et de sortie.

  1. Les moyennes mobiles déterminent la dynamique de la tendance haussière des prix. La bande médiane BB indique les bas de swing pour l'entrée. Le RSI évite d'acheter aux pics de prix. Les trois ensemble offrent des opportunités d'achat relativement idéales pendant les tendances haussières des prix.

  2. La combinaison de l'indice RSI et de la bande supérieure de BB permet de bien capturer les hauts de fluctuation des prix pour réaliser des bénéfices afin d'éviter les conditions de surachat.

  3. Les évaluations à plusieurs périodes permettent de saisir les opportunités de négociation à travers les délais pour maximiser les bénéfices.

  4. Les règles de négociation logiques rendent la stratégie facilement compréhensible pour les investissements à moyen et long terme.

Les risques

Malgré la combinaison d'indicateurs visant à améliorer la précision des décisions, des risques essentiels existent:

  1. Les paramètres pour les indicateurs doivent être ajustés empiriquement. Un ajustement inadéquat affecte la performance de la stratégie.

  2. Dans les marchés baissiers, la vitesse des baisses de prix peut rendre les stop-loss inefficaces.

  3. Les risques d'actions uniques demeurent malgré le portefeuille.

  4. Une fréquence de négociation potentiellement excessive. Un paramètre optimal peut entraîner des transactions fréquentes, entraînant des coûts et des taxes de transaction plus élevés.

Les solutions:

  1. Ajuster les paramètres sur la base des tests antérieurs pour obtenir une fréquence de signal appropriée.

  2. Adaptez les périodes moyennes mobiles à une fréquence d'entrée modérée et minimisez les pertes.

  3. Diversifier les investissements sur un plus grand nombre d'actifs afin de minimiser les risques liés à un seul stock.

  4. Réduire modérément les critères d'achat et de prise de bénéfices pour réduire la fréquence des échanges.

Des possibilités d'amélioration

Il reste encore des possibilités d'optimisation:

  1. Ajouter plus de filtres comme le volume pour assurer des volumes amplifiés sur les achats, améliorant la précision des décisions.

  2. Incorporer des modules de dimensionnement des positions à la dimensionnement dynamique des positions en fonction des conditions du marché.

  3. Utiliser des algorithmes d'apprentissage en profondeur pour régler automatiquement les paramètres grâce à une formation sur de grands ensembles de données.

  4. Introduire davantage de délais pour les arrêts afin d'élargir leur applicabilité.

Conclusion

Dans l'ensemble, la stratégie a une logique claire et facile à comprendre, synergie des indicateurs pour réduire les faux signaux. L'ajustement des paramètres et l'ajout d'indicateurs peuvent continuer à améliorer la robustesse et la précision des décisions. Elle convient aux investissements à moyen et long terme et au trading quantitatif. Néanmoins, aucune stratégie n'élimine complètement les risques du marché.


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

//
//@author Alorse
//@version=4
strategy("MACD + BB + RSI [Alorse]", shorttitle="BB + MACD + RSI [Alorse]", overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01) 

txtVer = "1.0.1"
version = input(title="Version", type=input.string, defval=txtVer, options=[txtVer], tooltip="This is informational only, nothing will change.")
src = input(title="Source", type=input.source, defval=close)

// MACD
fast_length = input(title="Fast Length", type=input.integer, defval=12, group="MACD")
slow_length = input(title="Slow Length", type=input.integer, defval=26, group="MACD")
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input(title="Oscillator MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input(title="Signal Line MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)

// Bollinger Bands
bbGroup = "Bollindger Bands"
length = input(20, title="Length", group=bbGroup)
mult = input(2.0, title="StdDev", minval=0.001, maxval=5, group=bbGroup)

basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev

// RSI
rsiGroup = "RSI"
lenRSI = input(14, title="Length", minval=1, group=rsiGroup)
// lessThan = input(50, title="Less than", minval=1 , maxval=100, group=rsiGroup)
RSI = rsi(src, lenRSI)

// Strategy Conditions
buy = crossover(macd, signal) and RSI < 50 and close < basis
sell = RSI > 70 and close > upper


// Stop Loss
slGroup = "Stop Loss"
useSL = input(false, title="╔══════   Enable   ══════╗", group=slGroup, tooltip="If you are using this strategy for Scalping or Futures market, we do not recommend using Stop Loss.")
SLbased = input(title="Based on", type=input.string, defval="Percent", options=["ATR", "Percent"], group=slGroup, tooltip="ATR: Average True Range\nPercent: eg. 5%.")
multiATR = input(10.0, title="ATR   Mult", type=input.float, group=slGroup, inline="atr")
lengthATR = input(14, title="Length", type=input.integer, group=slGroup, inline="atr")
SLPercent = input(10, title="Percent", type=input.float, group=slGroup) * 0.01

longStop = 0.0
shortStop = 0.0

if SLbased == "ATR"
    longStop := valuewhen(buy, low, 0) - (valuewhen(buy, rma(tr(true), lengthATR), 0) * multiATR)
    longStopPrev = nz(longStop[1], longStop)
    longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

    shortStop := (valuewhen(sell, rma(tr(true), lengthATR), 0) * multiATR) + valuewhen(sell, high, 0)
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := close[1] > shortStopPrev ? max(shortStop, shortStopPrev) : shortStop
if SLbased == "Percent"
    longStop  := strategy.position_avg_price * (1 - SLPercent)
    shortStop := strategy.position_avg_price * (1 + SLPercent)

strategy.entry("Long", true, when=buy)
strategy.close("Long", when=sell, comment="Exit")

if useSL
    strategy.exit("Stop Loss", "Long", stop=longStop)


Plus de