Robot de trading neurologue

EMA BB MACD RSI DCA
Date de création: 2025-10-20 15:48:05 Dernière modification: 2025-10-20 15:48:05
Copier: 0 Nombre de clics: 216
2
Suivre
329
Abonnés

Robot de trading neurologue Robot de trading neurologue

Ce n’est pas une stratégie de DCA ordinaire, mais un robot de trading qui réfléchit

En regardant les milliers de codes de Pine Script, ce “Master Trading Bot” a effectivement deux pinceaux. L’auteur a joué le DCA à un nouveau niveau: non pas un investissement sans cerveau, mais un système d’augmentation de stock intelligent basé sur des indicateurs techniques. La position initiale est de 5% et chaque augmentation de DCA est de 2,5% et ne dépasse pas 100%.

La clé réside dans les conditions de déclenchement du DCA: le prix doit tomber au-dessous du coût moyen et la baisse doit atteindre une dépréciation dynamique de 2% + pas × 4%. La première fois, le DCA doit baisser de 2%, la seconde de 6% et la troisième de 10%. Cette conception évite de prendre des positions fréquemment lors de petites fluctuations et ne les prend que lors d’un véritable redressement.

Une combinaison de multiples indicateurs techniques, mais une logique claire et non redondante

La stratégie utilise les 3/7/18 périodes EMA pour construire un cadre de tendance, avec 20 périodes de Brin pour déterminer la position des prix, 52/200/3 pour les paramètres MACD pour définir les signaux de tendance à moyen et long terme, et 14 périodes RSI pour les jugements de survente. Cette combinaison couvre les trois dimensions de tendance, de dynamique et de volatilité, et est plus fiable qu’une seule stratégie d’indicateur.

Les conditions d’achat sont strictes: EMA rapide>EMA lente+MACD Gold Fork+prix au-dessus de la voie médiane de Bolling+RSI<65 ❚ Ces quatre conditions sont remplies simultanément pour ouvrir une position, filtrant la plupart des faux signaux ❚ Les conditions de vente sont également strictes: il doit y avoir un minimum de 2% de profit + revirement de tendance + MACD Dead Fork ❚ Cette conception de “vendre à profit” évite les pertes inutiles ❚

Le paramètre de 100% Stop Loss semble radical, mais il est raisonnable.

Le 100 pour cent de stop loss dans le code semble exagéré, mais la note dit clairement: “Le prix doit descendre à 0 pour être déclenché”. En fait, cela signifie que le stop loss traditionnel est fermé et que le risque est géré en se basant uniquement sur les indicateurs techniques et les objectifs de profit.

Le véritable contrôle du risque est le suivant: Signaux de baisse de 2% du prix + dépréciation dynamique du DCA + sortie forcée des bénéfices. La stratégie suit les prix les plus élevés sur 500 cycles et déclenche un signal de vente dès que le prix baisse de plus de 2% par rapport au sommet actuel.

La gestion de l’argent est la compétitivité centrale de cette stratégie.

La stratégie est conçue de manière à augmenter la position au fur et à mesure que le compte grandit. Une position initiale de 5% maîtrise le risque unique, tandis qu’une augmentation progressive de la position assure un feu suffisant face à une opportunité réelle.

Le plus sophistiqué est la gestion de l’état “just_sold”: une fois vendu, il n’est pas immédiatement acheté à nouveau, sauf si un fort signal de pessimisme apparaît. Cela évite les transactions fréquentes dans un marché en crise, réduit les coûts de commissions et les risques d’opérations émotionnelles.

Les scénarios sont clairs, pas une stratégie universelle

Cette stratégie est la plus adaptée pour les achats de retours dans les tendances haussières à moyen et long terme, et elle est très courante en période de baisse ou de creux à long terme. Le paramètre 52200 du MACD le rend plus adapté pour les jugements de tendance à plus grande échelle, et non pour les transactions à court terme.

