- 1 1. Pendahuluan
- 2 2. Apa itu fungsi OrderSend
- 3 3. Detail Argumen Fungsi OrderSend
- 3.1 Penjelasan detail setiap argumen
- 3.1.1 1. symbol (Pasangan mata uang)
- 3.1.2 2. cmd (Tipe beli/jual / Tipe order)
- 3.1.3 3. volume (Jumlah lot)
- 3.1.4 4. price (Harga order)
- 3.1.5 5. slippage (Slippage)
- 3.1.6 6. stoploss (Harga stop loss)
- 3.1.7 7. takeprofit (Harga take profit)
- 3.1.8 8. comment (Komentar order)
- 3.1.9 9. magic (Nomor magic)
- 3.1.10 10. expiration (Tanggal kedaluwarsa)
- 3.1.11 11. arrow_color (Warna panah)
- 3.1 Penjelasan detail setiap argumen
- 4 4. Detail Jenis Pesanan
- 5 5. Contoh penggunaan fungsi OrderSend
- 6 6. Penanganan Kesalahan
- 7 7. Poin Penting Saat Menggunakan Fungsi OrderSend
- 7.1 Poin Penting 1: Normalisasi Harga (Fungsi NormalizeDouble)
- 7.2 Poin Penting 2: Pengaturan Slippage
- 7.3 Poin Penting 3: Waktu Respons Server dan Batasan Permintaan
- 7.4 Poin Penting 4: Memeriksa Level Stop Minimum
- 7.5 Poin Penting 5: Penggunaan Magic Number
- 7.6 Poin Penting 6: Waktu dan Likuiditas
- 7.7 Poin Penting 7: Debugging dan Pencatatan Log
- 8 8. Ringkasan
1. Pendahuluan
MQL4 (MetaQuotes Language 4) adalah bahasa pemrograman yang berjalan di platform MetaTrader 4 (MT4) dan digunakan untuk membuat sistem perdagangan otomatis serta indikator kustom di pasar keuangan seperti FX dan saham. Di antara fungsi-fungsi tersebut, fungsi OrderSend memainkan peran yang sangat penting.
Fungsi OrderSend menyediakan fungsi dasar untuk mengirimkan order beli/jual langsung dari program. Dengan menggunakan fungsi ini, otomatisasi perdagangan menjadi memungkinkan, dan dapat memesan order beli/jual berdasarkan kondisi tertentu. Memahami fungsi ini dengan benar adalah langkah yang tidak dapat dihindari bagi semua pengguna, mulai dari pemula hingga mahir, dalam menguasai pemrograman MQL4.
Artikel ini akan menjelaskan secara bertahap mulai dari mekanisme dasar fungsi OrderSend, penjelasan detail argumen, contoh penggunaan nyata, hingga poin-poin penting. Dengan membaca artikel ini, Anda akan memperoleh dasar yang kuat untuk menguasai fungsi OrderSend MQL4.

2. Apa itu fungsi OrderSend
Fungsi OrderSend adalah fungsi untuk mengirimkan order beli/jual di MQL4. Dalam sistem perdagangan otomatis MetaTrader 4, fungsi ini bertanggung jawab untuk mengeluarkan instruksi perdagangan secara programatik. Dari pemula hingga mahir, semua trader menggunakan fungsi ini secara penting saat membangun otomatisasi perdagangan atau strategi tingkat tinggi.
Berikut ini akan dijelaskan struktur dasar dan gambaran umum fungsi OrderSend.
Struktur Dasar Fungsi OrderSend
Sintaks (struktur) fungsi OrderSend adalah sebagai berikut.
int OrderSend(
string symbol, // Pasangan mata uang
int cmd, // Tipe beli/jual (tipe order)
double volume, // Jumlah lot
double price, // Harga order
int slippage, // Slippage
double stoploss, // Harga stop loss
double takeprofit, // Harga take profit
string comment, // Komentar order
int magic, // Nomor magic
datetime expiration, // Tanggal kedaluwarsa
color arrow_color // Warna panah
);
Nilai Kembali Dasar
Fungsi OrderSend mengembalikan nomor tiket (tipe int) jika order berhasil. Sebaliknya, jika gagal, mengembalikan -1 dan kode error disetel. Kode error ini dapat diperoleh menggunakan fungsi GetLastError
.
Peran Fungsi OrderSend
- Otomatisasi perdagangan
Dengan menggunakan fungsi OrderSend, trader dapat mengotomatisasi operasi beli/jual yang biasanya dilakukan secara manual. Hal ini mencegah kesalahan manusia dan memungkinkan perdagangan yang cepat serta efisien. - Eksekusi strategi
Dengan menetapkan kondisi dalam program dan mengeksekusi order berdasarkan kondisi tersebut, trader dapat meningkatkan akurasi strategi perdagangan. Misalnya, dapat mengimplementasikan order ketika mencapai harga tertentu atau pada jam tertentu. - Manajemen posisi ganda
Dengan menggunakan nomor magic (argumenmagic
), trader dapat mengidentifikasi dan mengelola beberapa posisi dengan mudah. Hal ini memungkinkan pelaksanaan strategi yang berbeda secara bersamaan.

