Files

146 lines
6.0 KiB
Markdown
Raw Permalink Normal View History

2026-05-24 20:22:43 +07:00
# 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**
```mql5
// 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**
```mql5
// 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**
```mql5
// 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**
```mql5
// 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**
```mql5
// 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**
```mql5
// 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