Lompat ke isi
PelitaTradeMANUAL ALAT

Lampiran 4 · Rangka EA

OnInit, OnTick, dan OnDeinit: tiga fungsi peristiwa yang menjadi rangka setiap EA

Edisi 28 September 2026 · Redaksi PelitaTrade

Perhatian · produk berisiko tinggi

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 Print muncul.
Susunan roda gigi bercahaya oranye yang saling mengait
Tiga roda gigi yang berputar pada saat yang berbeda: saat dimuat, saat ada harga, saat dilepas.

Rangka minimum

Contoh edukasi, bukan strategi siap pakai
// 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

  1. OnInit: persiapan

    Dokumentasi MQL5 menyebut OnInit boleh bertipe int atau void tanpa parameter. Di sinilah input diperiksa, handle indikator dibuat, dan variabel diberi nilai awal. Jika mengembalikan INIT_FAILED atau INIT_PARAMETERS_INCORRECT, EA tidak dilanjutkan.

  2. 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.

  3. OnDeinit: bersih-bersih

    Fungsi ini bertipe void dengan satu parameter const int reason. Gunakan untuk melepas handle indikator, menghapus objek grafik, dan membersihkan komentar di layar.

Kode kembalian OnInit

Nilai yang bisa dikembalikan OnInit
KonstantaArti menurut dokumentasi MQL5
INIT_SUCCEEDEDInisialisasi berhasil, pengujian EA boleh dilanjutkan
INIT_FAILEDInisialisasi gagal karena galat fatal; tidak ada gunanya melanjutkan
INIT_PARAMETERS_INCORRECTKumpulan parameter input tidak benar

Membaca alasan OnDeinit

Parameter reason memberi tahu mengapa EA dilepas. Ini berguna saat EA tampak “mati sendiri”.

Sebagian kode alasan (dokumentasi MQL5)
NilaiKonstantaKejadian
0REASON_PROGRAMEA menghentikan dirinya lewat ExpertRemove()
1REASON_REMOVEProgram dihapus dari grafik
2REASON_RECOMPILEProgram dikompilasi ulang
3REASON_CHARTCHANGESimbol atau periode grafik diganti
5REASON_PARAMETERSInput diubah oleh pengguna
6REASON_ACCOUNTAkun lain diaktifkan atau koneksi ke server tersambung ulang
8REASON_INITFAILEDOnInit mengembalikan nilai bukan nol
9REASON_CLOSETerminal 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 dan pesan yang semestinya muncul
TindakanKode alasan di OnDeinitDimuat ulang?
Ganti timeframe grafik, misalnya dari H1 ke M153Ya
Buka properti EA dan ubah satu input5Ya
Kompilasi ulang berkas di MetaEditor2Ya
Hapus EA dari grafik1Tidak

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.

Perhatian

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