3. Detail Argumen Fungsi OrderSend
Untuk menggunakan fungsi OrderSend dengan benar, penting untuk memahami arti dan peran setiap argumen. Pada bagian ini, kami akan menjelaskan argumen fungsi OrderSend satu per satu dan menjelaskan cara penggunaannya secara konkret.
Penjelasan detail setiap argumen
1. symbol
(Pasangan mata uang)
Penjelasan
Tentukan pasangan mata uang yang akan diperdagangkan. Misalnya, gunakan string seperti "EURUSD"
atau "USDJPY"
.
Catatan
- Pastikan menggunakan pasangan mata uang yang ditampilkan di platform.
- Anda juga dapat menentukan pasangan mata uang yang berbeda dari chart saat ini.
Contoh
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "", 0, 0, Blue);
2. cmd
(Tipe beli/jual / Tipe order)
Penjelasan
Tentukan tipe perdagangan. Gunakan konstanta berikut:
OP_BUY
: Order beli pasar (market buy)OP_SELL
: Order jual pasar (market sell)OP_BUYLIMIT
: Order beli limitOP_SELLLIMIT
: Order jual limitOP_BUYSTOP
: Order beli stop (stop buy)OP_SELLSTOP
: Order jual stop (stop sell)
Contoh
OrderSend("USDJPY", OP_BUY, 1.0, Ask, 3, 0, 0, "", 0, 0, Blue);
3. volume
(Jumlah lot)
Penjelasan
Tentukan volume perdagangan dalam jumlah lot. Misalnya, ‘1.0’ menunjukkan 1 lot.
Catatan
- Periksa terlebih dahulu karena jumlah lot minimum dapat berbeda per broker.
- Penting untuk mengatur ukuran lot yang sesuai dengan margin dan manajemen risiko.
Contoh
OrderSend("GBPUSD", OP_SELL, 0.1, Bid, 2, 0, 0, "", 0, 0, Red);
4. price
(Harga order)
Penjelasan
Tentukan harga untuk mengirim order. Biasanya, untuk order pasar, gunakan Ask
atau Bid
. Untuk order limit atau stop, Anda harus menentukan harga secara eksplisit.
Catatan
- Untuk order limit atau stop, tentukan harga yang sesuai di atas atau di bawah harga saat ini.
Contoh
OrderSend("EURUSD", OP_BUYLIMIT, 1.0, 1.1000, 3, 0, 0, "", 0, 0, Blue);
5. slippage
(Slippage)
Penjelasan
Tentukan rentang perbedaan harga (slippage) yang dapat diterima saat mengeksekusi order. Satuan adalah poin (bukan pips).
Catatan
- Di situasi volatil, slippage sering terjadi, jadi penting untuk mengatur batas yang tepat.
Contoh
OrderSend("USDJPY", OP_SELL, 1.0, Bid, 5, 0, 0, "", 0, 0, Green);
6. stoploss
(Harga stop loss)
Penjelasan
Tentukan harga untuk stop loss. Harus diatur dalam arah berlawanan dengan harga order.
Catatan
- Jika tidak diatur, gunakan
0
. - Disarankan untuk mengatur sesuai strategi manajemen dana pengguna.
Contoh
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 1.0950, 0, "", 0, 0, Blue);
7. takeprofit
(Harga take profit)
Penjelasan
Tentukan harga untuk take profit. Harus diatur dalam arah yang sama dengan harga order.
Catatan
- Jika tidak diatur, gunakan
0
. - Dengan mengatur garis take profit yang tepat, strategi perdagangan dapat diotomatisasi.
Contoh
OrderSend("GBPUSD", OP_SELL, 1.0, Bid, 3, 0, 1.2500, "", 0, 0, Red);
8. comment
(Komentar order)
Penjelasan
Tambahkan komentar opsional pada order. Komentar ini akan ditampilkan di riwayat perdagangan.
Contoh
OrderSend("USDJPY", OP_BUY, 1.0, Ask, 3, 0, 0, "Test Order", 0, 0, Yellow);
9. magic
(Nomor magic)
Penjelasan
Tentukan nomor untuk mengidentifikasi order yang dikeluarkan oleh program. Berguna saat mengelola order yang dijalankan oleh EA (Expert Advisor) yang berbeda.
Contoh
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "", 123456, 0, Blue);
10. expiration
(Tanggal kedaluwarsa)
Penjelasan
Tetapkan batas waktu valid untuk order. Jika nilai ini diatur, order yang melewati batas waktu akan otomatis dihapus.
Catatan
- Jika tidak diatur, gunakan
0
.
Contoh
OrderSend("GBPUSD", OP_BUYLIMIT, 1.0, 1.3000, 3, 0, 0, "", 0, TimeCurrent() + 3600, Green);
11. arrow_color
(Warna panah)
Penjelasan
Tentukan warna panah order yang ditampilkan di chart.
Contoh
OrderSend("USDJPY", OP_SELL, 1.0, Bid, 3, 0, 0, "", 0, 0, Blue);
Dengan memahami argumen fungsi OrderSend, Anda dapat membuat program perdagangan yang lebih fleksibel dan efisien. Pada bagian berikutnya, kami akan menjelaskan ‘Detail tipe order’.

