GeeGitMEDIA
EUR/USD

Deteksi Stop Hunt: EA yang Mengintai Perburuan Stop Loss

Deteksi ManipulasiStop HuntPrice ActionManajemen Risiko
Tingkat bukti: Backtest saja Profit 124% berasal dari backtest 2016-2018; tidak ada uji real-time.
Paper yang dibahas
Stop hunt detection using indicators and expert advisors in the forex market
A. Noertjahyana, A. Christopher, Z. A. Abas, Z. I. M. Yusoh, A. Setiawan
Journal of Physics: Conference Series 1502 012054 (2020), IOP Publishing — Universitas Kristen Petra Surabaya & Universiti Teknikal Malaysia Melaka

Berbeda dari paper lain di seri ini yang mencari sinyal untuk masuk pasar, paper ini justru membahas cara mendeteksi kapan harga sedang "diburu" — fenomena yang dikenal trader ritel sebagai stop hunt: harga menusuk tajam ke satu arah, menyapu stop loss yang menumpuk di level tertentu, lalu berbalik arah.

Penulis membangun indikator plus Expert Advisor di MetaTrader 4 yang menandai candle mencurigakan: lonjakan tajam dengan ukuran minimum tertentu (dalam pengujian mereka, 250 poin) yang berbalik cepat. Saat pola itu terdeteksi, EA masuk berlawanan arah tusukan, dengan stop point ditaruh persis di titik tertinggi/terendah candle tersebut dan rasio risiko 1:3.

Backtest 3 tahun (2016–2018) pada EUR/USD dengan modal awal $10.000 dan lot tetap 1,0 menghasilkan profit 124,15%.

Yang perlu dicatat jujur: paper ini melaporkan hasil BACKTEST saja, tidak ada pengujian real-time seperti beberapa paper lain di seri ini. Berdasarkan pola yang berulang kita lihat (backtest bagus lalu jeblok saat live), angka 124% sebaiknya dibaca sebagai "strategi ini menarik untuk diteliti lebih jauh", bukan performa yang bisa diharapkan. Nilai terbesar paper ini justru pada kesadarannya: menaruh stop loss di level yang terlalu ramai punya risiko tersendiri.

Ilustrasi Kode Expert Advisor

Kode di bawah adalah ilustrasi struktur logika untuk belajar — bukan EA siap pakai. Jangan dijalankan di akun riil tanpa kamu pahami dan uji sendiri.
//+------------------------------------------------------------------+
//| ILUSTRASI EDUKASI: Deteksi Stop Hunt (tusukan + pembalikan)      |
//| Disederhanakan dari metodologi paper — bukan kode produksi       |
//+------------------------------------------------------------------+
input int    MinSpikePoints = 250;   // ukuran minimum tusukan agar dianggap mencurigakan
input double RiskReward     = 3.0;   // rasio risiko:imbalan 1:3 seperti di paper
input double LotSize        = 0.10;

// Sebuah candle dicurigai "stop hunt" bila ekornya panjang ke satu arah
// tetapi harga menutup kembali ke arah sebaliknya — menandakan level itu
// disentuh untuk menyapu stop, bukan karena tekanan arah yang bertahan.
bool IsStopHuntCandle(int shift, bool &huntedLow) {
   double high  = iHigh(_Symbol, PERIOD_CURRENT, shift);
   double low   = iLow(_Symbol, PERIOD_CURRENT, shift);
   double open  = iOpen(_Symbol, PERIOD_CURRENT, shift);
   double close = iClose(_Symbol, PERIOD_CURRENT, shift);
   double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

   double lowerWick = (MathMin(open, close) - low) / point;
   double upperWick = (high - MathMax(open, close)) / point;
   double body      = MathAbs(close - open) / point;

   if (lowerWick >= MinSpikePoints && lowerWick > body * 2) { huntedLow = true;  return true; }
   if (upperWick >= MinSpikePoints && upperWick > body * 2) { huntedLow = false; return true; }
   return false;
}

void OnTick() {
   if (PositionsTotal() > 0) return;

   bool huntedLow = false;
   if (!IsStopHuntCandle(1, huntedLow)) return;

   double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
   double high  = iHigh(_Symbol, PERIOD_CURRENT, 1);
   double low   = iLow(_Symbol, PERIOD_CURRENT, 1);

   if (huntedLow) {
      // Stop di bawah disapu lalu harga balik naik -> masuk Buy,
      // stop diletakkan tepat di titik terendah tusukan tadi.
      double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      double sl  = low - 5 * point;
      double tp  = ask + (ask - sl) * RiskReward;
      // trade.Buy(LotSize, _Symbol, ask, sl, tp);
   } else {
      double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
      double sl  = high + 5 * point;
      double tp  = bid - (sl - bid) * RiskReward;
      // trade.Sell(LotSize, _Symbol, bid, sl, tp);
   }
}

Seluruh artikel di Trading Zone membahas metode dari paper akademik yang sudah terbit — tujuannya murni edukasi (belajar metode dari literatur ilmiah), BUKAN sinyal atau rekomendasi beli/jual. Kode EA yang ditampilkan adalah ilustrasi struktur logika untuk belajar, bukan kode produksi siap pakai. Kami mendorong kamu membaca paper aslinya secara lengkap dan menguji sendiri di akun demo sebelum menyimpulkan apa pun. Perdagangan berjangka/forex adalah transaksi high-risk, high-return.

Ulasan lain di Trading Zone