Strategi perdagangan kolaboratif momentum multi-periode waktu: sistem perdagangan kuantitatif yang mengintegrasikan EMA/MA/RSI

EMA MA RSI ATR MTF
Tanggal Pembuatan: 2025-03-25 14:18:20 Akhirnya memodifikasi: 2025-03-25 14:18:20
menyalin: 2 Jumlah klik: 340
2
fokus pada
319
Pengikut

Strategi perdagangan kolaboratif momentum multi-periode waktu: sistem perdagangan kuantitatif yang mengintegrasikan EMA/MA/RSI Strategi perdagangan kolaboratif momentum multi-periode waktu: sistem perdagangan kuantitatif yang mengintegrasikan EMA/MA/RSI

Ringkasan

Strategi perdagangan sinkronisasi dinamika periode waktu adalah sistem perdagangan kuantitatif yang menggabungkan indikator teknis dan analisis siklus waktu. Inti dari strategi ini adalah untuk memantau pergerakan pasar dalam jangka waktu jangka pendek (sekitar 15 menit) dan jangka panjang (sekitar 4 jam) secara bersamaan, dengan konfirmasi sinkronisasi EMA (indices moving average), MA (moving average) dan RSI (indikator yang relatif kuat) untuk memfilter sinyal palsu, dan hanya melakukan perdagangan jika beberapa periode waktu bersama-sama mengarah ke arah yang sama. Strategi ini menggunakan EMA crossing, harga breakout, dan konfirmasi dinamika RSI, untuk memberikan sinyal masuk yang berkualitas tinggi ke pasar sebagai konfirmasi perdagangan tambahan.

Prinsip Strategi