4. Detail Jenis Pesanan
Saat menggunakan fungsi OrderSend MQL4, penting untuk memahami dengan benar tipe pesanan (argumen cmd
) dan mengaturnya dengan tepat. Pada bagian ini, kami akan menjelaskan secara rinci karakteristik dan cara penggunaan untuk setiap tipe pesanan.
Jenis Tipe Pesanan
1. Pesanan Pasar (Market Orders)
Pesanan Pasar adalah jenis pesanan yang dieksekusi segera pada harga pasar saat ini.
Jenis
OP_BUY
:Mengirim pesanan beli pada harga pasar saat ini (harga Ask)OP_SELL
:Mengirim pesanan jual pada harga pasar saat ini (harga Bid)
Contoh Penggunaan
Pesanan Pasar digunakan ketika Anda ingin masuk pasar dengan cepat. Misalnya, berguna ketika Anda ingin mengikuti tren tertentu.
Contoh Kode
// Pesanan Beli Pasar
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Market Buy", 123456, 0, Blue);
// Pesanan Jual Pasar
OrderSend("EURUSD", OP_SELL, 1.0, Bid, 3, 0, 0, "Market Sell", 123456, 0, Red);
2. Pesanan Limit (Limit Orders)
Pesanan Limit digunakan ketika Anda ingin mengeksekusi pesanan pada harga yang lebih menguntungkan daripada harga pasar saat ini.
Jenis
OP_BUYLIMIT
:Mengirim pesanan beli pada harga lebih rendah daripada harga saat iniOP_SELLLIMIT
:Mengirim pesanan jual pada harga lebih tinggi daripada harga saat ini
Contoh Penggunaan
Berguna ketika Anda ingin melaksanakan strategi kontrarian atau menargetkan retracement pada kisaran harga tertentu.
Contoh Kode
// Pesanan Limit Beli
OrderSend("USDJPY", OP_BUYLIMIT, 1.0, 135.50, 3, 135.00, 136.00, "Buy Limit Order", 123456, 0, Green);
// Pesanan Limit Jual
OrderSend("USDJPY", OP_SELLLIMIT, 1.0, 136.50, 3, 137.00, 135.00, "Sell Limit Order", 123456, 0, Yellow);
3. Pesanan Stop (Stop Orders)
Pesanan Stop digunakan ketika Anda ingin mengeksekusi pesanan pada harga yang kurang menguntungkan daripada harga pasar saat ini.
Jenis
OP_BUYSTOP
:Mengirim pesanan beli pada harga lebih tinggi daripada harga saat iniOP_SELLSTOP
:Mengirim pesanan jual pada harga lebih rendah daripada harga saat ini
Contoh Penggunaan
Berguna ketika Anda ingin melaksanakan strategi trend-following atau menembus garis harga tertentu.
Contoh Kode
// Pesanan Stop Beli
OrderSend("GBPUSD", OP_BUYSTOP, 1.0, 1.3100, 3, 1.3000, 1.3200, "Buy Stop Order", 123456, 0, Blue);
// Pesanan Stop Jual
OrderSend("GBPUSD", OP_SELLSTOP, 1.0, 1.2900, 3, 1.3000, 1.2800, "Sell Stop Order", 123456, 0, Red);
Kriteria Pemilihan Jenis Pesanan
Situasi Penerapan Pesanan Pasar
- Jika ingin mengikuti momentum pasar
- Jika ingin menargetkan waktu cepat menembus kisaran harga penting
Situasi Penerapan Pesanan Limit
- Jika mengharapkan retracement dari harga saat ini
- Jika ingin masuk dengan memprediksi titik pembalikan tren
Situasi Penerapan Pesanan Stop
- Jika mengharapkan kelanjutan tren
- Jika ingin menargetkan gerakan menembus garis harga tertentu
Contoh Pemilihan dalam Skenario Nyata
Skenario 1: Pembelian pada Penurunan Tren
Jika harga saat ini berada dalam tren naik, dan diprediksi akan turun sementara lalu naik kembali:
- Jenis Pesanan:Pesanan Limit (
OP_BUYLIMIT
)
Skenario 2: Strategi Breakout
Jika diprediksi harga akan menembus garis resistensi penting:
- Jenis Pesanan:Pesanan Stop (
OP_BUYSTOP
atauOP_SELLSTOP
)

