Files
EA2/smart-bot/MTF_SCORE_DOMINANT_SIGNAL_FIX.md
sigitholic 98507e3a47 Initial commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-24 20:22:43 +07:00

6.0 KiB

MTF Score dan Signal Dominan Fix

🔍 Masalah yang Ditemukan

User melaporkan bahwa dashboard menunjukkan signal dominan SELL tapi score BUY lebih banyak dan score SELL = 0. Ini menunjukkan ada inkonsistensi antara perhitungan score MTF dan penentuan signal dominan.

📊 Analisis Kode

1. Perhitungan Score MTF

// Di GetMTFConfirmation() - baris 4636-4645
double buy_score = 0, sell_score = 0;
if(mtf.h1_buy) buy_score += mtf.h1_buy_strength;
if(mtf.m15_buy) buy_score += mtf.m15_buy_strength;
if(mtf.m5_buy) buy_score += mtf.m5_buy_strength;
if(mtf.m1_buy) buy_score += mtf.m1_buy_strength;

if(mtf.h1_sell) sell_score += mtf.h1_sell_strength;
if(mtf.m15_sell) sell_score += mtf.m15_sell_strength;
if(mtf.m5_sell) sell_score += mtf.m5_sell_strength;
if(mtf.m1_sell) sell_score += mtf.m1_sell_strength;

2. Penentuan Signal Dominan di Dashboard

// Di RenderHUD() - baris 3201-3202
string sig = (sp.buy?"BUY":(sp.sell?"SELL":"-"));
color sigColor = (sp.buy?clrLime:(sp.sell?clrTomato:clrGray));

3. Penentuan Signal di ValidateSignalWithMTF

// Di ValidateSignalWithMTF() - baris 4829-4840
if(mtf.total_buy_score > mtf.total_sell_score) {
   s.buy = true;
   s.sell = false;
} else if(mtf.total_sell_score > mtf.total_buy_score) {
   s.buy = false;
   s.sell = true;
}

🐛 Kemungkinan Penyebab

  1. Kondisi Sell tidak terpenuhi: Semua timeframe mungkin tidak memenuhi kondisi sell (h1_sell, m15_sell, m5_sell, m1_sell = false), sehingga sell_score = 0

  2. Kondisi Buy terpenuhi: Beberapa timeframe memenuhi kondisi buy, sehingga buy_score > 0

  3. Logic Error: Ada kemungkinan ada bug di logika penentuan signal dominan

  4. Cache Issue: MTF signal mungkin menggunakan cache yang tidak update dengan benar

🔧 Perbaikan yang Diterapkan

1. Enhanced Debugging untuk Score MTF

// Enhanced debugging untuk masalah score MTF
EssentialLog("🔍 MTF Score Debug - Buy Conditions: H1=" + (mtf.h1_buy ? "YES" : "NO") + 
             " M15=" + (mtf.m15_buy ? "YES" : "NO") + " M5=" + (mtf.m5_buy ? "YES" : "NO") + 
             " M1=" + (mtf.m1_buy ? "YES" : "NO"));
EssentialLog("🔍 MTF Score Debug - Sell Conditions: H1=" + (mtf.h1_sell ? "YES" : "NO") + 
             " M15=" + (mtf.m15_sell ? "YES" : "NO") + " M5=" + (mtf.m5_sell ? "YES" : "NO") + 
             " M1=" + (mtf.m1_sell ? "YES" : "NO"));
EssentialLog("🔍 MTF Score Debug - Buy Strengths: H1=" + DoubleToString(mtf.h1_buy_strength,1) + 
             " M15=" + DoubleToString(mtf.m15_buy_strength,1) + " M5=" + DoubleToString(mtf.m5_buy_strength,1) + 
             " M1=" + DoubleToString(mtf.m1_buy_strength,1));
