========================================================
 MasAji EA Gold - CHANGELOG
 (MASAJI EKONOMI NEWS EA + MASAJI EA SPEEDER)
========================================================

Versi paket ini: v1.0 (build terkini, mencakup seluruh audit,
penyempurnaan, dan fitur tambahan)

--------------------------------------------------------
[1] AUDIT KEAMANAN & BUG - LICENSE MANAGER
--------------------------------------------------------
- FIX: POST body verifikasi lisensi sebelumnya tidak
  di-URL-encode. Nama broker/server yang mengandung
  spasi, "&", "+", atau "()" bisa merusak parsing form
  di server, membuat aktivasi/validasi lisensi gagal
  secara acak. Ditambahkan fungsi LIC_UrlEncode() dan
  diterapkan ke semua field (license_key, hardware_id,
  broker, server, ea_name).
- FIX: Fungsi LIC_UrlEncode() awalnya memakai
  ShortToString() untuk merekonstruksi karakter - fungsi
  ini tidak terjamin ada/benar di MQL5. Diganti dengan
  StringSubstr() yang dijamin tersedia dan lebih akurat.
- FIX: Kode HTTP non-standar (di luar rentang 100-599,
  mis. hasil intersepsi firewall/proxy jaringan) dulu
  diperlakukan sama seperti kode HTTP normal dan salah
  memberi pesan "Server merespons HTTP X" yang menyiratkan
  masalah di server padahal sebenarnya masalah jaringan
  lokal. Sekarang dideteksi eksplisit, pesan error jadi
  jelas menyebut kemungkinan firewall/proxy, dan pop-up
  diarahkan ke "Setup Required" (bukan "License
  Required") sesuai akar masalah sebenarnya.

--------------------------------------------------------
[2] AUDIT KEAMANAN & BUG - VALIDASI PARAMETER
--------------------------------------------------------
- FIX: Ditambahkan validasi wajib di OnInit() - EA
  MENOLAK JALAN kalau InpMagicNumber, InpMarty_MagicBuy,
  dan InpMarty_MagicSell tidak semuanya unik.
- FIX: Parameter grup Speeder (BaseLot, MaxLayers,
  StepPips1/2, LotMultiplier, TrapDistancePips,
  BasketTPPipsPerLot, MaxDrawdownRatio, MaxDailyLossUSD,
  TrapRefreshMinutes, SlippagePoints) sekarang divalidasi
  di OnInit() dengan standar yang sama seperti parameter
  News Engine.

--------------------------------------------------------
[3] FITUR - NOTIFIKASI POP-UP MT5
--------------------------------------------------------
- BARU: Dialog native MessageBox() "MasAji EA Gold -
  License Required" (icon error) dan "MasAji EA Gold -
  Setup Required" (icon warning), lengkap dengan anti-spam
  (tampil sekali per kondisi), otomatis dilewati di
  Strategy Tester dan akun non-REAL.
- FIX: URL di pop-up Setup Required disederhanakan ke
  domain dasar saja (mis. https://masaji.online), sesuai
  cara kerja whitelist WebRequest MT5 yang mencocokkan
  berdasarkan prefix domain.

--------------------------------------------------------
[4] FIX KRITIS - LOG MEMBENGKAK SAAT BACKTEST TICK-DATA
--------------------------------------------------------
- FIX (KRITIS): Fungsi pencarian event berita dipanggil
  di SETIAP tick selama status menunggu event (kondisi
  normal ~99% waktu backtest). Sebelumnya ada 5 baris
  PrintFormat("[NEWS DEBUG]...") yang TIDAK dibatasi -
  pada mode "Every tick" untuk rentang panjang, ini
  menghasilkan JUTAAN baris log yang memenuhi disk VPS
  dan menyebabkan freeze total (penyebab 3 VPS blank
  di awal proyek ini). Ditambahkan input
  InpVerboseNewsDebugLog (default FALSE) untuk
  menggerbang semua log tersebut.
- FIX: Pesan "[MARGIN FAIL]" pada Speeder Engine
  ditambahkan throttle 1x/menit waktu nyata, mencegah
  spam log serupa saat tren kuat berkepanjangan.

--------------------------------------------------------
[5] REBRANDING (TAMPILAN SAJA, LOGIKA TIDAK BERUBAH)
--------------------------------------------------------
- Nama produk gabungan  : "MasAji EA Gold"
- Engine [1] (News)     : "MASAJI EKONOMI NEWS EA"
- Engine [2] (Grid/Mart): "MASAJI EA SPEEDER"

--------------------------------------------------------
[6] FITUR BESAR - MASTER MODE SWITCH
--------------------------------------------------------
- BARU: Dua boolean input terpisah (InpEnableNewsEngine/
  InpEnableMartyEngine) diganti SATU enum tegas:
  InpEngineMode dengan 3 pilihan:
      MODE_NEWS_ONLY    (default)
      MODE_SPEEDER_ONLY
      MODE_HYBRID
- Guard entry-baru dipindah presisi ke titik yang benar:
  News Engine hanya memblokir pencarian event BARU
  (transisi status posisi yang sudah aktif TETAP jalan);
  Speeder Engine hanya memblokir trap baru & penambahan
  layer martingale BARU (Basket TP & proteksi risiko
  TETAP selalu aktif berapa pun mode-nya). Ini perbaikan
  dari versi lama yang memblokir TOTAL (termasuk
  pengelolaan posisi yang sudah terbuka) saat satu engine
  di-nonaktifkan.
- HUD & Journal disesuaikan menampilkan mode & status
  kedua engine secara jelas dalam 3 baris terpisah.

--------------------------------------------------------
[7] FITUR - ATR DYNAMIC SIZING (NEWS ENGINE)
--------------------------------------------------------
- BARU: Jarak offset & Stop Loss News Engine sebelumnya
  angka TETAP (fixed) - sama saja apakah gold sedang
  tenang atau sedang liar saat rilis berita. Backtest
  menunjukkan pola SL kena dalam hitungan detik pasca-
  entry (lonjakan volatilitas berita sendiri yang memicu
  SL, bukan salah arah).
- Ditambahkan input InpUseATRSizing (default true),
  InpATRTimeframe, InpATRPeriod, InpATRMultiplierOffset,
  InpATRMultiplierSL - offset & SL sekarang mengikuti
  volatilitas gold SESUNGGUHNYA lewat indikator ATR,
  dengan InpOffsetPoints/InpStopLossPoints tetap sebagai
  BATAS MINIMUM aman (ATR hanya memperlebar, tidak pernah
  mempersempit di bawah nilai lama).

--------------------------------------------------------
[8] FITUR - FILTER SIDEWAYS ADX (SPEEDER ENGINE)
--------------------------------------------------------
- BARU: Grid/martingale secara desain rentan saat market
  trending kuat satu arah. Ditambahkan input
  InpMarty_UseADXFilter (default true),
  InpMarty_ADXTimeframe (default M15), InpMarty_ADXPeriod
  (14), InpMarty_ADXMaxForSideways (25.0) - basket BARU
  dari nol HANYA dibuka kalau ADX <= ambang batas (market
  dianggap sideways). Fallback AMAN ke "tidak sideways"
  (entry ditahan) kalau data ADX belum tersedia. Filter
  ini HANYA menggerbang pembukaan basket baru - basket
  yang sudah berjalan tidak disentuh. HUD menampilkan
  nilai ADX & status sideways/trending terkini.

--------------------------------------------------------
[9] PENYESUAIAN PARAMETER RISIKO SPEEDER
--------------------------------------------------------
Melalui diskusi kalibrasi risiko bertahap:
- BaseLot dinaikkan dari 0.01 -> 0.1 (di 0.01,
  LotMultiplier tidak berpengaruh sama sekali karena
  selalu dibulatkan ke bawah oleh lot step broker -
  martingale efektif tidak jalan).
- Beberapa iterasi penyesuaian MaxLayers, LotMultiplier,
  StepPips1/2, MaxDrawdownRatio, dan MaxDailyLossUSD atas
  permintaan eksplisit user, dengan worst-case floating
  loss dihitung & dikomunikasikan di setiap perubahan
  (lihat komentar inline di kode untuk detail angka
  worst-case pada kombinasi parameter yang aktif saat
  ini).

--------------------------------------------------------
CATATAN PENTING UNTUK USER
--------------------------------------------------------
1. EA ini WAJIB dijalankan di akun MT5 bertipe HEDGING.
   Speeder Engine membuka beberapa posisi terpisah pada
   simbol yang sama secara bersamaan - tidak didukung di
   akun Netting.

2. Untuk BACKTEST News Engine, kalender ekonomi historis
   WAJIB di-export lebih dulu via script terpisah
   MasAji_CalendarExporter.mq5 (dijalankan di chart LIVE/
   DEMO, BUKAN di Tester), menghasilkan file
   MasAji_CalendarCache.csv di folder Common\Files. Lepas
   script itu dari chart sebelum backtest, supaya file
   tidak terkunci.

3. Cek parameter InpEngineMode di tab Inputs sebelum
   menjalankan EA - pastikan mode yang aktif (NEWS ONLY /
   SPEEDER ONLY / HYBRID) sesuai kebutuhan Anda.

4. File .mq5 dalam paket ini perlu di-compile satu kali
   di MetaEditor (Compile / F7) sebelum bisa dipakai -
   akan menghasilkan file .ex5 di folder yang sama.

5. Backtest hanya valid pada rentang tanggal dengan
   History Quality 100% (cek di tab Journal Tester setelah
   backtest selesai). Kalau History Quality rendah/0%,
   data tick untuk periode itu tidak tersedia dari broker
   Anda - hasil backtest di periode tersebut TIDAK BOLEH
   dipakai sebagai acuan performa.