5. Contoh penggunaan fungsi OrderSend
Di sini, kami menunjukkan contoh kode konkret yang memanfaatkan fungsi OrderSend, sekaligus menjelaskan cara penggunaannya dalam berbagai skenario perdagangan. Dengan demikian, dapat memperjelas gambaran penggunaan fungsi OrderSend dalam program MQL4 nyata.
Contoh 1: Order Pasar (Market Orders)
Contoh kode order beli
Berikut kode menunjukkan contoh pemesanan beli pasar pada harga Ask saat ini.
Contoh kode
int ticket = OrderSend(
"EURUSD", // Pasangan mata uang
OP_BUY, // Order beli
1.0, // Jumlah lot
Ask, // Harga saat ini
3, // Slippage
0, // Harga stop loss
0, // Harga take profit
"Order Beli Pasar", // Komentar
0, // Nomor magic
0, // Masa berlaku
Blue // Warna panah
);
if(ticket < 0) {
Print("Pesanan gagal. Kode error: ", GetLastError());
} else {
Print("Pesanan berhasil. Nomor tiket: ", ticket);
}
Contoh kode order jual
Berikut contoh pemesanan jual pasar pada harga Bid saat ini.
Contoh kode
int ticket = OrderSend(
"USDJPY", // Pasangan mata uang
OP_SELL, // Order jual
0.5, // Jumlah lot
Bid, // Harga saat ini
2, // Slippage
0, // Harga stop loss
0, // Harga take profit
"Order Jual Pasar", // Komentar
123456, // Nomor magic
0, // Masa berlaku
Red // Warna panah
);
Contoh 2: Order Limit (Limit Orders)
Contoh kode order beli limit
Pemesanan beli dilakukan pada harga lebih rendah dari harga saat ini. Misalnya, jika harga saat ini 1.1200 dan turun ke 1.1150, maka pesanan akan ditempatkan.
Contoh kode
OrderSend(
"EURUSD",
OP_BUYLIMIT,
1.0,
1.1150, // Harga limit
3,
1.1100, // Harga stop loss
1.1200, // Harga take profit
"Order Limit Beli",
0,
0,
Green
);
Contoh kode order jual limit
Pemesanan jual dilakukan pada harga lebih tinggi dari harga saat ini. Misalnya, jika harga saat ini 1.1200 dan naik ke 1.1250, maka pesanan akan ditempatkan.
Contoh kode
OrderSend(
"GBPUSD",
OP_SELLLIMIT,
0.5,
1.1250, // Harga limit
2,
1.1300, // Harga stop loss
1.1200, // Harga take profit
"Order Limit Jual",
0,
0,
Yellow
);
Contoh 3: Order Stop (Stop Orders)
Contoh kode order beli stop
Pemesanan beli dilakukan pada harga lebih tinggi dari harga saat ini. Misalnya, jika harga saat ini 1.1200 dan menembus 1.1250, maka pesanan akan ditempatkan.
Contoh kode
OrderSend(
"USDJPY",
OP_BUYSTOP,
1.0,
135.00, // Harga stop
3,
134.50, // Harga stop loss
135.50, // Harga take profit
"Order Stop Beli",
0,
0,
Blue
);
Contoh kode order jual stop
Pemesanan jual dilakukan pada harga lebih rendah dari harga saat ini. Misalnya, jika harga saat ini 1.1200 dan turun di bawah 1.1150, maka pesanan akan ditempatkan.
Contoh kode
OrderSend(
"EURUSD",
OP_SELLSTOP,
0.5,
1.1150, // Harga stop
2,
1.1200, // Harga stop loss
1.1100, // Harga take profit
"Order Stop Jual",
0,
0,
Red
);
Contoh 4: Penanganan error pesanan
Jika pesanan gagal, perlu mengambil kode error dan memeriksa penyebabnya. Pada kode berikut, fungsi GetLastError
digunakan untuk mengambil informasi error.
Contoh kode
int ticket = OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Error Test", 0, 0, Blue);
if(ticket < 0) {
int errorCode = GetLastError();
Print("Pesanan gagal. Kode error: ", errorCode);
// Tambahkan penanganan khusus untuk error tertentu
if(errorCode == 134) {
Print("Margin tidak cukup. Kurangi ukuran lot.");
} else if(errorCode == 130) {
Print("Level stop tidak valid. Periksa kembali harga.");
}
}
Berdasarkan contoh-contoh ini, Anda dapat mengimplementasikan strategi perdagangan nyata ke dalam program. Pada bagian berikutnya, kami akan menjelaskan secara rinci tentang ‘6. Penanganan error’.

