• Welcome back! Thank you for being a part of this Traders Community. Let's discuss and share :)
    Selamat datang kembali! Trimakasih telah menjadi bagian dari Komunitas Trader ini. Mari berdiskusi dan berbagi :)

Tutorial Buat EA Mudah Rame-rame seru (by WAME)

Yasir Arafat

Member
Credits
0
Disini ane mau kasih tips bagi para programer nubie yang memang sedang dalam tahap pembelajaran mengenai seputar coding MQL.

Oke tanpa basa basi langsung aja ke POKOK PEMBAHASAN.
sesuai dengan judul kita akan bahas cara-cara coding mudah yang biasa dipakai para programer MQL, berikut penjelasannya :

Biasanya para Programer EA sudah punya kumpulan script-script dan koding-koding di database mereka, nah oleh karena itu nanti disini ane akan share kumpulan script-script dan koding-koding yang biasa dipakai.

PEMBAHASAN 1 ===ORDER===

pada pembahasan ini kita akan bahas seputar order, kalau ane order disini ane bagi menjadi 4 macam :
1. Order langsung ( Buy / Sell )
2. Order Tidak Langsung ( Pending Buy / Sell )
3. Order Perubah ( Modify )
4. Order Penutup ( Close / Delete )

berikut codebasenya.
Paste Code ini didalam OnInit
Code:
   if(Digits==3||Digits==5){pt=Point*10;}else {pt=Point*1;}

