Files
EA2/smart-bot/MTF_SCORE_BALANCE_FIX.md
T
2026-05-24 20:22:43 +07:00

5.6 KiB

MTF Score Balance Fix - Menyeimbangkan Buy dan Sell Signals

Masalah yang Ditemukan

User melaporkan bahwa sell_score selalu lebih tinggi dari buy_score dan sering sama dengan mtf.total_score, yang menyebabkan dominasi sinyal sell dan kurangnya sinyal buy.

Root Cause Analysis

Setelah investigasi mendalam, ditemukan masalah utama:

1. Overlap Kondisi RSI yang Berlebihan

Kondisi buy dan sell untuk RSI memiliki overlap yang sangat besar:

Sebelum perbaikan:

  • H1: Buy < 60, Sell > 40 → Overlap: 40-60 (20 poin overlap!)
  • M15: Buy < 55, Sell > 45 → Overlap: 45-55 (10 poin overlap!)
  • M5: Buy < 50, Sell > 50 → Overlap: 50 (1 poin overlap)
  • M1: Buy < 45, Sell > 55 → Overlap: 45-55 (10 poin overlap!)

Setelah perbaikan:

  • H1: Buy < 45, Sell > 55 → Overlap: TIDAK ADA
  • M15: Buy < 45, Sell > 55 → Overlap: TIDAK ADA
  • M5: Buy < 45, Sell > 55 → Overlap: TIDAK ADA
  • M1: Buy < 45, Sell > 55 → Overlap: TIDAK ADA

2. Overlap Kondisi Stochastic yang Berlebihan

Kondisi buy dan sell untuk Stochastic juga memiliki overlap:

Sebelum perbaikan:

  • H1: Buy < 50, Sell > 50 → Overlap: 50 (1 poin overlap)
  • M15: Buy < 45, Sell > 55 → Overlap: 45-55 (10 poin overlap!)
  • M5: Buy < 40, Sell > 60 → Overlap: 40-60 (20 poin overlap!)
  • M1: Buy < 35, Sell > 65 → Overlap: 35-65 (30 poin overlap!)

Setelah perbaikan:

  • H1: Buy < 30, Sell > 70 → Overlap: TIDAK ADA
  • M15: Buy < 30, Sell > 70 → Overlap: TIDAK ADA
  • M5: Buy < 30, Sell > 70 → Overlap: TIDAK ADA
  • M1: Buy < 30, Sell > 70 → Overlap: TIDAK ADA

3. Masalah ADX yang Sama untuk Buy dan Sell

Masalah utama yang ditemukan: ADX digunakan untuk kedua kondisi buy dan sell, menyebabkan bias.

Sebelum perbaikan:

bool h1_adx_ok = (h1_adx >= 5); // Sama untuk buy dan sell
// Buy conditions: EMA + RSI + ADX + Stoch
// Sell conditions: !EMA + RSI + ADX + Stoch

Masalah: Jika ADX tinggi (trend kuat), kedua sinyal buy dan sell mendapat poin tambahan, tapi sell sudah lebih dominan karena trend down.

Setelah perbaikan:

bool h1_adx_buy = (h1_adx >= 5 && h1_ema_up);   // ADX tinggi DAN EMA UP untuk buy
bool h1_adx_sell = (h1_adx >= 5 && !h1_ema_up); // ADX tinggi DAN EMA DOWN untuk sell

Keuntungan: ADX sekarang spesifik untuk arah trend, tidak lagi bias ke satu sisi.

Dampak Masalah

  1. Kedua kondisi buy dan sell bisa terpenuhi bersamaan dalam range overlap
  2. buy_score dan sell_score keduanya bertambah ketika ada overlap
  3. Kondisi sell lebih mudah terpenuhi karena range yang lebih luas
  4. ADX memberikan poin tambahan untuk kedua sisi, memperkuat bias sell
  5. sell_score cenderung lebih tinggi dari buy_score
  6. mtf.total_score selalu mengambil nilai tertinggi, jadi sering sama dengan sell_score