Prinsip-prinsip inti dari strategi ini didasarkan pada analisis komprehensif dari beberapa indikator teknis dalam beberapa periode waktu, yang dibagi menjadi beberapa bagian utama:

  1. Analisis siklus waktuStrategi: Analisis dua periode waktu 15 menit (masuk) dan 4 jam (konfirmasi tren) untuk memastikan arah perdagangan konsisten dengan tren pasar yang lebih besar.

  2. Syarat Masuk ((15 menit siklus):

    • Multiple entry: EMA13 > EMA62 ((pergerakan jangka pendek bullish)), harga penutupan > MA200 ((harga di atas garis tren utama), RSI cepat ((7) > RSI lambat ((28))) ((pergerakan meningkat), RSI cepat > 50 ((pergerakan bias multihead)), volume transaksi lebih besar dari rata-rata 20 siklus.
    • Blank entry: Berbeda dengan kondisi multi-head, permintaan untuk EMA13 < EMA62, harga penutupan < MA200, RSI cepat ((7) < RSI lambat ((28), RSI cepat < 50, juga membutuhkan peningkatan volume transaksi.
  3. Konfirmasi tren ((4 jam siklus):

    • Konfirmasi multi-kepala: mirip dengan kondisi siklus 15 menit, tetapi sedikit berbeda dalam persyaratan RSI, yang membutuhkan RSI lambat > 40.
    • Konfirmasi kosong: Juga bertentangan dengan kondisi siklus 15 menit, RSI lambat < 60 ◦
  4. Persyaratan masuk yang tepatStrategi ini membutuhkan EMA13 yang baru saja melintasi EMA62 (membuat persilangan) atau harga yang baru saja melintasi MA200, yang memberikan titik masuk yang lebih tepat dan menghindari masuk buta dalam tren yang telah berlangsung lebih lama.

  5. Mekanisme Keluar: Berbagai opsi keluar yang tersedia, termasuk pembalikan indikator teknis (perubahan hubungan EMA atau RSI mencapai overbought / oversold), stop loss ATR dinamis, stop loss persentase tetap, dan stop loss tracking.

Keunggulan Strategis

  1. Sistematisasi analisis siklus multi waktuDengan analisis komprehensif kondisi pasar pada periode waktu yang berbeda, strategi ini dapat menyaring kebisingan pasar jangka pendek, dan hanya masuk ketika tren jelas dan konsisten, yang secara signifikan mengurangi kemungkinan sinyal palsu.

  2. Mekanisme multiple confirmationKonfirmasi sinkronisasi dari beberapa indikator, seperti EMA, MA dan RSI, meningkatkan keandalan sinyal perdagangan. Khususnya, meminta EMA crossover atau harga terobosan sebagai kondisi pemicu, meningkatkan akurasi waktu masuk.

  3. Manajemen risiko yang fleksibelStrategi ini menawarkan berbagai pilihan pengendalian risiko, termasuk stop loss dinamis berbasis ATR, stop loss persentase tetap, dan stop loss pelacakan, yang memungkinkan pedagang untuk menyesuaikan parameter risiko secara fleksibel sesuai dengan preferensi risiko pribadi dan kondisi pasar.

  4. Konfirmasi pengiriman: Termasuk kondisi peningkatan volume transaksi, untuk lebih memfilter kemungkinan terobosan palsu, karena pergerakan harga yang sebenarnya biasanya disertai dengan peningkatan volume transaksi.

  5. Antarmuka visualStrategi menyediakan panel visualisasi yang intuitif yang menampilkan status dan sinyal dari berbagai indikator, sehingga trader dapat melihat dengan jelas kondisi pasar saat ini dan keputusan strategi.

  6. Kustomisasi TinggiHampir semua parameter strategi dapat disesuaikan melalui pengaturan input, termasuk panjang EMA, jenis MA, parameter RSI, dan kelipatan kontrol risiko, yang memungkinkan pedagang untuk mengoptimalkan strategi sesuai dengan kondisi pasar yang berbeda.

Risiko Strategis

  1. Risiko Gempa Pasar: Dalam pasar yang bergoyang, EMA dan MA mungkin sering berselingkuh, menyebabkan peningkatan sinyal yang salah dan perdagangan yang sering, sehingga menghasilkan kerugian berturut-turut. Solusinya adalah dengan menambahkan kondisi penyaringan tambahan, seperti penilaian volatilitas atau konfirmasi kekuatan tren, dan menghentikan perdagangan ketika pasar yang jelas diidentifikasi sebagai bergoyang.

  2. Parameter yang dioptimalkan terlalu cocokParameter indikator yang dioptimalkan secara berlebihan dapat menyebabkan strategi berkinerja baik pada data historis, tetapi gagal di pasar masa depan. Disarankan untuk menggunakan tes prediksi (Walk-Forward Analysis) untuk memverifikasi kehandalan strategi, dan untuk menguji satu set parameter tetap pada beberapa varietas perdagangan.

  3. Resiko Keterbatasan Besar: Setelah berita besar atau kejadian mendadak, pasar dapat mengalami celah besar yang menyebabkan stop loss tidak dapat dilakukan pada tingkat yang telah ditetapkan. Anda dapat mempertimbangkan untuk menggunakan manajemen posisi yang lebih konservatif atau meningkatkan mekanisme penyesuaian posisi berdasarkan volatilitas.

  4. Batas ketergantungan pada indikator kuantitatifStrategi ini sepenuhnya bergantung pada indikator teknis dan mengabaikan faktor-faktor mendasar. Sebelum data ekonomi besar diumumkan atau perubahan kebijakan bank sentral, pertimbangan untuk mengurangi posisi atau menghentikan perdagangan dapat dilakukan untuk menghindari risiko yang ditimbulkan oleh berita mengejutkan.

  5. Lagging sinyalIndikator seperti EMA dan MA pada dasarnya bersifat laggy, yang dapat menyebabkan sinyal muncul ketika tren sudah mendekati akhir. Dapat diperbaiki dengan menyesuaikan siklus EMA atau dikombinasikan dengan indikator forwards lainnya (seperti perubahan bentuk harga atau volatilitas).

Arah optimasi strategi

  1. Bergabung dengan Marketplace Filter: Memperkenalkan indikator atau penilaian struktur pasar yang beradaptasi, mengidentifikasi pasar saat ini adalah pasar yang sedang tren atau pasar yang bergolak sebelum menjalankan strategi, dan menyesuaikan parameter perdagangan atau menghentikan perdagangan sesuai dengan itu. Misalnya, Anda dapat menggunakan ADX (Indeks Orientasi Rata-rata) untuk mengukur kekuatan tren, dan hanya melakukan perdagangan jika tren jelas.

  2. Mekanisme penyesuaian parameter dinamisStrategi saat ini menggunakan parameter indikator teknis yang tetap, parameter yang dapat disesuaikan secara otomatis berdasarkan volatilitas pasar dapat dipertimbangkan. Misalnya, menggunakan EMA periode pendek untuk menangkap fluktuasi dengan cepat di lingkungan fluktuasi rendah, dan menggunakan EMA periode panjang untuk mengurangi kebisingan di lingkungan fluktuasi tinggi.

  3. Mengoptimalkan manajemen posisiStrategi saat ini menggunakan pengelolaan dana persentase tetap, yang dapat ditingkatkan menjadi pengelolaan posisi dinamis berdasarkan volatilitas, ekspektasi kemenangan, atau rumus Kelly untuk memaksimalkan laba setelah disesuaikan dengan risiko.

  4. Menambahkan elemen pembelajaran mesinIntroduksi algoritma pembelajaran mesin, seperti pohon keputusan atau hutan acak, untuk mengoptimalkan alokasi bobot pada setiap indikator, atau memprediksi strategi mana yang mungkin bekerja lebih baik di lingkungan pasar.

  5. Menambahkan filter dasar: Mengatur stop loss secara otomatis atau menghentikan perdagangan sebelum data ekonomi penting diumumkan, untuk menghadapi potensi peristiwa yang sangat volatile.

  6. Optimalkan bobot multi-siklus waktuStrategi saat ini hanya memerlukan dua periode waktu untuk konfirmasi sinkron, dan dapat mempertimbangkan untuk memperkenalkan sistem bobot siklus waktu yang lebih kompleks, memberikan bobot yang berbeda untuk periode waktu yang berbeda, dan membentuk skor komposit untuk menilai waktu masuk.

  7. Menambahkan analisis musimanBeberapa varietas perdagangan mungkin memiliki karakteristik musiman dari waktu ke waktu, dan analisis data historis dapat mengeksplorasi pola-pola ini dan menyesuaikan parameter strategi atau periode perdagangan sesuai dengan itu.

Meringkaskan

Strategi perdagangan sinkronisasi dinamika siklus waktu multi adalah sistem perdagangan kuantitatif yang terstruktur, logis, dan jelas, yang secara efektif menyaring kebisingan pasar melalui analisis siklus waktu dan konfirmasi sinkronisasi multi-indikator, menangkap peluang perdagangan probabilitas tinggi. Strategi ini mengintegrasikan indikator klasik EMA, MA, dan RSI dalam analisis teknis, dan meningkatkan kualitas perdagangan melalui persyaratan masuk yang tepat dan sistem manajemen risiko yang disempurnakan.

Keuntungan terbesar dari strategi ini adalah mekanisme konfirmasi ganda dan analisis sinkronisasi multi-siklus, yang tidak hanya mengurangi sinyal palsu, tetapi juga memastikan bahwa perdagangan konsisten dengan tren utama. Selain itu, pilihan manajemen risiko yang lengkap memungkinkan pedagang untuk memiliki fleksibilitas dalam mengendalikan risiko. Namun, strategi ini juga memiliki risiko kinerja pasar yang buruk, parameter yang terlalu dioptimalkan, dan indikator teknis yang tertinggal.

Optimasi di masa depan akan berfokus pada klasifikasi lingkungan pasar, penyesuaian dinamika parameter, aplikasi pembelajaran mesin, dan integrasi analisis dimensi waktu yang lebih banyak. Dengan optimasi ini, strategi diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar, meningkatkan tingkat kemenangan dan laba setelah penyesuaian risiko.

Strategi ini memberikan kerangka kerja yang kuat bagi para pedagang yang mencari metode perdagangan yang sistematis dan disiplin, yang dapat diterapkan secara langsung atau disesuaikan dan diperluas sebagai dasar sistem perdagangan individu.

Kode Sumber Strategi
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// Advanced Multi-Timeframe EMA/MA/RSI Strategy
// Uses 4h for confluence and 15m for entry
// Version 6

//@version=6
strategy("Forex Fire EMA/MA/RSI Strategy", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, 
         initial_capital=10000, pyramiding=0, calc_on_every_tick=true)

// Input parameters with sections
// Timeframe inputs
tf_entry = input.string("15", title="Entry Timeframe", options=["1", "5", "15", "30", "60", "120"], group="Timeframes")
tf_confluence = input.string("240", title="Confluence Timeframe", options=["60", "240", "D", "W"], group="Timeframes")

// Indicator settings
ema_short_length = input.int(13, title="EMA Short Length", minval=5, maxval=50, group="EMAs")
ema_long_length = input.int(62, title="EMA Long Length", minval=20, maxval=200, group="EMAs")
ma_length = input.int(200, title="Moving Average Length", minval=50, maxval=500, group="Moving Average")
ma_type = input.string("SMA", title="MA Type", options=["SMA", "EMA", "WMA", "VWMA"], group="Moving Average")

// RSI settings
rsi_slow_length = input.int(28, title="RSI Slow Length", minval=14, maxval=50, group="RSI")
rsi_fast_length = input.int(7, title="RSI Fast Length", minval=3, maxval=14, group="RSI")
rsi_overbought = input.int(70, title="RSI Overbought Level", minval=60, maxval=90, group="RSI")
rsi_oversold = input.int(30, title="RSI Oversold Level", minval=10, maxval=40, group="RSI")

// Strategy parameters
use_atr_exits = input.bool(true, title="Use ATR for Exit Targets", group="Strategy Settings")
atr_multiplier = input.float(2.0, title="ATR Multiplier for Exits", minval=1.0, maxval=5.0, step=0.1, group="Strategy Settings")
atr_length = input.int(14, title="ATR Length", minval=5, maxval=30, group="Strategy Settings")
use_stop_loss = input.bool(true, title="Use Stop Loss", group="Risk Management")
stop_loss_percent = input.float(2.0, title="Stop Loss (%)", minval=0.5, maxval=10.0, step=0.5, group="Risk Management")
use_take_profit = input.bool(true, title="Use Take Profit", group="Risk Management")
take_profit_percent = input.float(4.0, title="Take Profit (%)", minval=1.0, maxval=20.0, step=1.0, group="Risk Management")
use_trailing_stop = input.bool(true, title="Use Trailing Stop", group="Risk Management")
trailing_percent = input.float(1.5, title="Trailing Stop (%)", minval=0.5, maxval=5.0, step=0.1, group="Risk Management")

// Visual settings
show_plot = input.bool(true, title="Show Indicator Plots", group="Visuals")
show_signals = input.bool(true, title="Show Entry/Exit Signals", group="Visuals")
show_table = input.bool(true, title="Show Info Table", group="Visuals")

// Helper function for MA type
f_ma(src, length, type) =>
    switch type
        "SMA" => ta.sma(src, length)
        "EMA" => ta.ema(src, length)
        "WMA" => ta.wma(src, length)
        "VWMA" => ta.vwma(src, length)
        => ta.sma(src, length)

// ATR for dynamic exits
atr_value = ta.atr(atr_length)

// Indicators for Entry timeframe
ema_short_entry = ta.ema(close, ema_short_length)
ema_long_entry = ta.ema(close, ema_long_length)
ma_entry = f_ma(close, ma_length, ma_type)
rsi_slow_entry = ta.rsi(close, rsi_slow_length)
rsi_fast_entry = ta.rsi(close, rsi_fast_length)

// Indicators for Confluence timeframe
ema_short_conf = request.security(syminfo.tickerid, tf_confluence, ta.ema(close, ema_short_length), barmerge.gaps_off, barmerge.lookahead_off)
ema_long_conf = request.security(syminfo.tickerid, tf_confluence, ta.ema(close, ema_long_length), barmerge.gaps_off, barmerge.lookahead_off)
ma_conf = request.security(syminfo.tickerid, tf_confluence, f_ma(close, ma_length, ma_type), barmerge.gaps_off, barmerge.lookahead_off)
rsi_slow_conf = request.security(syminfo.tickerid, tf_confluence, ta.rsi(close, rsi_slow_length), barmerge.gaps_off, barmerge.lookahead_off)
rsi_fast_conf = request.security(syminfo.tickerid, tf_confluence, ta.rsi(close, rsi_fast_length), barmerge.gaps_off, barmerge.lookahead_off)

// Volume confirmation
volume_increasing = volume > ta.sma(volume, 20)

// Plotting indicators - completely outside of conditional blocks
// We'll use the show_plot variable directly in the color transparency
ema_short_plot_color = show_plot ? color.new(color.green, 0) : color.new(color.green, 100)
ema_long_plot_color = show_plot ? color.new(color.red, 0) : color.new(color.red, 100)
ma_plot_color = show_plot ? color.new(color.blue, 0) : color.new(color.blue, 100)

plot(ema_short_entry, title="EMA Short (Entry)", color=ema_short_plot_color, linewidth=2)
plot(ema_long_entry, title="EMA Long (Entry)", color=ema_long_plot_color, linewidth=2)
plot(ma_entry, title="MA (Entry)", color=ma_plot_color, linewidth=2)

// Define entry conditions for Entry timeframe
long_entry_condition = ema_short_entry > ema_long_entry and close > ma_entry and rsi_fast_entry > rsi_slow_entry and rsi_fast_entry > 50 and volume_increasing
short_entry_condition = ema_short_entry < ema_long_entry and close < ma_entry and rsi_fast_entry < rsi_slow_entry and rsi_fast_entry < 50 and volume_increasing

// Define confluence conditions from Confluence timeframe
long_confluence = ema_short_conf > ema_long_conf and close > ma_conf and rsi_slow_conf > 40 and rsi_fast_conf > rsi_slow_conf
short_confluence = ema_short_conf < ema_long_conf and close < ma_conf and rsi_slow_conf < 60 and rsi_fast_conf < rsi_slow_conf

// Advanced entry conditions
ema_crossover = ta.crossover(ema_short_entry, ema_long_entry)
ema_crossunder = ta.crossunder(ema_short_entry, ema_long_entry)
price_crossover_ma = ta.crossover(close, ma_entry)
price_crossunder_ma = ta.crossunder(close, ma_entry)

// Enhanced strategy conditions combining both timeframes with crossovers
long_condition = (long_entry_condition and long_confluence) and (ema_crossover or price_crossover_ma)
short_condition = (short_entry_condition and short_confluence) and (ema_crossunder or price_crossunder_ma)

// Exit conditions
long_exit_technical = ema_short_entry < ema_long_entry or rsi_fast_entry > rsi_overbought
short_exit_technical = ema_short_entry > ema_long_entry or rsi_fast_entry < rsi_oversold

// Strategy execution
var float entry_price = 0.0
var float stop_loss_level = 0.0
var float take_profit_level = 0.0
var float trailing_stop_level = 0.0

if (long_condition)
    entry_price := close
    stop_loss_level := use_stop_loss ? close * (1 - stop_loss_percent / 100) : 0.0
    take_profit_level := use_take_profit ? close * (1 + take_profit_percent / 100) : 0.0
    trailing_stop_level := use_trailing_stop ? close * (1 - trailing_percent / 100) : 0.0
    strategy.entry("Long", strategy.long)

if (short_condition)
    entry_price := close
    stop_loss_level := use_stop_loss ? close * (1 + stop_loss_percent / 100) : 0.0
    take_profit_level := use_take_profit ? close * (1 - take_profit_percent / 100) : 0.0
    trailing_stop_level := use_trailing_stop ? close * (1 + trailing_percent / 100) : 0.0
    strategy.entry("Short", strategy.short)

// Handle stops and exits
if strategy.position_size > 0
    // Update trailing stop for longs
    if use_trailing_stop and close > entry_price
        trail_level = close * (1 - trailing_percent / 100)
        trailing_stop_level := math.max(trailing_stop_level, trail_level)
    
    // Exit conditions for longs
    if (use_stop_loss and low < stop_loss_level and stop_loss_level > 0) or 
       (use_take_profit and high > take_profit_level and take_profit_level > 0) or 
       (use_trailing_stop and low < trailing_stop_level and trailing_stop_level > 0) or
       (long_exit_technical)
        strategy.close("Long")

if strategy.position_size < 0
    // Update trailing stop for shorts
    if use_trailing_stop and close < entry_price
        trail_level = close * (1 + trailing_percent / 100)
        trailing_stop_level := math.min(trailing_stop_level, trail_level)
    
    // Exit conditions for shorts
    if (use_stop_loss and high > stop_loss_level and stop_loss_level > 0) or 
       (use_take_profit and low < take_profit_level and take_profit_level > 0) or 
       (use_trailing_stop and high > trailing_stop_level and trailing_stop_level > 0) or
       (short_exit_technical)
        strategy.close("Short")

// ATR-based exits
if use_atr_exits and strategy.position_size != 0
    atr_stop_long = strategy.position_size > 0 ? close - (atr_value * atr_multiplier) : 0.0
    atr_stop_short = strategy.position_size < 0 ? close + (atr_value * atr_multiplier) : 0.0
    
    if strategy.position_size > 0 and low <= atr_stop_long
        strategy.close("Long", comment="ATR Exit")
    
    if strategy.position_size < 0 and high >= atr_stop_short
        strategy.close("Short", comment="ATR Exit")

// Visual signals on chart - completely outside conditional blocks
// Define plot conditions with show_signals incorporated
longEntryPlot = long_condition and show_signals
shortEntryPlot = short_condition and show_signals
longExitPlot = strategy.position_size > 0 and (long_exit_technical or 
             (use_stop_loss and low < stop_loss_level and stop_loss_level > 0) or 
             (use_take_profit and high > take_profit_level and take_profit_level > 0) or 
             (use_trailing_stop and low < trailing_stop_level and trailing_stop_level > 0)) and show_signals
shortExitPlot = strategy.position_size < 0 and (short_exit_technical or 
             (use_stop_loss and high > stop_loss_level and stop_loss_level > 0) or 
             (use_take_profit and low < take_profit_level and take_profit_level > 0) or 
             (use_trailing_stop and high > trailing_stop_level and trailing_stop_level > 0)) and show_signals

// Move plotshape outside of any conditional block
plotshape(series=longEntryPlot, title="Long Entry", style=shape.triangleup, location=location.belowbar, 
         color=color.new(color.green, 0), size=size.small)
plotshape(series=shortEntryPlot, title="Short Entry", style=shape.triangledown, location=location.abovebar, 
         color=color.new(color.red, 0), size=size.small)
plotshape(series=longExitPlot, title="Long Exit", style=shape.circle, location=location.abovebar, 
         color=color.new(color.orange, 0), size=size.small)
plotshape(series=shortExitPlot, title="Short Exit", style=shape.circle, location=location.belowbar, 
         color=color.new(color.orange, 0), size=size.small)

// Info table
if show_table
    var table info = table.new(position.top_right, 3, 7, color.new(color.black, 0), color.new(color.white, 0), 2, color.new(color.gray, 0), 2)
    
    table.cell(info, 0, 0, "INDICATOR", bgcolor=color.new(color.blue, 10), text_color=color.white)
    table.cell(info, 1, 0, "ENTRY (" + tf_entry + ")", bgcolor=color.new(color.blue, 10), text_color=color.white)
    table.cell(info, 2, 0, "CONF (" + tf_confluence + ")", bgcolor=color.new(color.blue, 10), text_color=color.white)
    
    table.cell(info, 0, 1, "EMA Relation", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 1, ema_short_entry > ema_long_entry ? "Bullish" : "Bearish", 
         bgcolor=ema_short_entry > ema_long_entry ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 1, ema_short_conf > ema_long_conf ? "Bullish" : "Bearish", 
         bgcolor=ema_short_conf > ema_long_conf ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    
    table.cell(info, 0, 2, "Price vs MA", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 2, close > ma_entry ? "Above" : "Below", 
         bgcolor=close > ma_entry ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 2, close > ma_conf ? "Above" : "Below", 
         bgcolor=close > ma_conf ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    
    table.cell(info, 0, 3, "RSI Fast vs Slow", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 3, rsi_fast_entry > rsi_slow_entry ? "Bullish" : "Bearish", 
         bgcolor=rsi_fast_entry > rsi_slow_entry ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 3, rsi_fast_conf > rsi_slow_conf ? "Bullish" : "Bearish", 
         bgcolor=rsi_fast_conf > rsi_slow_conf ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
         
    table.cell(info, 0, 4, "Volume", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 4, volume_increasing ? "Increasing" : "Decreasing", 
         bgcolor=volume_increasing ? color.new(color.green, 20) : color.new(color.red, 20), 
         text_color=color.white)
    table.cell(info, 2, 4, "n/a", bgcolor=color.new(color.gray, 40), text_color=color.white)
    
    table.cell(info, 0, 5, "Entry Signal", bgcolor=color.new(color.gray, 10), text_color=color.white)
    table.cell(info, 1, 5, long_entry_condition ? "Long" : (short_entry_condition ? "Short" : "None"), 
         bgcolor=long_entry_condition ? color.new(color.green, 20) : (short_entry_condition ? color.new(color.red, 20) : color.new(color.gray, 40)), 
         text_color=color.white)
    table.cell(info, 2, 5, long_confluence ? "Long" : (short_confluence ? "Short" : "None"), 
         bgcolor=long_confluence ? color.new(color.green, 20) : (short_confluence ? color.new(color.red, 20) : color.new(color.gray, 40)), 
         text_color=color.white)
    
    table.cell(info, 0, 6, "Final Signal", bgcolor=color.new(color.blue, 10), text_color=color.white)
    table.cell(info, 1, 6, long_condition ? "LONG" : (short_condition ? "SHORT" : "NONE"), 
         bgcolor=long_condition ? color.new(color.green, 0) : (short_condition ? color.new(color.red, 0) : color.new(color.gray, 20)), 
         text_color=color.white)
    table.cell(info, 2, 6, strategy.position_size > 0 ? "In LONG" : (strategy.position_size < 0 ? "In SHORT" : "No Position"), 
         bgcolor=strategy.position_size > 0 ? color.new(color.green, 20) : (strategy.position_size < 0 ? color.new(color.red, 20) : color.new(color.gray, 40)), 
         text_color=color.white)