6. Penanganan Kesalahan
Saat menggunakan fungsi OrderSend di MQL4, terkadang pesanan tidak diproses dengan benar. Dalam situasi seperti itu, penting untuk mengidentifikasi kesalahan dengan tepat dan mengambil tindakan yang sesuai. Penanganan kesalahan adalah elemen penting untuk meningkatkan stabilitas dan keandalan program.
Metode Deteksi Kesalahan
Di MQL4, periksa nilai kembali fungsi OrderSend
, dan jika terjadi kesalahan, gunakan fungsi GetLastError
untuk mendapatkan kode kesalahan.
Struktur Dasar Pemeriksaan Kesalahan
int ticket = OrderSend(
"EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Tes Pesanan", 0, 0, Blue
);
if(ticket < 0) {
int errorCode = GetLastError();
Print("Pesanan gagal. Kode kesalahan: ", errorCode);
}
ticket
mengembalikan nilai negatif berarti pesanan gagal. Kemudian, identifikasi penyebab berdasarkan kode kesalahan.
Kode Kesalahan Utama dan Cara Menanganinya
130: Tingkat Stop Tidak Valid
Penyebab
- Harga stop loss (
stoploss
) atau take profit (takeprofit
) yang ditentukan berada di luar rentang yang dapat diperdagangkan.
Solusi
- Periksa tingkat stop minimum yang disediakan oleh broker dan sesuaikan harga.
- Normalisasi harga (menggunakan fungsi NormalizeDouble) untuk memastikan ketelitian.
Contoh Kode yang Diperbaiki
double stopLoss = NormalizeDouble(Ask - 0.0010, Digits);
double takeProfit = NormalizeDouble(Ask + 0.0020, Digits);
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, stopLoss, takeProfit, "Tes Harga Normalisasi", 0, 0, Blue);
131: Ukuran Lot Tidak Valid
Penyebab
- Ukuran lot berada di luar rentang yang diizinkan oleh broker (terlalu kecil atau terlalu besar).
Solusi
- Periksa ukuran lot minimum dan maksimum broker, dan tentukan nilai dalam rentang tersebut.
Contoh Kode yang Diperbaiki
double lotSize = 0.1;
if(lotSize < MarketInfo("EURUSD", MODE_MINLOT) || lotSize > MarketInfo("EURUSD", MODE_MAXLOT)) {
Print("Ukuran lot tidak valid. Silakan atur nilai yang sesuai.");
} else {
OrderSend("EURUSD", OP_BUY, lotSize, Ask, 3, 0, 0, "Tes Ukuran Lot", 0, 0, Blue);
}
134: Kekurangan Marjin
Penyebab
- Marjin yang diperlukan untuk mengeksekusi pesanan tidak mencukupi.
Solusi
- Kurangi ukuran lot atau tambahkan marjin.
- Gunakan fungsi
AccountFreeMargin
untuk memeriksa marjin yang tersedia.
Contoh Kode yang Diperbaiki
double freeMargin = AccountFreeMargin();
double requiredMargin = MarketInfo("EURUSD", MODE_MARGINREQUIRED) * 1.0;
if(freeMargin < requiredMargin) {
Print("Marjin tidak mencukupi. Kurangi ukuran lot.");
} else {
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Tes Marjin", 0, 0, Blue);
}
146: Pasar Tutup
Penyebab
- Terjadi ketika mencoba mengeksekusi pesanan saat pasar tutup.
Solusi
- Periksa jam perdagangan dan lakukan pesanan hanya pada jam perdagangan.
- Gunakan fungsi
MarketInfo
untuk memeriksa status pasar.
Contoh Penanganan Kesalahan Umum
Berikut adalah contoh kode penanganan kesalahan umum yang menampilkan pesan kesalahan yang sesuai berdasarkan kode kesalahan.
Contoh Penanganan Kesalahan Umum
int ticket = OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Tes Penanganan Kesalahan", 0, 0, Blue);
if(ticket < 0) {
int errorCode = GetLastError();
switch(errorCode) {
case 130:
Print("Tingkat stop tidak valid. Mohon periksa harga kembali.");
break;
case 131:
Print("Ukuran lot tidak valid. Silakan tentukan nilai yang sesuai.");
break;
case 134:
Print("Marjin tidak mencukupi. Sesuaikan ukuran lot.");
break;
case 146:
Print("Pasar sedang tutup. Periksa jam perdagangan yang dapat diperdagangkan.");
break;
default:
Print("Terjadi kesalahan tidak dikenal. Kode kesalahan: ", errorCode);
break;
}
}
Poin Penanganan Kesalahan
- Jangan Abaikan Kesalahan
Dengan mengambil tindakan yang tepat ketika kesalahan terjadi, keandalan program meningkat. - Lakukan Pemeriksaan Sebelumnya
Dengan memeriksa ukuran lot dan tingkat stop sebelum mengeksekusi pesanan, dapat mencegah terjadinya kesalahan. - Manfaatkan Output Log
Dengan menyimpan detail kesalahan ke log menggunakan fungsiPrint
, pemecahan masalah menjadi lebih mudah.

