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

Stratégie de négociation synergique multi-indicateur avec des bandes de Bollinger, Fibonacci, MACD et RSI

Auteur:ChaoZhang est là., Date: 12-12-2024 17:20:26 Je vous en prie.
Les étiquettes:BBLe MACDIndice de résistanceFIBSMALe taux d'intérêtLe secteur privéLa WMAVWMA

img

Résumé

Cette stratégie est un système de trading complet qui combine plusieurs indicateurs techniques, y compris les bandes de Bollinger, le rétractation de Fibonacci, le MACD et le RSI. La stratégie capture les opportunités de trading dans différentes conditions de marché grâce à la coordination multi-indicateurs et applique la méthode de profit maximal pour le contrôle des risques. Le système adopte une conception modulaire avec des paramètres d'indicateur flexibles, offrant une forte adaptabilité et praticité.

Principes de stratégie

La stratégie utilise quatre principaux indicateurs techniques pour générer des signaux de négociation:

  1. Signaux Bollinger Bands: la rupture des prix en dessous de la bande inférieure génère des signaux longs, la rupture au-dessus de la bande supérieure génère des signaux courts
  2. Signals de Fibonacci: le prix dans la plage de 0 à 23,6% génère des signaux longs, dans la plage de 61,8-100% génère des signaux courts
  3. Les signaux MACD: le passage de la ligne MACD au-dessus de la ligne de signal génère des signaux longs, le passage en dessous génère des signaux courts
  4. Signaux RSI: RSI inférieur au niveau de survente génère des signaux longs, supérieur au niveau de surachat génère des signaux courts La stratégie applique également une méthode de prise de profit maximale, la fermeture automatique des positions lorsque les objectifs de profit prédéfinis ou les niveaux de stop-loss sont atteints.

Les avantages de la stratégie

  1. Synergie multi-indicateurs: améliore la fiabilité du signal grâce à l'intégration de plusieurs indicateurs techniques
  2. Une grande souplesse: les paramètres de l'indicateur peuvent être ajustés pour différents environnements de marché
  3. Contrôle complet du risque: Combine le profit maximal et le stop-loss fixe
  4. Bonne adaptabilité: la stratégie peut s'adapter à différents cycles de marché et conditions de volatilité
  5. Efficacité d'exécution élevée: structure de code claire avec une charge de calcul modérée

Risques stratégiques

  1. Supplément de signaux: plusieurs indicateurs générant simultanément des signaux peuvent entraîner une survente
  2. Sensibilité des paramètres: différentes combinaisons de paramètres peuvent donner des résultats significativement différents
  3. Adaptabilité du marché: peut être sous-performant dans certaines conditions de marché
  4. Impact du glissement: le trading à haute fréquence peut être affecté par le glissement
  5. Gestion de la trésorerie: nécessite une dimensionnement adéquate des positions pour contrôler les risques

Optimisation de la stratégie

  1. Poids du signal: ajouter des poids à différents indicateurs pour améliorer la qualité du signal
  2. Reconnaissance de l'environnement du marché: ajout du module de reconnaissance de l'environnement du marché pour ajuster la stratégie en conséquence
  3. Paramètres dynamiques: introduire un mécanisme d'ajustement adaptatif des paramètres
  4. Coûts de négociation: Optimiser la fréquence de négociation pour réduire les coûts
  5. Filtrage du signal: ajouter des conditions de filtrage supplémentaires pour réduire les faux signaux

Résumé

Cette stratégie permet d'atteindre l'efficacité de la négociation tout en maintenant la stabilité grâce à la coordination multi-indicateurs. Malgré certains risques, elle a une valeur pratique grâce à un contrôle correct des risques et une optimisation continue.


