http://jumforex.blogspot.com/2012/08/belajar-membuat-ea-sederhana-4.html
Untuk mengikuti ini pastikan sudah membaca part 3 di sini
Sebelum memulai ini saya mengucapkan Selamat Idhul Fitri
Sebelumnya kita sudah mencoba membuat EA yang sederhana dimana EA yang telah dibikin hanya melakukan order Buy dan order dibatasi hanya 1 yang aktif yaitu buy.
Kalau di perhatikan pada EA yang di buat pada part 3 ada beberapa kelemahan al:
di part 3 kita menggunakan:
if(OrdersTotal()==0)
yang dimaksud OrdersTotal ini adalah jumlah semua order diadalam Mt4 dari semua pair , termasuk pending order. Jadi kalau ada 1 pending buystop di EURUSD dan ada 2 buy di GBPUSD jadi jumlahnya 3 order, sehingga karena kita membuat kondisi OrdersTotal() ==0 maka total order dihitung semua order.
Ada beberapa cara untuk membuat filter pair dan saya akan bahas 2 macem cara yang umum digunakan menurut bahasa sederhana.
1. Cara langsung
Cara ini biasa dibuat skrip diatas perintah order untuk menggantikan OrdersTotal().
Skrip ini ada tinggal simpan di library sebagai scrip standar yang mungkin suatu saat dipakai lagi
int Jumlahbuy=0;
int Jumlahsell=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY) Jumlahbuy++;
if(OrderType()==OP_SELL) Jumlahsell++;
}
Nah skrip diatas merupakan skrip yang sering dipakai
int Jumlahbuy=0;
int Jumlahsell=0;
Ini merupakan variabel penghutung order , penempatan nya di ditempatkan di deklarasi (dibawah parameter yang ada extern) bisa juga di atas skrip seperti di atas.
for(int i=0; i<OrdersTotal(); i++)
Maksudnya adalah menghitung order aktif yang dimulai dari awal sampai terakhir. Kebalikan skrip ini biasannya menghitung mundur (bahasa sederhannya)
for(int i=OrdersTotal()-1; i>=0; i--)
Coba bandingkan dulu!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
ini scrip standar untuk memilih ordr aktif
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
Ini menggunakan atau (||) artinya memilih hanya pada symbul (pair) yang dan numor magic di attack jadi yang lain dari itu diabaikan
bisa juga kondisi ini menggunakan tanda dan (&&) bedanya bila menggunakan && tersebut tanda != diganti dengan == sehingga jadinya
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) continue;
Silahkan dibandingkan 2 kondisi tersebut (jangan sampai terbalik karena kalau terbalik ini tidak berfungsi. Untuk itu tinggal akan menggunakan && atau || atau keduanya dipakai
Kemudian
if(OrderType()==OP_BUY) Jumlahbuy++;
artinya membatasi order buy saja yang dihintung dinyatakan kedalam sebuah variabel Jumlahbuy
if(OrderType()==OP_SELL) Jumlahsell++;
artinya membatasi order sell saja yang dihintung dinyatakan kedalam sebuah variabel Jumlahsell
Terus gimana cara menggunakan?
Tinggal mengganti saja
if(OrdersTotal()==0) diganti dengan if(Jumlahbuy==0) bisa juga diganti dengan if(Jumlahbuy<1)
//+------------------------------------------------------------------+
//| Buy Saja.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern string Nama_EA = "Buy Saja";
extern int TP = 11;
extern int SL = 100;
extern double Lots = 0.1;
extern int Magic = 69;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Jumlahbuy=0;
int Jumlahsell=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY) Jumlahbuy++;
if(OrderType()==OP_SELL) Jumlahsell++;
}
if(Jumlahbuy==0){ OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-SL*Point, Ask+TP*Point,Nama_EA,Magic,0,Blue); }
//----
return(0);
}
//+------------------------------------------------------------------+
//----
return(0);
}
//+------------------------------------------------------------------+
Sebelum memulai ini saya mengucapkan Selamat Idhul Fitri
"Minal Aidzin wal Faizin
Mohon Maaf Lahir dan Batin"
Sebelumnya kita sudah mencoba membuat EA yang sederhana dimana EA yang telah dibikin hanya melakukan order Buy dan order dibatasi hanya 1 yang aktif yaitu buy.
Kalau di perhatikan pada EA yang di buat pada part 3 ada beberapa kelemahan al:
- Hanya bisa digunakan satu pair saja (1 pasang mata uang)
- Hanya bisa melakukan order buy
- Tidak ada batasan waktu trading
- Tidak menggunakan indikator untuk trigernya (pemicu ordernya)
di part 3 kita menggunakan:
if(OrdersTotal()==0)
yang dimaksud OrdersTotal ini adalah jumlah semua order diadalam Mt4 dari semua pair , termasuk pending order. Jadi kalau ada 1 pending buystop di EURUSD dan ada 2 buy di GBPUSD jadi jumlahnya 3 order, sehingga karena kita membuat kondisi OrdersTotal() ==0 maka total order dihitung semua order.
Ada beberapa cara untuk membuat filter pair dan saya akan bahas 2 macem cara yang umum digunakan menurut bahasa sederhana.
1. Cara langsung
Cara ini biasa dibuat skrip diatas perintah order untuk menggantikan OrdersTotal().
Skrip ini ada tinggal simpan di library sebagai scrip standar yang mungkin suatu saat dipakai lagi
int Jumlahbuy=0;
int Jumlahsell=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY) Jumlahbuy++;
if(OrderType()==OP_SELL) Jumlahsell++;
}
Nah skrip diatas merupakan skrip yang sering dipakai
int Jumlahbuy=0;
int Jumlahsell=0;
Ini merupakan variabel penghutung order , penempatan nya di ditempatkan di deklarasi (dibawah parameter yang ada extern) bisa juga di atas skrip seperti di atas.
for(int i=0; i<OrdersTotal(); i++)
Maksudnya adalah menghitung order aktif yang dimulai dari awal sampai terakhir. Kebalikan skrip ini biasannya menghitung mundur (bahasa sederhannya)
for(int i=OrdersTotal()-1; i>=0; i--)
Coba bandingkan dulu!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
ini scrip standar untuk memilih ordr aktif
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
Ini menggunakan atau (||) artinya memilih hanya pada symbul (pair) yang dan numor magic di attack jadi yang lain dari itu diabaikan
bisa juga kondisi ini menggunakan tanda dan (&&) bedanya bila menggunakan && tersebut tanda != diganti dengan == sehingga jadinya
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) continue;
Silahkan dibandingkan 2 kondisi tersebut (jangan sampai terbalik karena kalau terbalik ini tidak berfungsi. Untuk itu tinggal akan menggunakan && atau || atau keduanya dipakai
Kemudian
if(OrderType()==OP_BUY) Jumlahbuy++;
artinya membatasi order buy saja yang dihintung dinyatakan kedalam sebuah variabel Jumlahbuy
if(OrderType()==OP_SELL) Jumlahsell++;
artinya membatasi order sell saja yang dihintung dinyatakan kedalam sebuah variabel Jumlahsell
Terus gimana cara menggunakan?
Tinggal mengganti saja
if(OrdersTotal()==0) diganti dengan if(Jumlahbuy==0) bisa juga diganti dengan if(Jumlahbuy<1)
Jadinya EAnya sbb:
//+------------------------------------------------------------------+
//| Buy Saja.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern string Nama_EA = "Buy Saja";
extern int TP = 11;
extern int SL = 100;
extern double Lots = 0.1;
extern int Magic = 69;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Jumlahbuy=0;
int Jumlahsell=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY) Jumlahbuy++;
if(OrderType()==OP_SELL) Jumlahsell++;
}
if(Jumlahbuy==0){ OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-SL*Point, Ask+TP*Point,Nama_EA,Magic,0,Blue); }
//----
return(0);
}
//+------------------------------------------------------------------+
Nah EA diatas sudah bisa dipakai di semua pair
Mudahkan?
2. Menggunakan Fungsi
Jadi selain menggunakan cara langsung pada bagian 1 bisa juga digunakan fungsi.
Fungsi ini menentukan nilai yang biasanya ditempatkan diluar int start().
Karena jumlah order ini merupakan bilangan bulat tidak berkoma maka digunakan integer (int).
coba perhatikan!
int jumlahorder( int tipe)
{
int total=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue;
total++;
}
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue;
total++;
}
return(total) ;
}
Ini merupakan skrip untuk filter order menggunakan fungsi .
Cara menggunkan nya
jumlahorder(OP_BUY) ini merupakan jumlah buy
jumlahorder(OP_SELL) ini merupakan jumlah sell
jumlahorder(OP_BUYSTOP) ini merupakan jumlah pending order Buystop
dst....
Type order bisa juga dinyatakan dalam bilangan
OP_BUY = 0
OP_SELL = 1
OP_BUYLIMIT = 2
OP_SELLLIMIT = 3
OP_BUYSTOP = 4
OP_SELLSTOP = 5
Sehingga
jumlahorder(OP_BUY) bisa ditulis juga jumlahorder(0)
demikian juga untuk jumlahorder(OP_SELL) bisa ditulis jumlahorder(1)
Sehingga pada EA diatas bisa diganti
if(Jumlahbuy==0) menjadi if(jumlahorder(OP_BUY)==0) atau if(jumlahorder(0)==0)
Dan kalau masukan ke dalam EAnya
//+------------------------------------------------------------------+
//| Buy Saja.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern string Nama_EA = "Buy Saja";
extern int TP = 11;
extern int SL = 100;
extern double Lots = 0.1;
extern int Magic = 69;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(jumlahorder(0)==0) { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-SL*Point, Ask+TP*Point,Nama_EA,Magic,0,Blue); }//| Buy Saja.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern string Nama_EA = "Buy Saja";
extern int TP = 11;
extern int SL = 100;
extern double Lots = 0.1;
extern int Magic = 69;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
int jumlahorder( int tipe)
{
int total=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue;
total++;
}
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue;
total++;
}
return(total) ;
}
Nah silahkan di Compile hasil dari pembuatan terebut bila sukses berarti EA terebut sudah bisa digunakan, tapi bila masih ada errornya maka silahkan dikoreksei ulang mulai dari awal dan bandingkan dengan hasil di atas (copykan hasil di atas ke metaeditor ).
Semoga sukses
Jangan lupa kasih komen masukan ya untuk memudahkan belajar membuat EA sederhana terebut.
Disini saya berupaya menguraikan dengan bahasa saya yang sederhana dan bukan bahasa seorang yang belajar dari ilmu programer jadi mudah2 an mudah dipahami dan bila ada kekurangan yah harap maklum, tapi ini didasari dengan niat yang tulus saling belajar dan memajukan trader Indonesia.
Salam Profit semuanya
sampai jumpa di part 5
Hello Everybody,
ReplyDeleteBelow is a list of the highest ranking forex brokers:
1. Most Recommended Forex Broker
2. eToro - $50 min. deposit.
Here is a list of money making forex instruments:
1. ForexTrendy - Recommended Probability Software.
2. EA Builder - Custom Indicators Autotrading.
3. Fast FX Profit - Secret Forex Strategy.
I hope you find these lists helpful...
If you would like an alternative to randomly flirting with girls and trying to figure out the right thing to say...
ReplyDeleteIf you'd prefer to have women chase YOU, instead of spending your nights prowling around in crowded bars and night clubs...
Then I encourage you to view this short video to uncover a strong secret that might get you your own harem of sexy women:
Facebook Seduction System...