Ini adalah strategi perdagangan yang komprehensif yang menggabungkan pendekatan mengikuti tren dan volatilitas dengan menggunakan beberapa indikator teknis. Strategi ini mengintegrasikan sistem EMA, ADX untuk kekuatan tren, ATR untuk pengukuran volatilitas, OBV untuk analisis volume, dan indikator tambahan seperti Ichimoku Cloud dan osilator Stochastic untuk menangkap tren pasar dan peluang breakout. Filter waktu diterapkan untuk mengoptimalkan efisiensi perdagangan dengan hanya beroperasi selama jam perdagangan tertentu.
Logika inti didasarkan pada analisis teknis multi-lapisan:
Sinyal beli dihasilkan ketika:
Saran pengendalian risiko:
Strategi ini membangun sistem perdagangan yang lengkap melalui penerapan komprehensif dari beberapa indikator teknis. Kekuatannya terletak pada validasi silang indikator multi-lapisan dan kontrol risiko yang ketat, sementara menghadapi tantangan dalam optimasi parameter dan lag sinyal. Melalui optimasi dan perbaikan terus-menerus, strategi ini menunjukkan potensi untuk kinerja yang stabil di berbagai kondisi pasar.
/*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)