7. Poin Penting Saat Menggunakan Fungsi OrderSend
Fungsi OrderSend adalah alat yang sangat kuat untuk mengirim pesanan perdagangan di MQL4, namun penggunaannya memerlukan kehati-hatian. Bagian ini menjelaskan poin-poin penting yang perlu diperhatikan saat menggunakan OrderSend serta langkah-langkah konkret untuk mencegah kesalahan umum.
Poin Penting 1: Normalisasi Harga (Fungsi NormalizeDouble)
Masalah
Di MQL4, terkadang Anda menangani pasangan mata uang atau produk dengan jumlah digit desimal (Digits
) yang berbeda. Dalam situasi tersebut, jika hasil perhitungan harga tidak sesuai dengan spesifikasi platform, pesanan dapat ditolak.
Solusi
Dengan menggunakan fungsi NormalizeDouble
, Anda dapat menormalkan harga (menyesuaikan jumlah digit desimal) untuk mencegah masalah ini.
Contoh
double stopLoss = NormalizeDouble(Ask - 0.0010, Digits);
double takeProfit = NormalizeDouble(Ask + 0.0020, Digits);
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, stopLoss, takeProfit, "Normalized Price Test", 0, 0, Blue);
Poin Penting 2: Pengaturan Slippage
Masalah
Jika pasar mengalami volatilitas tajam, slippage (pergeseran harga saat pemesanan) dapat terjadi. Jika slippage melebihi batas yang diizinkan, pesanan mungkin ditolak.
Solusi
Dengan mengatur nilai slippage yang tepat, Anda dapat mengurangi risiko kegagalan perdagangan. Selain itu, pada periode yang diperkirakan akan mengalami volatilitas tinggi (misalnya saat rilis indikator ekonomi), disarankan untuk mengatur slippage lebih lebar atau menunda perdagangan.
Contoh
int slippage = 5; // Slippage 5 poin diizinkan
OrderSend("USDJPY", OP_BUY, 0.1, Ask, slippage, 0, 0, "Slippage Test", 0, 0, Green);
Poin Penting 3: Waktu Respons Server dan Batasan Permintaan
Masalah
Jika server broker sedang padat, waktu respons pesanan dapat menjadi lama. Selain itu, beberapa broker dapat mengalami error jika mengirim banyak permintaan dalam waktu singkat.
Solusi
- Saat mengirim beberapa pesanan secara berurutan, pastikan memberi interval yang tepat.
- Disarankan untuk mengimplementasikan logika memantau respons server dan menambahkan mekanisme retry jika terjadi timeout.
Poin Penting 4: Memeriksa Level Stop Minimum
Masalah
Mengabaikan ‘level stop minimum’ yang ditetapkan oleh broker dapat menyebabkan harga stop loss atau take profit dianggap tidak valid.
Solusi
Gunakan fungsi MarketInfo
untuk mengambil level stop minimum dan sertakan logika pemeriksaan sebelumnya.
Contoh
double minStopLevel = MarketInfo("EURUSD", MODE_STOPLEVEL) * Point;
if((Ask - minStopLevel) < NormalizeDouble(Ask - 0.0010, Digits)) {
Print("Harga stop loss tidak memenuhi level stop minimum.");
} else {
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, Ask - 0.0010, Ask + 0.0020, "Stop Level Check", 0, 0, Blue);
}
Poin Penting 5: Penggunaan Magic Number
Masalah
Jika beberapa Expert Advisor (EA) berjalan bersamaan, tanpa mengatur magic number, tidak dapat membedakan pesanan yang dikeluarkan oleh EA mana.
Solusi
Tetapkan magic number unik untuk setiap EA agar dapat mengelola posisi.
Contoh
int magicNumber = 123456; // Magic number unik
OrderSend("GBPUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Magic Number Test", magicNumber, 0, Yellow);
Poin Penting 6: Waktu dan Likuiditas
Masalah
Pada periode likuiditas rendah (misalnya dini hari waktu Jepang) atau sebelum penutupan akhir pekan, spread dapat melebar dan pesanan sulit terpenuhi.
Solusi
- Tentukan waktu perdagangan yang dapat diprogram, dan hindari mengirim pesanan pada periode tertentu.
- Gunakan fungsi
TimeCurrent
untuk mendapatkan waktu server saat ini dan batasi perdagangan sesuai kondisi.
Contoh
datetime currentTime = TimeCurrent();
if(TimeHour(currentTime) >= 22 || TimeHour(currentTime) < 2) {
Print("Saat ini adalah periode untuk menunda perdagangan.");
} else {
OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, 0, 0, "Time Restriction Test", 0, 0, Blue);
}
Poin Penting 7: Debugging dan Pencatatan Log
Masalah
Jika program tidak berjalan sesuai harapan, sulit untuk mengidentifikasi penyebab masalah.
Solusi
- Gunakan fungsi
Print
untuk mencatat variabel penting dan output fungsi ke log. - Periksa log di tab
Experts
atauJournal
untuk memastikan tidak ada anomali.
Contoh
double stopLoss = NormalizeDouble(Ask - 0.0010, Digits);
Print("Stop Loss: ", stopLoss);
int ticket = OrderSend("EURUSD", OP_BUY, 1.0, Ask, 3, stopLoss, 0, "Debug Test", 0, 0, Blue);
if(ticket < 0) {
Print("Pesanan gagal. Kode error: ", GetLastError());
}
Untuk memanfaatkan fungsi OrderSend dengan tepat, diperlukan desain yang mempertimbangkan poin-poin penting ini. Pada bagian berikutnya, ‘8. Ringkasan’, akan merangkum semua konten yang telah dibahas.

