146 lines
6.0 KiB
Markdown
146 lines
6.0 KiB
Markdown
# 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
|