Perbaikan yang Dilakukan

1. Menyeimbangkan Kondisi RSI

// SEBELUM (dengan overlap besar)
bool h1_rsi_buy = (h1_rsi < 60);   // Range: 0-60
bool h1_rsi_sell = (h1_rsi > 40);  // Range: 40-100

// SESUDAH (tanpa overlap)
bool h1_rsi_buy = (h1_rsi < 45);   // Range: 0-45
bool h1_rsi_sell = (h1_rsi > 55);  // Range: 55-100

2. Menyeimbangkan Kondisi Stochastic

// SEBELUM (dengan overlap)
bool h1_stoch_buy = (h1_stoch_k < 50);   // Range: 0-50
bool h1_stoch_sell = (h1_stoch_k > 50);  // Range: 50-100

// SESUDAH (tanpa overlap)
bool h1_stoch_buy = (h1_stoch_k < 30);   // Range: 0-30
bool h1_stoch_sell = (h1_stoch_k > 70);  // Range: 70-100

3. Memperbaiki Kondisi ADX

// SEBELUM (bias ke sell)
bool h1_adx_ok = (h1_adx >= 5); // Sama untuk buy dan sell
// Buy: EMA + RSI + ADX + Stoch
// Sell: !EMA + RSI + ADX + Stoch

// SESUDAH (spesifik arah)
bool h1_adx_buy = (h1_adx >= 5 && h1_ema_up);   // ADX tinggi DAN EMA UP
bool h1_adx_sell = (h1_adx >= 5 && !h1_ema_up); // ADX tinggi DAN EMA DOWN

4. Menambahkan Debug Logging

// Debug: Log individual strengths
EssentialLog("🔍 MTF Strengths - H1: Buy=" + DoubleToString(mtf.h1_buy_strength, 1) + " Sell=" + DoubleToString(mtf.h1_sell_strength, 1) + 
             " | M15: Buy=" + DoubleToString(mtf.m15_buy_strength, 1) + " Sell=" + DoubleToString(mtf.m15_sell_strength, 1) + 
             " | M5: Buy=" + DoubleToString(mtf.m5_buy_strength, 1) + " Sell=" + DoubleToString(mtf.m5_sell_strength, 1) + 
             " | M1: Buy=" + DoubleToString(mtf.m1_buy_strength, 1) + " Sell=" + DoubleToString(mtf.m1_sell_strength, 1));

EssentialLog("🔍 MTF Total Scores - Buy=" + DoubleToString(buy_score, 1) + " Sell=" + DoubleToString(sell_score, 1));

Hasil yang Diharapkan

  1. Tidak ada lagi overlap antara kondisi buy dan sell
  2. ADX sekarang spesifik untuk arah trend, tidak lagi bias ke satu sisi
  3. buy_score dan sell_score akan lebih seimbang
  4. Sinyal buy dan sell akan muncul secara proporsional
  5. mtf.total_score akan lebih akurat merepresentasikan kekuatan sinyal dominan
  6. Debug logging akan membantu memantau perhitungan score

Testing

Setelah perbaikan ini, user dapat:

  1. Monitor log untuk melihat perhitungan individual strengths
  2. Verifikasi bahwa buy_score dan sell_score tidak selalu sama
  3. Pastikan sinyal buy dan sell muncul secara seimbang
  4. Cek dashboard untuk melihat distribusi sinyal yang lebih baik

Catatan Penting

  • Kondisi yang lebih ketat (tanpa overlap) mungkin akan mengurangi frekuensi sinyal
  • Jika terlalu sedikit sinyal, user dapat menurunkan MTF_MinScore dari 20 ke nilai yang lebih rendah
  • Kondisi ini masih lebih agresif dari kondisi standar RSI (30/70) dan Stochastic (20/80)