8. Ringkasan
Fungsi OrderSend MQL4 adalah fungsi inti yang mendukung otomatisasi perdagangan di MetaTrader 4, dan tidak dapat dipisahkan untuk mewujudkan strategi perdagangan yang efisien. Artikel ini menjelaskan secara rinci dari dasar hingga aplikasi fungsi OrderSend, dan mencakup pengetahuan untuk membangun program perdagangan otomatis yang sukses.
Poin Penting Fungsi OrderSend
1. Struktur Dasar Fungsi OrderSend
- Fungsi OrderSend adalah fungsi untuk mengirimkan order beli/jual dari program, dan dapat mengatur isi order secara fleksibel dengan menentukan berbagai argumen.
- Sebagai contoh, diperlukan pengaturan pasangan mata uang (
symbol
), tipe order (cmd
), jumlah lot (volume
), harga (price
), dll.
2. Jenis Tipe Order dan Skenario Penggunaannya
- Order Pasar cocok untuk melakukan order secara langsung pada harga pasar.
- Order Limit efektif untuk strategi kontra-tren, sedangkan Order Stop efektif untuk strategi tren atau breakout.
3. Pemahaman Detail Argumen
- Dengan mengatur setiap argumen (misalnya
stoploss
atautakeprofit
) dengan tepat, strategi dapat dikontrol lebih detail. - Menggunakan fungsi
NormalizeDouble
penting untuk penetapan harga yang akurat.
4. Contoh Penggunaan dan Kode Praktis
- Kami memperkenalkan contoh kode konkret untuk order pasar, limit, dan stop.
- Menunjukkan skenario penerapan untuk setiap kasus, dan menyediakan pengetahuan yang berguna untuk perdagangan nyata.
5. Penanganan Kesalahan
- Menggunakan fungsi
GetLastError
untuk mengidentifikasi kesalahan dan mengimplementasikan penanganan yang tepat berdasarkan kode kesalahan. - Menjelaskan cara menghindari kesalahan umum seperti ukuran lot, level stop, dan kekurangan margin, dengan contoh konkret.
6. Catatan Penting Saat Penggunaan
- Menjelaskan poin penting yang perlu diperhatikan dalam praktik, seperti normalisasi harga, pengaturan slippage, dan pertimbangan waktu respons server.
- Memperkenalkan tindakan praktis untuk memastikan stabilitas program, seperti manajemen magic number dan waktu perdagangan.
Nasihat untuk Memanfaatkan Fungsi OrderSend
- Perencanaan Desain
- Program yang menggunakan fungsi OrderSend perlu dirancang dengan hati-hati dengan mempertimbangkan strategi perdagangan dan manajemen risiko.
- Logging dan Debugging
- Memeriksa riwayat perdagangan dan log secara teratur, dan menanggapi cepat jika terjadi kesalahan.
- Memahami Pasar
- Periksa terlebih dahulu kondisi perdagangan broker (spread, level stop, ukuran lot, dll.) dan rancang program sesuai.
- Peningkatan Berkelanjutan
- Dengan memperbarui program secara teratur sesuai perubahan lingkungan pasar dan strategi, Anda dapat mencapai hasil yang lebih baik.
Melalui artikel ini, kami berharap pemahaman Anda tentang fungsi OrderSend menjadi lebih dalam, dan fondasi untuk membangun program MQL4 praktis telah terbentuk. Sebagai langkah berikutnya, terapkan kode yang diperkenalkan di artikel ini dan ciptakan EA (Expert Advisor) yang sesuai dengan strategi perdagangan Anda sendiri.
Kami mendukung kehidupan perdagangan otomatis yang sukses!