
La stratégie de suivi des tendances croisées bi-homogènes est un système de trading quantitatif qui combine l’analyse technique et la gestion complète des risques. Le cœur de la stratégie utilise les signaux croisés des moyennes mobiles simples rapides (Fast SMA) et des moyennes mobiles simples lentes (Slow SMA) pour identifier les changements de tendances du marché et assurer la sécurité des fonds grâce à de multiples mécanismes de contrôle des risques. La stratégie est implémentée sur la plate-forme Pine Script et est adaptée aux transactions de suivi des tendances de plusieurs types de transactions.
La stratégie prend ses décisions de négociation sur la base de l’interaction entre deux moyennes mobiles simples:
Mécanisme de génération du signal:
Contrôle du temps: La stratégie consiste à exécuter toutes les décisions de transaction à la clôture de la ligne K, en évitant le biais de regard vers l’avenir et en assurant la fiabilité et la véracité des résultats de la rétroanalyse.
Système de gestion des fonds:
Contrôle des risques à plusieurs niveaux:
Cette stratégie permet de capturer les tendances par un croisement homogène et utilise des mesures complètes de gestion des risques pour assurer la sécurité et la durabilité des transactions.
Un mécanisme de détection des tendances robuste:
Une gestion précise des fonds:
Des niveaux de protection contre les risques:
Contrôle de l’ordre d’exécution des transactions:
process_orders_on_close=trueParamètres qui assurent que le traitement des commandes correspond à l’environnement de transaction réelSystème de détection et d’arrêt adaptatif:
Identifier les tendances à la traîne:
Problème d’adaptabilité des paramètres fixes:
Suivre l’heure d’activation de l’arrêt de perte:
Risques liés à la gestion des fonds:
Les limites de la technologie:
Optimisation des mécanismes de génération de signaux:
Renforcement du système de gestion des risques:
Optimisation de l’entrée:
Cadre de rétroaction et d’évaluation:
La mise à niveau technologique:
La stratégie de suivi de tendance à la croisée des deux lignes est un système de négociation complet qui combine les méthodes classiques d’analyse technique avec les concepts modernes de gestion des risques. Son avantage central réside dans un mécanisme de reconnaissance de tendance simple et clair et un système de contrôle des risques à plusieurs niveaux, en particulier sa gestion minutieuse des fonds et son mécanisme de suivi avancé des pertes. La stratégie offre un bon potentiel de récompense pour l’ajustement des risques.
Cependant, la stratégie est également confrontée à des défis tels que le retard et l’adaptabilité des paramètres inhérents aux moyennes mobiles. Les performances de la stratégie devraient être encore améliorées par l’introduction de paramètres d’adaptation, des mécanismes de filtrage de signal améliorés et un système de gestion des risques amélioré.
Dans l’ensemble, il s’agit d’un cadre de stratégie quantitative bien structuré et logiquement clair, adapté pour servir de base à un système de suivi des tendances à moyen et à long terme, en particulier pour les marchés présentant des caractéristiques de tendance évidentes. Pour les traders, il est plus important de comprendre et de maîtriser leurs idées de gestion des risques que de simplement copier les paramètres de la stratégie.
/*backtest
start: 2025-06-04 00:00:00
end: 2025-06-11 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Dual SMA Crossover Strategy", overlay=true, calc_on_every_tick=false, process_orders_on_close=true)
// --- Inputs ---
// SMA Lengths
fast_length = input.int(24, title="Fast SMA Length", minval=1)
slow_length = input.int(48, title="Slow SMA Length", minval=1)
// Risk Management
risk_per_trade_percent = input.float(2.0, title="Risk Per Trade (%)", minval=0.1, maxval=10.0, step=0.1) // % of equity to risk per trade
stop_loss_percent = input.float(0.8, title="Stop Loss (%)", minval=0.1, step=0.1) // % from entry price
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio", minval=0.5, step=0.1) // 2.0 = 2R, 3.0 = 3R etc.
// Advanced Trailing Stop Loss
trailing_start_percent = input.float(1.0, title="Trailing Stop Start (%)", minval=0.1, step=0.1) // % profit to activate TSL
trailing_stop_percent = input.float(0.5, title="Trailing Stop Trail (%)", minval=0.1, step=0.1) // % to trail by once activated
// --- Calculations ---
// Calculate SMAs
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)
// Plot SMAs on chart
plot(fast_sma, color=color.blue, title="Fast SMA")
plot(slow_sma, color=color.red, title="Slow SMA")
// Crossover conditions (calculated on previous bar to prevent look-ahead bias)
long_condition = ta.crossover(fast_sma[1], slow_sma[1])
short_condition = ta.crossunder(fast_sma[1], slow_sma[1])
// --- Money Management and Position Sizing ---
// Calculate account equity and risk amount
account_equity = strategy.initial_capital + strategy.netprofit
risk_amount = account_equity * (risk_per_trade_percent / 100)
// Calculate Stop Loss price based on entry and SL percentage
var float long_stop_price = na
var float short_stop_price = na
var float long_take_profit_price = na
var float short_take_profit_price = na
// --- Trailing Stop Loss Variables ---
var float trailing_long_activated_price = na // Price at which TSL is activated for long
var float trailing_short_activated_price = na // Price at which TSL is activated for short
var float current_trailing_stop_long = na
var float current_trailing_stop_short = na
var bool is_long_trailing_active = false
var bool is_short_trailing_active = false
// --- Strategy Entry and Exit Orders ---
if long_condition
// Reset TSL variables for a new entry
trailing_long_activated_price := na
current_trailing_stop_long := na
is_long_trailing_active := false
// Calculate SL, TP for long entry
long_stop_price := close * (1 - stop_loss_percent / 100) // SL below entry
long_take_profit_price := close * (1 + (stop_loss_percent * risk_reward_ratio) / 100) // TP above entry based on RRR
// Calculate position size for long entry
price_change_per_unit = close * (stop_loss_percent / 100)
if price_change_per_unit > 0
long_quantity = risk_amount / price_change_per_unit
strategy.entry("Long", strategy.long, qty=long_quantity, comment="Buy Signal")
else
strategy.entry("Long", strategy.long, comment="Buy Signal (Risk calculation skipped)") // Fallback if SL is 0 or negative
if short_condition
// Reset TSL variables for a new entry
trailing_short_activated_price := na
current_trailing_stop_short := na
is_short_trailing_active := false
// Calculate SL, TP for short entry
short_stop_price := close * (1 + stop_loss_percent / 100) // SL above entry
short_take_profit_price := close * (1 - (stop_loss_percent * risk_reward_ratio) / 100) // TP below entry based on RRR
// Calculate position size for short entry
price_change_per_unit = close * (stop_loss_percent / 100)
if price_change_per_unit > 0
short_quantity = risk_amount / price_change_per_unit
strategy.entry("Short", strategy.short, qty=short_quantity, comment="Sell Signal")
else
strategy.entry("Short", strategy.short, comment="Sell Signal (Risk calculation skipped)") // Fallback if SL is 0 or negative
// --- Stop Loss, Take Profit, Trailing Stop Logic ---
// Long position management
if strategy.position_size > 0 // We are in a long position
entry_price = strategy.opentrades.entry_price(0)
current_profit_percent = ((close - entry_price) / entry_price) * 100
// Initial SL and TP set at entry
strategy.exit("Exit Long", from_entry="Long", stop=long_stop_price, limit=long_take_profit_price, comment="TP/SL Long")
// Check for Trailing Stop activation
if not is_long_trailing_active and current_profit_percent >= trailing_start_percent
is_long_trailing_active := true
// Set initial trailing stop when activated
trailing_long_activated_price := high // Or close, depending on preference
current_trailing_stop_long := high * (1 - trailing_stop_percent / 100)
// If trailing stop is active, update it
if is_long_trailing_active
// Only move the trailing stop up (for long positions)
potential_new_stop = high * (1 - trailing_stop_percent / 100)
current_trailing_stop_long := math.max(current_trailing_stop_long, potential_new_stop)
// Ensure trailing stop is not below the initial long_stop_price
// This prevents the trailing stop from being less protective than the initial SL if the price drops after activation.
current_trailing_stop_long := math.max(current_trailing_stop_long, long_stop_price)
strategy.exit("Trailing Exit Long", from_entry="Long", stop=current_trailing_stop_long, comment="Trailing SL Long")
// Short position management
if strategy.position_size < 0 // We are in a short position
entry_price = strategy.opentrades.entry_price(0)
current_profit_percent = ((entry_price - close) / entry_price) * 100
// Initial SL and TP set at entry
strategy.exit("Exit Short", from_entry="Short", stop=short_stop_price, limit=short_take_profit_price, comment="TP/SL Short")
// Check for Trailing Stop activation
if not is_short_trailing_active and current_profit_percent >= trailing_start_percent
is_short_trailing_active := true
// Set initial trailing stop when activated
trailing_short_activated_price := low // Or close, depending on preference
current_trailing_stop_short := low * (1 + trailing_stop_percent / 100)
// If trailing stop is active, update it
if is_short_trailing_active
// Only move the trailing stop down (for short positions)
potential_new_stop = low * (1 + trailing_stop_percent / 100)
current_trailing_stop_short := math.min(current_trailing_stop_short, potential_new_stop)
// Ensure trailing stop is not above the initial short_stop_price
current_trailing_stop_short := math.min(current_trailing_stop_short, short_stop_price)
strategy.exit("Trailing Exit Short", from_entry="Short", stop=current_trailing_stop_short, comment="Trailing SL Short")
// Plot background color to indicate active position (optional)
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na, title="Long Position Background")
bgcolor(strategy.position_size < 0 ? color.new(color.red, 90) : na, title="Short Position Background")