
La stratégie est un système de négociation combinant plusieurs indicateurs techniques, principalement basé sur la confirmation du triple signal de croisement de la moyenne EMA, de survente du RSI et de la fourchette d’or MACD pour ouvrir des positions et gérer le risque grâce à un système d’entrée unique et de sortie multiple à prix limite dynamique. La stratégie utilise l’indicateur de 9 cycles et 21 cycles (EMA) comme indicateur de tendance principal, combiné à un indice relativement faible (RSI) et à une moyenne mobile de tendance en arrière de l’indicateur (MACD) pour filtrer les signaux de négociation et contrôler le risque en définissant la distance de la limite unique et le nombre de points de stop-loss fixes.
La logique de négociation centrale de la stratégie comprend les éléments clés suivants:
La stratégie de l’entrée unique à prix limité permet de placer des positions à des prix plus avantageux et d’améliorer la précision des transactions en combinant plusieurs indicateurs techniques.
Il s’agit d’une stratégie de négociation multi-indicateurs structurée et logiquement claire, permettant d’identifier les tendances grâce à un système homogène, de filtrer les signaux RSI et MACD, de limiter les ordres et de contrôler les risques. L’avantage de la stratégie réside dans la fiabilité du signal et le contrôle des risques, mais il existe également des problèmes de retard de signal et d’optimisation des paramètres.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA 9 & 21 with RSI and MACD Buy Strategy", overlay=true)
// Inputs for Simple Moving Averages
sma_short = ta.ema(close, 9)
sma_long = ta.ema(close, 21)
// Plotting SMA
plot(sma_short, color=color.green, title="SMA 9")
plot(sma_long, color=color.red, title="SMA 21")
// RSI Calculation
rsi_length = input.int(14, title="RSI Length")
rsi_threshold = input.int(70, title="RSI Threshold")
rsi = ta.rsi(close, rsi_length)
// MACD Calculation
macd_fast = input.int(8, title="MACD Fast Length")
macd_slow = input.int(18, title="MACD Slow Length")
macd_signal = input.int(6, title="MACD Signal Length")
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
// Inputs for Limit Order Offset
limit_offset = input.int(50, title="Limit Order Offset", minval=1) // 50 points below 9 EMA
// User input for specific date
simulationStartDate = input(timestamp("2024-12-01 00:00"), title="Simulation Start Date", group = "Simulation Dates")
simulationEndDate = input(timestamp("2024-12-30 00:00"), title="Simulation End Date", group = "Simulation Dates")
// Declare limit_price as float
var float limit_price = na
// Calculate Limit Order Price
if (sma_short[1] < sma_long[1] and sma_short > sma_long) // 9 EMA crosses above 21 EMA
limit_price := sma_short - limit_offset
// Buy Signal Condition (only on the specified date)
buy_condition = not na(limit_price) and rsi < rsi_threshold and ta.crossover(macd_line, signal_line)
// Sell Signal Condition (MACD crossover down)
sell_condition = ta.crossunder(macd_line, signal_line)
// Track Entry Price for Point-Based Exit
var float entry_price = na
if (buy_condition )
strategy.order("Buy", strategy.long, comment="Limit Order at 9 EMA - Offset", limit=limit_price)
label.new(bar_index, limit_price, "Limit Buy", style=label.style_label_up, color=color.green, textcolor=color.white)
entry_price := limit_price // Set entry price
// Exit Conditions
exit_by_macd = sell_condition
exit_by_points = not na(entry_price) and ((close >= entry_price + 12) or (close <= entry_price - 12)) // Adjust as per exit points
// Exit all positions at the end of the day
if hour == 15 and minute > 10 and strategy.position_size > 0
strategy.close_all() // Close all positions at the end of the day
strategy.cancel_all()
// Exit based on sell signal or point movement
if (exit_by_macd or exit_by_points and strategy.position_size > 0 )
strategy.close("Buy")
label.new(bar_index, close, "Close", style=label.style_label_down, color=color.red, textcolor=color.white)