Le seuil de survente du RSI est fixé à 25 au lieu de 30, ce qui indique que la stratégie est orientée vers l’achat dans des retournements plus profonds. Cette conception permet d’obtenir de meilleurs points de vente dans un marché haussier, mais peut “prendre le couteau” dans un marché baissier. Il est recommandé de l’utiliser dans des tendances à la hausse claires et d’éviter de démarrer au sommet du marché ou dans une tendance baissière.

La performance de la retraite nécessite une attention particulière aux retraits maximaux et aux pertes continues

La logique théorique de la stratégie est parfaite, mais la performance réelle dépend des données de retracement spécifiques. Une attention particulière doit être accordée à la question de savoir si le retrait maximal est dans la plage acceptable, si le nombre de pertes consécutives est trop élevé et si la performance varie dans différents environnements de marché.

La stratégie de DCA est caractérisée par une augmentation continue de la position pendant la baisse, ce qui signifie que la valeur nette du compte va d’abord baisser puis augmenter. Les investisseurs doivent avoir suffisamment de tolérance psychologique et de réserves de fonds. Il est recommandé de tester d’abord sur de petits fonds, puis d’augmenter progressivement l’investissement après avoir confirmé les caractéristiques de la stratégie.

Astuce: Toutes les stratégies de quantification comportent un risque de perte, les retours sur l’historique ne représentent pas les gains futurs et nécessitent une gestion rigoureuse des risques et une allocation appropriée des fonds.