Paste Code ini dbagian paling bawah koding
Code:
double pt;
void myOrderSend(double myAsk,double myBid,string myPair,int StepOP,double ManualPrice,int OPType,double Lots,double myStopLoss,double myTakeProfit,string myCom){
   double myPrice=0,mySL=0,myTP=0,ticket=0;
   if(OPType==0){myPrice=myAsk;//Buy
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==1){myPrice=myBid;//Sell
   if(StopLoss>0){mySL=myPrice+StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice-TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==2){if(ManualPrice==0)myPrice=myAsk-StepOP*pt;else myPrice=ManualPrice;//BuyLimit
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==3){if(ManualPrice==0)myPrice=myBid+StepOP*pt;else myPrice=ManualPrice;//SellLimit
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==4){if(ManualPrice==0)myPrice=myAsk+StepOP*pt;else myPrice=ManualPrice;//BuyStop
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==5){if(ManualPrice==0)myPrice=myBid-StepOP*pt;else myPrice=ManualPrice;//SellStop
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}
   ticket=OrderSend(myPair,OPType,Lots,myPrice,Slippage,mySL,myTP,myCom,Magic,0,clrNONE);}

Penjelasan codebase :
2. Saat ingin melakukan order tinggal panggil aja dengan mengetikkan myOrderSend(isi parameternya)
3. Semua nilai sudah dalam ukuran satuan Pips, jadi jika kita mau input stoploss 20 pips dari harga order ya tinggal diisi aja parameter Stoplossnya dengan 20.
4. Codebase diatas sudah mencakup banyak kebutuhan dari ordersend.

oke sekian dulu pembahasannya nanti dilanjut lagi.
jika ada yang mau ditanyakan silahkan ditanyakan disini atau langsung hubungi ane langsung juga bisa, welcome kapan aja bagi yang mau bertanya seputar coding simple.
 
mas untuk penggunaan order apa hanya bisa menggunakan OrderSend? apa bisa memakai perintah mql yang lainnya? sebab jika dilihat kembali di order nantinya terlihat order by expert, kalau main manual ordernya bisa menjadi order by manual?
ingin buat EA otomatis order tapi terlihat seperti main manual
 
mas untuk penggunaan order apa hanya bisa menggunakan OrderSend? apa bisa memakai perintah mql yang lainnya? sebab jika dilihat kembali di order nantinya terlihat order by expert, kalau main manual ordernya bisa menjadi order by manual?
ingin buat EA otomatis order tapi terlihat seperti main manual
kalau setahu ane sih memang menggunakan ordersend, karna kan berbasis expert.
ya memang perbedaan order manual dengan expert hanya di log pada bagian expert tidak muncul namun hanya muncul di log jurnal saja. berbeda dengan menggunakan expert yang pasti muncul di kedua log tersebut.
ngomong-ngomong memang buat broker apa om yang diharuskan menggunakan manual ?
 
Wah berat... Mau OP aja codingnya panjang bener...
Ga nyampe otaknya nih.
Ini khusus buat yang punya otak brilian gan karena menghafal koding serumit itu kalau hanya menggunakan otak mungkin akan sulit, ane juga susah kalau harus menghafal koding begitu, tapi mungkin pembuat ea juga sudah memiliki catatan tentang koding yang penting
 
Ini khusus buat yang punya otak brilian gan karena menghafal koding serumit itu kalau hanya menggunakan otak mungkin akan sulit, ane juga susah kalau harus menghafal koding begitu, tapi mungkin pembuat ea juga sudah memiliki catatan tentang koding yang penting
nah itu dia gan, mangkanya ane disini akan share kumpulan sourcecode yang pernah ane buat, agar para programer nubie tinggal comot aja dan bisa buat ea simple sendiri..
nanti juga ane akan share koding ea simple nya... jadi jangan lewatkan tread ini ya... xixiii
 
Oke kita lanjutkan pembahasannya,

masih seputar PEMBAHASAN 1 ===ORDER===
kali ini saya akan share codebase tentang modify berikut kodingnya
Paste kode berikut ini dibagian paling bawah koding
Code:
void myOrderModify(double MPrice,double MSL,double MTP,string myCom){
   if(OrderMagicNumber()==Magic&&OrderComment()==myCom){
   if(OrderType()>1){
   if(MPrice==0){MPrice=OrderOpenPrice();}}else
   if(OrderType()<=1){MPrice=OrderOpenPrice();}
   if(MSL==0){MSL=OrderStopLoss();}else 
   if(OrderType()==0||OrderType()==2||OrderType()==4){MSL=OrderOpenPrice()-MSL*pt}else {MSL=OrderOpenPrice()+MSL*pt}
   if(MTP==0){MTP=OrderTakeProfit();}else 
   if(OrderType()==0||OrderType()==2||OrderType()==4){MTP=OrderOpenPrice()+MTP*pt}else {MTP=OrderOpenPrice()-MTP*pt}}
   ticket=OrderModify(OrderTicket(),MPrice,MSL,MTP,OrderExpiration(),clrNONE);}
Penjelasan codebase :
2. Saat ingin melakukan modify tinggal panggil aja dengan mengetikkan myOrderModify(isi parameternya)
3. Semua nilai sudah dalam ukuran satuan Pips, jadi jika kita mau input stoploss 20 pips dari harga order ya tinggal diisi aja parameter Stoplossnya dengan 20.
4. Codebase diatas sudah mencakup banyak kebutuhan dari ordermodify.

oke sekian dulu pembahasannya nanti dilanjut lagi.
jika ada yang mau ditanyakan silahkan ditanyakan disini atau langsung hubungi ane langsung juga bisa, welcome kapan aja bagi yang mau bertanya seputar coding
 
Disini ane mau kasih tips bagi para programer nubie yang memang sedang dalam tahap pembelajaran mengenai seputar coding MQL.

Oke tanpa basa basi langsung aja ke POKOK PEMBAHASAN.
sesuai dengan judul kita akan bahas cara-cara coding mudah yang biasa dipakai para programer MQL, berikut penjelasannya :

Biasanya para Programer EA sudah punya kumpulan script-script dan koding-koding di database mereka, nah oleh karena itu nanti disini ane akan share kumpulan script-script dan koding-koding yang biasa dipakai.

PEMBAHASAN 1 ===ORDER===

pada pembahasan ini kita akan bahas seputar order, kalau ane order disini ane bagi menjadi 4 macam :
1. Order langsung ( Buy / Sell )
2. Order Tidak Langsung ( Pending Buy / Sell )
3. Order Perubah ( Modify )
4. Order Penutup ( Close / Delete )

berikut codebasenya.
Paste Code ini didalam OnInit
Code:
   if(Digits==3||Digits==5){pt=Point*10;}else {pt=Point*1;}

Paste Code ini dbagian paling bawah koding
Code:
double pt;
void myOrderSend(double myAsk,double myBid,string myPair,int StepOP,double ManualPrice,int OPType,double Lots,double myStopLoss,double myTakeProfit,string myCom){
   double myPrice=0,mySL=0,myTP=0,ticket=0;
   if(OPType==0){myPrice=myAsk;//Buy
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==1){myPrice=myBid;//Sell
   if(StopLoss>0){mySL=myPrice+StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice-TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==2){if(ManualPrice==0)myPrice=myAsk-StepOP*pt;else myPrice=ManualPrice;//BuyLimit
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==3){if(ManualPrice==0)myPrice=myBid+StepOP*pt;else myPrice=ManualPrice;//SellLimit
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==4){if(ManualPrice==0)myPrice=myAsk+StepOP*pt;else myPrice=ManualPrice;//BuyStop
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}else
   if(OPType==5){if(ManualPrice==0)myPrice=myBid-StepOP*pt;else myPrice=ManualPrice;//SellStop
   if(StopLoss>0){mySL=myPrice-StopLoss*pt;}else{mySL=0;}
   if(TakeProfit>0){myTP=myPrice+TakeProfit*pt;}else{myTP=0;}}
   ticket=OrderSend(myPair,OPType,Lots,myPrice,Slippage,mySL,myTP,myCom,Magic,0,clrNONE);}

Penjelasan codebase :
2. Saat ingin melakukan order tinggal panggil aja dengan mengetikkan myOrderSend(isi parameternya)
3. Semua nilai sudah dalam ukuran satuan Pips, jadi jika kita mau input stoploss 20 pips dari harga order ya tinggal diisi aja parameter Stoplossnya dengan 20.
4. Codebase diatas sudah mencakup banyak kebutuhan dari ordersend.

oke sekian dulu pembahasannya nanti dilanjut lagi.
jika ada yang mau ditanyakan silahkan ditanyakan disini atau langsung hubungi ane langsung juga bisa, welcome kapan aja bagi yang mau bertanya seputar coding simple.


Mantap bos, tapi kalau boleh mungkin boleh tambah kan sekali cara untuk di masukkan ke dalam MQL editor
 

Attachments

  • MQL.JPG
    MQL.JPG
    40.9 KB · Views: 58
gan tlg bantuin dong..... aku maubikin take profit by money jika order kebalik dari buy/sell.
begini : jika SMA96<SMA288 dan profit>$0 close all order buy
dan jika SMA96>SMA288 dan profit>$0 close all order sell. gimana caranya bos???

if(OrdersTotal()==0)
{

if((Bid > SMA12) && (SMA12 > SMA96) &&(SMA96>SMA288))
{
/*-- Order Buy --*/
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);
}
else if((Ask < SMA12) && (SMA12 < SMA96)&&(SMA96<SMA288))
{
/*-- Order Sell --*/
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);
}

}
 
