98507e3a47
Co-authored-by: Cursor <cursoragent@cursor.com>
6.0 KiB
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
-
Kondisi Sell tidak terpenuhi: Semua timeframe mungkin tidak memenuhi kondisi sell (h1_sell, m15_sell, m5_sell, m1_sell = false), sehingga sell_score = 0
-
Kondisi Buy terpenuhi: Beberapa timeframe memenuhi kondisi buy, sehingga buy_score > 0
-
Logic Error: Ada kemungkinan ada bug di logika penentuan signal dominan
-
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:
- Logging yang lebih detail untuk debugging masalah score MTF
- Dashboard yang lebih informatif dengan menampilkan score buy/sell yang akurat
- Signal dominan yang konsisten antara score dan display
- Tampilan dashboard yang lebih bersih tanpa debug info yang mengganggu
- Kemampuan untuk mendeteksi masalah di logika MTF
🔍 Cara Verifikasi
- Jalankan EA dan lihat log untuk debugging info
- Cek dashboard untuk melihat score buy/sell yang akurat
- Bandingkan signal dominan di dashboard dengan score MTF
- Verifikasi tampilan dashboard yang lebih bersih
- 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