
Il s’agit d’une stratégie de suivi de la tendance combinant plusieurs indicateurs techniques et une stratégie de rupture de la volatilité. La stratégie capture les tendances et les opportunités de rupture du marché en intégrant le système de courbe égale (EMA), l’indicateur de force de la tendance (ADX), l’indicateur de volatilité du marché (ATR), l’analyse quantitative des prix (OBV) et certains indicateurs auxiliaires tels que le graphique de nuage d’Ichimoku et l’indicateur aléatoire (Stochastic). La stratégie met en place des filtres strictement chronologiques qui ne fonctionnent que pendant des périodes de négociation spécifiques pour améliorer l’efficacité des transactions.
La logique de base de la stratégie est basée sur une analyse globale de plusieurs niveaux d’indicateurs techniques:
La stratégie émet un signal d’achat si les conditions suivantes sont remplies:
Suggestions de contrôle des risques :
La stratégie utilise l’intégration de plusieurs indicateurs techniques pour construire un système de négociation complet. L’avantage de la stratégie réside dans la vérification croisée de plusieurs indicateurs et le contrôle rigoureux des risques, mais elle est également confrontée à des défis tels que l’optimisation des paramètres et le retard de signal.
/*backtest
start: 2024-11-11 00:00:00
end: 2024-12-10 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Khaleq Strategy Pro - Fixed Version", overlay=true)
// === Input Settings ===
ema_short = input.int(50, "EMA Short", minval=1)
ema_long = input.int(200, "EMA Long", minval=1)
adx_threshold = input.int(25, "ADX Threshold", minval=1)
atr_multiplier = input.float(2.0, "ATR Multiplier", minval=0.1)
time_filter_start = input(timestamp("0000-01-01 09:00:00"), "Trading Start Time", group="Time Filter")
time_filter_end = input(timestamp("0000-01-01 17:00:00"), "Trading End Time", group="Time Filter")
// === Ichimoku Settings ===
tenkan_len = 9
kijun_len = 26
senkou_span_b_len = 52
displacement = 26
// === Calculations ===
// Ichimoku Components
tenkan_sen = (ta.highest(high, tenkan_len) + ta.lowest(low, tenkan_len)) / 2
kijun_sen = (ta.highest(high, kijun_len) + ta.lowest(low, kijun_len)) / 2
senkou_span_a = (tenkan_sen + kijun_sen) / 2
senkou_span_b = (ta.highest(high, senkou_span_b_len) + ta.lowest(low, senkou_span_b_len)) / 2
// EMA Calculations
ema_short_val = ta.ema(close, ema_short)
ema_long_val = ta.ema(close, ema_long)
// Manual ADX Calculation
length = 14
dm_plus = math.max(ta.change(high), 0)
dm_minus = math.max(-ta.change(low), 0)
tr = math.max(high - low, math.max(math.abs(high - close[1]), math.abs(low - close[1])))
tr14 = ta.sma(tr, length)
dm_plus14 = ta.sma(dm_plus, length)
dm_minus14 = ta.sma(dm_minus, length)
di_plus = (dm_plus14 / tr14) * 100
di_minus = (dm_minus14 / tr14) * 100
dx = math.abs(di_plus - di_minus) / (di_plus + di_minus) * 100
adx_val = ta.sma(dx, length)
// ATR Calculation
atr_val = ta.atr(14)
// Stochastic RSI Calculation
k = ta.stoch(close, high, low, 14)
d = ta.sma(k, 3)
// Time Filter
is_within_time = true
// Support and Resistance (High and Low Levels)
resistance_level = ta.highest(high, 20)
support_level = ta.lowest(low, 20)
// Volume Analysis (On-Balance Volume)
vol_change = ta.change(close)
obv = ta.cum(vol_change > 0 ? volume : vol_change < 0 ? -volume : 0)
// === Signal Conditions ===
buy_signal = is_within_time and
(close > ema_short_val) and
(ema_short_val > ema_long_val) and
(adx_val > adx_threshold) and
(close > senkou_span_a) and
(k < 20) // Stochastic oversold
sell_signal = is_within_time and
(close < ema_short_val) and
(ema_short_val < ema_long_val) and
(adx_val > adx_threshold) and
(close < senkou_span_b) and
(k > 80) // Stochastic overbought
// === Plotting ===
// Plot Buy and Sell Signals
plotshape(buy_signal, color=color.green, style=shape.labelup, title="Buy Signal", location=location.belowbar, text="BUY")
plotshape(sell_signal, color=color.red, style=shape.labeldown, title="Sell Signal", location=location.abovebar, text="SELL")
// Plot EMAs
plot(ema_short_val, color=color.blue, title="EMA Short")
plot(ema_long_val, color=color.orange, title="EMA Long")
// Plot Ichimoku Components
plot(senkou_span_a, color=color.green, title="Senkou Span A", offset=displacement)
plot(senkou_span_b, color=color.red, title="Senkou Span B", offset=displacement)
// // Plot Support and Resistance using lines
// var line resistance_line = na
// var line support_line = na
// if bar_index > 1
// line.delete(resistance_line)
// line.delete(support_line)
// resistance_line := line.new(x1=bar_index - 1, y1=resistance_level, x2=bar_index, y2=resistance_level, color=color.red, width=1, style=line.style_dotted)
// support_line := line.new(x1=bar_index - 1, y1=support_level, x2=bar_index, y2=support_level, color=color.green, width=1, style=line.style_dotted)
// Plot OBV
plot(obv, color=color.purple, title="OBV")
// Plot Background for Trend (Bullish/Bearish)
bgcolor(close > ema_long_val ? color.new(color.green, 90) : color.new(color.red, 90), title="Trend Background")
// === Alerts ===
alertcondition(buy_signal, title="Buy Alert", message="Buy Signal Triggered")
alertcondition(sell_signal, title="Sell Alert", message="Sell Signal Triggered")
// === Strategy Execution ===
if buy_signal
strategy.entry("Buy", strategy.long)
if sell_signal
strategy.close("Buy")
strategy.exit("Sell", "Buy", stop=close - atr_multiplier * atr_val, limit=close + atr_multiplier * atr_val)