Lampiran 4 · Rangka EA
OnInit, OnTick, dan OnDeinit: tiga fungsi peristiwa yang menjadi rangka setiap EA
Edisi 28 September 2026 · Redaksi PelitaTrade
Transaksi valas dan CFD berjalan dengan leverage, sehingga gerak harga yang kecil sanggup menguras seluruh saldo akun, bahkan dalam hitungan menit. Mayoritas pelaku ritel pada produk semacam ini justru menutup tahun dengan rugi. Lembar ini menerangkan cara kerja alat, bukan ajakan membuka posisi, dan tidak ada alat, robot, atau master yang dapat menjamin hasil.
Program MQL tidak berjalan dari atas ke bawah seperti skrip biasa. Terminal memanggil fungsi tertentu ketika sesuatu terjadi: EA dimuat, harga baru datang, atau EA dilepas. Ketiga fungsi itu, OnInit, OnTick, dan OnDeinit, adalah rangka yang menopang semua EA, dari yang paling sederhana sampai yang paling rumit.
Isi kotak — siapkan dulu
- K1MetaEditor terbuka dengan satu berkas EA kosong.
- K2Akun demo dan grafik simbol apa pun untuk mencoba.
- K3Tab Experts di terminal, tempat pesan
Printmuncul.

Rangka minimum
// Rangka minimum EA (MQL5) - contoh edukasi, bukan strategi siap pakai
int OnInit()
{
Print("EA dimuat pada ", _Symbol);
return(INIT_SUCCEEDED);
}
void OnTick()
{
// dipanggil setiap ada harga baru untuk simbol grafik ini
}
void OnDeinit(const int reason)
{
Print("EA dilepas, kode alasan: ", reason);
}Kode di atas mengikuti sintaks MQL5 dan bisa ditempel ke grafik setelah dikompilasi. Ia tidak melakukan apa pun kecuali menulis dua pesan ke tab Experts: satu saat dimuat, satu saat dilepas. Justru karena itu, rangka ini bagus untuk melihat kapan masing-masing fungsi dipanggil.
Urutan hidup sebuah EA
OnInit: persiapan
Dokumentasi MQL5 menyebut
OnInitboleh bertipeintatauvoidtanpa parameter. Di sinilah input diperiksa, handle indikator dibuat, dan variabel diberi nilai awal. Jika mengembalikanINIT_FAILEDatauINIT_PARAMETERS_INCORRECT, EA tidak dilanjutkan.OnTick: bekerja setiap harga baru
Menurut dokumentasi, peristiwa tick baru hanya dikirim ke EA saat harga baru untuk simbol grafiknya diterima. Bila peristiwa tick sebelumnya masih diproses, tick baru tidak ditambahkan ke antrean. Artinya, kode yang lambat akan melewatkan harga.
OnDeinit: bersih-bersih
Fungsi ini bertipe
voiddengan satu parameterconst int reason. Gunakan untuk melepas handle indikator, menghapus objek grafik, dan membersihkan komentar di layar.
Kode kembalian OnInit
| Konstanta | Arti menurut dokumentasi MQL5 |
|---|---|
INIT_SUCCEEDED | Inisialisasi berhasil, pengujian EA boleh dilanjutkan |
INIT_FAILED | Inisialisasi gagal karena galat fatal; tidak ada gunanya melanjutkan |
INIT_PARAMETERS_INCORRECT | Kumpulan parameter input tidak benar |
Membaca alasan OnDeinit
Parameter reason memberi tahu mengapa EA dilepas. Ini berguna saat EA tampak “mati sendiri”.
| Nilai | Konstanta | Kejadian |
|---|---|---|
| 0 | REASON_PROGRAM | EA menghentikan dirinya lewat ExpertRemove() |
| 1 | REASON_REMOVE | Program dihapus dari grafik |
| 2 | REASON_RECOMPILE | Program dikompilasi ulang |
| 3 | REASON_CHARTCHANGE | Simbol atau periode grafik diganti |
| 5 | REASON_PARAMETERS | Input diubah oleh pengguna |
| 6 | REASON_ACCOUNT | Akun lain diaktifkan atau koneksi ke server tersambung ulang |
| 8 | REASON_INITFAILED | OnInit mengembalikan nilai bukan nol |
| 9 | REASON_CLOSE | Terminal ditutup |
Perhatikan kode 3 dan 5: mengganti timeframe atau mengubah input akan melepas lalu memuat ulang EA. Variabel yang hanya disimpan di memori ikut hilang, sehingga EA yang menghitung “jumlah transaksi hari ini” di variabel biasa bisa salah hitung setelah Anda sekadar mengganti timeframe.
Kesalahan pemula yang sering muncul
- Membuat handle indikator di OnTick. Di MQL5, handle cukup dibuat sekali di OnInit.
- Menaruh indikator berat di setiap tick. Periksa dulu apakah candle baru sudah terbentuk.
- Menganggap OnTick berjalan di indikator. Dokumentasi menegaskan peristiwa tick tidak dibuat untuk indikator atau script.
- Lupa membersihkan layar. Tanpa
Comment("")di OnDeinit, tulisan lama tertinggal di grafik.
Latihan: melihat sendiri kapan fungsi dipanggil
Tempelkan rangka minimum di atas ke grafik akun demo, lalu lakukan empat tindakan berikut sambil membuka tab Experts. Setiap tindakan memicu pasangan pesan “dilepas” dan “dimuat” dengan kode alasan yang berbeda, kecuali tindakan terakhir yang hanya memunculkan pesan pelepasan.
| Tindakan | Kode alasan di OnDeinit | Dimuat ulang? |
|---|---|---|
| Ganti timeframe grafik, misalnya dari H1 ke M15 | 3 | Ya |
| Buka properti EA dan ubah satu input | 5 | Ya |
| Kompilasi ulang berkas di MetaEditor | 2 | Ya |
| Hapus EA dari grafik | 1 | Tidak |
Catat urutan pesan yang Anda lihat. Kebiasaan kecil ini membantu ketika kelak EA sungguhan tampak berhenti tanpa sebab: kode alasan di log biasanya langsung menunjuk pelakunya.
Setelah rangka ini dipahami, lanjutkan ke contoh EA lengkap yang membaca moving average, atau ke lampiran input untuk memahami variabel yang bisa diubah pengguna.
Rangka yang benar tidak membuat strategi menjadi benar. Kode yang bersih pun bisa kehilangan seluruh saldo bila aturannya keliru atau ukuran posisinya terlalu besar.
Lembar berikutnya
- Bab F · Membuat EACara membuat EA forex: dari aturan tertulis ke kode MQL4/MQL5, plus batas EA generator dan robot di Android
- Lampiran 5 · Tab InputsMembaca tab Inputs sebuah EA: lot, magic number, SL/TP, dan jebakan satuan point
- Bab E · MQL5Apa itu MQL5: bahasa pemrograman MetaTrader dan komunitas MQL5.com, dari daftar akun sampai portofolio
- Bab C · Robot & EARobot trading adalah program aturan: cara kerja EA forex, kelebihan, dan kelemahannya