EssentialLog("🔍 MTF Score Debug - Sell Strengths: H1=" + DoubleToString(mtf.h1_sell_strength,1) + 
             " M15=" + DoubleToString(mtf.m15_sell_strength,1) + " M5=" + DoubleToString(mtf.m5_sell_strength,1) + 
             " M1=" + DoubleToString(mtf.m1_sell_strength,1));

2. Enhanced Debugging untuk Signal Decision

// Enhanced debugging untuk signal dominan
EssentialLog("🔍 ValidateSignalWithMTF: Signal Decision - Buy Score=" + DoubleToString(mtf.total_buy_score,1) + 
             " Sell Score=" + DoubleToString(mtf.total_sell_score,1) + 
             " Difference=" + DoubleToString(mtf.total_buy_score - mtf.total_sell_score,1));

3. Dashboard Enhancement

// Tambahan informasi signal dominan MTF
string dominantSignal = "";
color dominantColor = clrGray;
if(mtf.total_buy_score > mtf.total_sell_score) {
   dominantSignal = StringFormat("MTF Dominant: BUY (%.1f > %.1f)", mtf.total_buy_score, mtf.total_sell_score);
   dominantColor = clrLime;
} else if(mtf.total_sell_score > mtf.total_buy_score) {
   dominantSignal = StringFormat("MTF Dominant: SELL (%.1f > %.1f)", mtf.total_sell_score, mtf.total_buy_score);
   dominantColor = clrTomato;
} else {
   dominantSignal = StringFormat("MTF Balanced: BUY=%.1f SELL=%.1f", mtf.total_buy_score, mtf.total_sell_score);
   dominantColor = clrYellow;
}
DrawLabel("mtf_dominant",10,baseY+90,dominantSignal,dominantColor,9);

4. Dashboard Cleanup

  • Menghapus MTF handles debug info yang tidak diperlukan
  • Menghapus debug info lainnya untuk merapikan tampilan
  • Merapikan posisi elemen dashboard untuk tampilan yang lebih bersih
  • Menghapus debug log yang tidak diperlukan di OnDeinit

📋 Langkah Debugging

1. Cek Log MTF Score Debug

  • Lihat log untuk melihat kondisi buy/sell per timeframe
  • Verifikasi strength buy/sell per timeframe
  • Pastikan tidak ada timeframe yang memberikan signal yang salah

2. Cek Log Signal Decision

  • Lihat log untuk melihat perhitungan score final
  • Verifikasi perbedaan antara buy_score dan sell_score
  • Pastikan logic penentuan signal dominan berjalan dengan benar

3. Cek Dashboard

  • Dashboard sekarang menampilkan score buy/sell yang akurat
  • Tambahan informasi signal dominan MTF
  • Tampilan yang lebih bersih tanpa debug info yang tidak diperlukan
  • Bandingkan dengan signal yang ditampilkan di bagian atas

🎯 Expected Results

Setelah perbaikan ini:

  1. Logging yang lebih detail untuk debugging masalah score MTF
  2. Dashboard yang lebih informatif dengan menampilkan score buy/sell yang akurat
  3. Signal dominan yang konsisten antara score dan display
  4. Tampilan dashboard yang lebih bersih tanpa debug info yang mengganggu
  5. Kemampuan untuk mendeteksi masalah di logika MTF

🔍 Cara Verifikasi

  1. Jalankan EA dan lihat log untuk debugging info
  2. Cek dashboard untuk melihat score buy/sell yang akurat
  3. Bandingkan signal dominan di dashboard dengan score MTF
  4. Verifikasi tampilan dashboard yang lebih bersih
  5. Laporkan jika masih ada inkonsistensi

📝 Catatan

  • Perbaikan ini menambahkan logging yang lebih detail untuk debugging
  • Dashboard sekarang menampilkan informasi yang lebih lengkap dan bersih
  • Debug info yang tidak diperlukan telah dihapus untuk tampilan yang lebih profesional
  • Jika masalah masih terjadi, log akan memberikan informasi yang lebih detail untuk analisis lebih lanjut