Oscar's Grind di XAU/USD: Menaikkan Lot Setelah Menang, Bukan Setelah Kalah
Hampir semua paper lain di seri ini sibuk mencari sinyal masuk pasar. Paper ini justru menaruh inti sistemnya di tempat lain: pada berapa besar lot yang dipasang, bukan pada kapan masuk. Sinyalnya sendiri sederhana — harga menyentuh Bollinger Band (periode 21, deviasi 2.0) dengan konfirmasi tren dari ADX (periode 14, ambang 18).
Yang membuatnya layak dibaca adalah Oscar's Grind, aturan manajemen uangnya. Ukuran posisi dinaikkan setelah setiap KEMENANGAN (mulai 0,1 lot, naik +0,1 lot, dibatasi maksimal 1 lot), dan dipertahankan tetap setelah kerugian. Ini kebalikan dari martingale, yang justru menggandakan lot setelah kalah — pola yang kami peringatkan di artikel studi EA gratis. Oscar's Grind memperbesar taruhan saat sedang benar, bukan saat sedang salah.
Pengujiannya termasuk yang paling lengkap di seri ini: backtest tiga tahun (29 April 2022 – 29 Mei 2025) DAN uji real-time sebulan (12 Juni – 12 Juli 2025), modal awal $10.000 di akun demo broker XM, leverage 1:1000. Dua skenario dibandingkan: timeframe H1 dan H4, dengan parameter EA yang identik.
Hasil backtest: H1 mencatat Profit Factor 1,08 dengan drawdown maksimum 30,45% dan win rate 42,99% dari 1.098 transaksi. H4 lebih baik di hampir semua sisi — Profit Factor 1,26, Sharpe Ratio 3,38, Recovery Factor 2,09, dan drawdown maksimum hanya 19,52% dari 334 transaksi.
Uji real-time memperkuat kesimpulan yang sama, dan ini bagian yang jarang terjadi di seri ini: KEDUANYA untung. H1 menutup bulan di $10.278,62 (laba $278,62, win rate 43,33%, Profit Factor 1,11) tetapi dengan Recovery Factor cuma 0,28 dan drawdown 9,91%. H4 menutup di $10.636,71 (laba $636,71) dengan win rate 61,11%, Profit Factor 2,11, Recovery Factor 3,98, dan drawdown maksimum hanya 1,58%.
Penulis menjalankan uji-t untuk membandingkan simulasi dengan pasar nyata. Hasilnya jujur dan menarik: variabel profit TIDAK berbeda signifikan (p = 0,678 untuk H1; p = 0,938 untuk H4), tetapi akumulasi saldo akhir berbeda signifikan (p < 0,001 untuk H1; p = 0,004 untuk H4). Artinya besaran untung-rugi per transaksi mirip, tetapi lintasan modalnya tidak — backtest tetap bukan salinan pasar nyata.
Dua batas yang perlu disebut terus terang. Pertama, uji real-time H4 hanya berisi 18 transaksi dalam sebulan; sampel sekecil itu belum cukup untuk menyimpulkan keandalan jangka panjang, sama seperti catatan pada paper Fibonacci+Ichimoku di seri ini. Kedua, Oscar's Grind tetap menaikkan ukuran posisi secara bertahap — batas maksimal 1 lot itulah yang menahan risikonya, dan menghapus batas tersebut akan mengubah karakter sistem ini sepenuhnya.
Ilustrasi Kode Expert Advisor
//+------------------------------------------------------------------+
//| ILUSTRASI EDUKASI: Oscar's Grind + Bollinger Bands + ADX |
//| Disederhanakan dari metode paper — bukan kode siap pakai |
//+------------------------------------------------------------------+
input int BB_Period = 21; // periode Bollinger (sesuai paper)
input double BB_Deviation = 2.0;
input int ADX_Period = 14;
input double ADX_Threshold = 18.0; // tren dianggap valid di atas nilai ini
input double StakeAwal = 0.10; // lot awal
input double StakeIncrement = 0.10; // tambahan lot SETELAH MENANG
input double StakeMaksimal = 1.00; // pembatas — bagian terpenting dari sistem ini
input int TakeProfitPts = 1000;
input int StopLossPts = 800;
double lotSekarang = StakeAwal;
int bbHandle, adxHandle;
int OnInit() {
bbHandle = iBands(_Symbol, PERIOD_CURRENT, BB_Period, 0, BB_Deviation, PRICE_CLOSE);
adxHandle = iADX(_Symbol, PERIOD_CURRENT, ADX_Period);
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Inti Oscar's Grind. |
//| Perhatikan arahnya: lot NAIK setelah menang dan TETAP setelah |
//| kalah. Martingale melakukan kebalikannya — menggandakan lot |
//| setelah kalah — dan itulah yang membuat kurva ekuitasnya terlihat|
//| mulus bertahun-tahun lalu menghabiskan akun dalam satu rentetan. |
//+------------------------------------------------------------------+
void PerbaruiLot(bool transaksiMenang) {
if (transaksiMenang) {
lotSekarang = MathMin(lotSekarang + StakeIncrement, StakeMaksimal);
}
// Setelah kalah: lot TIDAK diubah, dan TIDAK digandakan.
}
void OnTick() {
if (PositionsTotal() > 0) return;
double upper[], lower[], adx[], plusDI[], minusDI[];
CopyBuffer(bbHandle, 1, 0, 2, upper);
CopyBuffer(bbHandle, 2, 0, 2, lower);
CopyBuffer(adxHandle, 0, 0, 2, adx);
CopyBuffer(adxHandle, 1, 0, 2, plusDI);
CopyBuffer(adxHandle, 2, 0, 2, minusDI);
if (adx[0] <= ADX_Threshold) return; // tanpa tren, sinyal band diabaikan
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
if (ask >= upper[0] && plusDI[0] > minusDI[0]) {
// trade.Buy(lotSekarang, _Symbol, ask,
// ask - StopLossPts * point, ask + TakeProfitPts * point);
} else if (bid <= lower[0] && minusDI[0] > plusDI[0]) {
// trade.Sell(lotSekarang, _Symbol, bid,
// bid + StopLossPts * point, bid - TakeProfitPts * point);
}
}
//+------------------------------------------------------------------+
//| Dipanggil saat posisi tertutup: hasilnya yang menentukan lot |
//| transaksi berikutnya. |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result) {
if (trans.type != TRADE_TRANSACTION_DEAL_ADD) return;
// PerbaruiLot(profitDeal > 0);
}
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.