Mantap.. Ane mau ikut bantu2 disini sekuat ilmu saya..
Klo malam saya bantu jawab pertanyaan2 disini.
Soalnya kata org ilmu makin diamalkan makin berkembang

gan tlg bantuin dong..... aku maubikin take profit by money jika order kebalik dari buy/sell.
begini : jika SMA96<SMA288 dan profit>$0 close all order buy
dan jika SMA96>SMA288 dan profit>$0 close all order sell. gimana caranya bos???

if(OrdersTotal()==0)
{

if((Bid > SMA12) && (SMA12 > SMA96) &&(SMA96>SMA288))
{
/*-- Order Buy --*/
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);
}
else if((Ask < SMA12) && (SMA12 < SMA96)&&(SMA96<SMA288))
{
/*-- Order Sell --*/
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);
}

}
Jdi close mau berdasar posisi indi dan nilai $ ya?
 
Mantap.. Ane mau ikut bantu2 disini sekuat ilmu saya..
Klo malam saya bantu jawab pertanyaan2 disini.
Soalnya kata org ilmu makin diamalkan makin berkembang


Jdi close mau berdasar posisi indi dan nilai $ ya?

betul gan,..... boleh kasih pencerahan?
 
betul gan,..... boleh kasih pencerahan?
kita harus bikin fungsi order close biar bisa kita gunakan saat kondisi close terpenuhi dan belum kena TP atau SL

pertama buat rule close jika...
Code:
if(SMA96<SMA288 && Profitt()>0)
  {
   CloseAll()
  }
else if(SMA96>SMA288 && Profit()>0)
  {
   CloseAll()
  }

trus buat pembacaan profit (biar swap dan komisi terbaca juga)
Code:
double Profit()
{
double _Profit =0;
for(int cnt=0;cnt<OrdersTotal();cnt++)  
   {
     if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
     {
     if(OrderMagicNumber()==magic)
         _Profit +=  OrderProfit()+ OrderSwap() + OrderCommission();
     }  
   }
   return (_Profit);
}

kemudian perintah close all

Code:
//close order
void CloseAll() {
   int close_status;
   for (int i = OrdersTotal() - 1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS))
         if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (OrderMagicNumber() == magic))
         close_status=myOrderClose(OrderTicket(),OrderLots(),OrderClosePrice());
   }
}

int myOrderClose(int orderticket, double orderlot, double orderprice) {
   bool orderclose_status = FALSE;
   for (int m = 0; m < 3; m++) {
      orderclose_status = OrderClose(orderticket, orderlot, orderprice, 5, clrRed);
      if (orderclose_status != 0) break;
      Sleep(1000);
   }
   return (orderclose_status);
}
 
Back
Top