Code source de la stratégie
/*backtest
start: 2024-10-20 00:00:00
end: 2025-10-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/

// This Pine Script™ code is subject to the terms of the MPL 2.0 at https://mozilla.org/MPL/2.0/
// © MTB by Neurodoc
// By Nicolás Astorga

//@version=5
strategy("Master Trading Bot by Neurodoc", 
         shorttitle="MTB Adaptation", 
         overlay=true, 
         initial_capital=10000, 
         pyramiding=100,
         commission_value=0.1, 
         commission_type=strategy.commission.percent,
         default_qty_type = strategy.cash)

// —————— CONFIGURATION (Based on ve.env) ——————
// Purchase and DCA Percentages
var GRP_DCA = "DCA Configuration"
start_percentage = input.float(5.0, "Initial Buy Percentage (%)", group=GRP_DCA)
increment_percentage = input.float(2.5, "Increment per DCA Buy (%)", group=GRP_DCA)
max_percentage = input.float(100.0, "Maximum Buy Percentage (%)", group=GRP_DCA)
min_profit_percent = input.float(2.0, "Minimum Profit for Sell (%)", group=GRP_DCA)

// Stop Loss and Drop Signal
var GRP_RISK = "Risk Management"
stop_loss_percent = input.float(100.0, "Stop Loss (%)", group=GRP_RISK, tooltip="A value of 100 means there’s no real stop loss, as price would have to go to 0.")
drop_percent_signal = input.float(2.0, "Price Drop for Sell Signal (%)", group=GRP_RISK)

// Indicator Parameters
var GRP_INDICATORS = "Indicator Parameters"
ema_fast_period = input.int(3, "Fast EMA", group=GRP_INDICATORS)
ema_mid_period = input.int(7, "Medium EMA", group=GRP_INDICATORS)
ema_slow_period = input.int(18, "Slow EMA", group=GRP_INDICATORS)
bb_length = input.int(20, "Bollinger Bands Length", group=GRP_INDICATORS)
bb_stddev = input.float(2.0, "BB Standard Deviation", group=GRP_INDICATORS)
macd_fast = input.int(52, "MACD Fast", group=GRP_INDICATORS)
macd_slow = input.int(200, "MACD Slow", group=GRP_INDICATORS)
macd_signal = input.int(3, "MACD Signal", group=GRP_INDICATORS)
rsi_length = input.int(14, "RSI Length", group=GRP_INDICATORS)
rsi_oversold_threshold = input.int(25, "RSI Oversold (for divergence)", group=GRP_INDICATORS)

// —————— INDICATOR CALCULATIONS ——————
// EMAs
ema_fast = ta.ema(open, ema_fast_period)
ema_mid = ta.ema(open, ema_mid_period)
ema_slow = ta.ema(open, ema_slow_period)

// Bollinger Bands
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bb_length, bb_stddev)
bb_width = (bb_upper - bb_lower) / bb_middle * 100
is_bb_expanding = bb_width > bb_width[1]

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

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

// Price drop signal from highest price (similar to `cummax` in Python)
highest_price = ta.highest(high, 500) // Using 500-bar lookback to approximate the high
price_drop_percent = ((highest_price - close) / highest_price) * 100
is_price_drop_signal = price_drop_percent >= drop_percent_signal

// —————— TRADING LOGIC ——————
// Trend Conditions
is_bullish = ema_fast > ema_slow and macd_line > signal_line and close > bb_middle
is_bearish = ema_fast < ema_slow and macd_line < signal_line and close < bb_middle
is_weakening = rsi < rsi[1]

// Variables to manage strategy state
var bool just_sold = false
var int dca_step = 0

// Determine next buy percentage of capital
dca_buy_percentage = start_percentage + (dca_step * increment_percentage)
if dca_buy_percentage > max_percentage
    dca_buy_percentage := max_percentage

avg_buy_price = strategy.position_avg_price

// Initial Long Condition
long_signal_initial = strategy.position_size == 0 and is_bullish and macd_line > signal_line and rsi < 65

// DCA Condition
price_drop_from_avg = ((avg_buy_price - close) / avg_buy_price) * 100
dca_required_drop = 2.0 + (dca_step * 4.0) // DCA price drop start and increment logic
long_signal_dca = strategy.position_size > 0 and is_bearish and close < avg_buy_price and price_drop_from_avg >= dca_required_drop

// Manage `just_sold` state
if strategy.position_size > 0
    just_sold := false
if strategy.position_size == 0 and strategy.position_size[1] > 0
    just_sold := true

// Avoid immediate repurchase after sell unless bullish condition is strong
long_signal = (just_sold and is_bullish) ? long_signal_initial : (not just_sold ? (long_signal_initial or long_signal_dca) : false)

// Sell (Close) Condition
current_profit_percent = ((close - avg_buy_price) / avg_buy_price) * 100
has_min_profit = current_profit_percent >= min_profit_percent
stop_loss_price = avg_buy_price * (1 - stop_loss_percent / 100)
is_stoploss_triggered = close <= stop_loss_price

short_signal = strategy.position_size > 0 and has_min_profit and ((is_bearish and is_weakening) or is_price_drop_signal or is_stoploss_triggered or (macd_line < signal_line))

// —————— ORDER EXECUTION ——————
if (long_signal)
    // Calculate how much MONEY (USDT) to invest in this trade
    cash_to_invest = (strategy.equity * dca_buy_percentage / 100) / close
    strategy.entry("Buy", strategy.long, qty=cash_to_invest)
    dca_step := dca_step + 1
        
if (short_signal)
    strategy.close_all(comment="Sell")
    dca_step := 0 // Reset DCA counter after selling

// —————— VISUALIZATION ——————
// Background color by trend
bgcolor(is_bullish ? color.new(color.green, 90) : is_bearish ? color.new(color.red, 90) : na)

// Plot EMAs and Bollinger Bands
plot(ema_fast, "Fast EMA", color.blue)
plot(ema_slow, "Slow EMA", color.orange)
p1 = plot(bb_upper, "Upper BB", color=color.gray)
p2 = plot(bb_lower, "Lower BB", color=color.gray)
fill(p1, p2, color=color.new(color.gray, 90))

// Plot average buy price when in position
plot(strategy.position_size > 0 ? avg_buy_price : na, "Average Buy Price", color.yellow, style=plot.style_linebr, linewidth=2)

// Plot Take Profit target
plot(strategy.position_size > 0 ? avg_buy_price * (1 + min_profit_percent / 100) : na, "Sell Price (TP)", color.aqua, style=plot.style_linebr, linewidth=2)

// Plot Stop Loss level
plot(strategy.position_size > 0 ? stop_loss_price : na, "Stop Loss", color.fuchsia, style=plot.style_linebr, linewidth=2)