/*backtest
start: 2024-12-04 00:00:00
end: 2024-12-11 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT Bollinger, Fibonacci, MACD & RSI with Max Profit Exit", overlay=true)

// === User Inputs for Bollinger Bands ===
length_bb = input.int(20, minval=1, title="Bollinger Bands Length")
maType_bb = input.string("SMA", title="Bollinger Bands MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src_bb = input(close, title="Bollinger Bands Source")
mult_bb = input.float(2.0, minval=0.001, maxval=50, title="Bollinger Bands StdDev")
offset_bb = input.int(0, title="Bollinger Bands Offset", minval=-500, maxval=500)

// === User Inputs for Fibonacci Levels ===
lookback_fib = input.int(50, minval=1, title="Fibonacci Lookback Period")

// === User Inputs for MACD ===
macd_fast = input.int(12, minval=1, title="MACD Fast Length")
macd_slow = input.int(26, minval=1, title="MACD Slow Length")
macd_signal = input.int(9, minval=1, title="MACD Signal Length")

// === User Inputs for RSI ===
rsi_length = input.int(14, title="RSI Length")
rsi_overbought = input.int(70, title="RSI Overbought Level")
rsi_oversold = input.int(30, title="RSI Oversold Level")

// === Start and End Date Inputs ===
start_date = input(timestamp("2023-01-01 00:00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59:59"), title="End Date")

// === Moving Average Function ===
ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// === Bollinger Bands Calculation ===
basis_bb = ma(src_bb, length_bb, maType_bb)
dev_bb = mult_bb * ta.stdev(src_bb, length_bb)
upper_bb = basis_bb + dev_bb
lower_bb = basis_bb - dev_bb

// === Fibonacci Levels Calculation ===
highest_price = ta.highest(high, lookback_fib)
lowest_price = ta.lowest(low, lookback_fib)

fib_0 = lowest_price
fib_23 = lowest_price + 0.236 * (highest_price - lowest_price)
fib_38 = lowest_price + 0.382 * (highest_price - lowest_price)
fib_50 = lowest_price + 0.5 * (highest_price - lowest_price)
fib_61 = lowest_price + 0.618 * (highest_price - lowest_price)
fib_100 = highest_price

// === MACD Calculation ===
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)

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

// === Plotting for Reference ===
plot(basis_bb, "Bollinger Basis", color=color.blue, offset=offset_bb)
p1_bb = plot(upper_bb, "Bollinger Upper", color=color.red, offset=offset_bb)
p2_bb = plot(lower_bb, "Bollinger Lower", color=color.green, offset=offset_bb)
fill(p1_bb, p2_bb, title="Bollinger Bands Background", color=color.rgb(33, 150, 243, 95))

plot(fib_0, "Fib 0%", color=color.gray)
plot(fib_23, "Fib 23.6%", color=color.yellow)
plot(fib_38, "Fib 38.2%", color=color.orange)
plot(fib_50, "Fib 50%", color=color.blue)
plot(fib_61, "Fib 61.8%", color=color.green)
plot(fib_100, "Fib 100%", color=color.red)

hline(0, "MACD Zero Line", color=color.gray)
plot(macd_line, "MACD Line", color=color.blue)
plot(signal_line, "Signal Line", color=color.orange)

hline(rsi_overbought, "RSI Overbought", color=color.red)
hline(rsi_oversold, "RSI Oversold", color=color.green)
plot(rsi, "RSI", color=color.blue)

// === Combined Trading Logic ===
// Bollinger Bands Signals
long_bb = ta.crossover(close, lower_bb)
short_bb = ta.crossunder(close, upper_bb)

// Fibonacci Signals
long_fib = close <= fib_23 and close >= fib_0
short_fib = close >= fib_61 and close <= fib_100

// MACD Signals
long_macd = ta.crossover(macd_line, signal_line)
short_macd = ta.crossunder(macd_line, signal_line)

// RSI Signals
long_rsi = rsi < rsi_oversold
short_rsi = rsi > rsi_overbought

// Combined Long and Short Conditions
long_condition = (long_bb or long_fib or long_macd or long_rsi) 
short_condition = (short_bb or short_fib or short_macd or short_rsi) 
// === Max Profit Exit Logic ===
// Define the maximum profit exit percentage
take_profit_percentage = input.float(5.0, title="Take Profit (%)", minval=0.1, maxval=100) / 100
stop_loss_percentage = input.float(2.0, title="Stop Loss (%)", minval=0.1, maxval=100) / 100

// Track the highest price during the trade
var float max_profit_price = na
if (strategy.opentrades > 0)
    max_profit_price := na(max_profit_price) ? strategy.opentrades.entry_price(0) : math.max(max_profit_price, high)

// Calculate the take profit and stop loss levels based on the max profit price
take_profit_level = max_profit_price * (1 + take_profit_percentage)
stop_loss_level = max_profit_price * (1 - stop_loss_percentage)

// Exit the trade if the take profit or stop loss level is hit
if (strategy.opentrades > 0)
    if (close >= take_profit_level)
        strategy.exit("Take Profit", from_entry="Long", limit=take_profit_level)
    if (close <= stop_loss_level)
        strategy.exit("Stop Loss", from_entry="Long", stop=stop_loss_level)

if (strategy.opentrades > 0)
    if (close <= take_profit_level)
        strategy.exit("Take Profit", from_entry="Short", limit=take_profit_level)
    if (close >= stop_loss_level)
        strategy.exit("Stop Loss", from_entry="Short", stop=stop_loss_level)

// === Execute Trades ===
if (long_condition)
    strategy.entry("Long", strategy.long, when=not na(long_condition))

if (short_condition)
    strategy.entry("Short", strategy.short, when=not na(short_condition))


Relationnée

Plus de