• 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 :)

Tanya Jawab MQL

gan, mohon bantuannya, saya baru belajar coding.
ada beberapa yang perlu saya tanyakan.
1. apabila ea open buy, maka secara bersamaan ea open pending buy dan sell stop secara bersamaan.
2. apabila po buystop tereksekusi, maka ea akan buka po sellstop.

itu perintahnya gimana ya gan?
 
gan, mohon bantuannya, saya baru belajar coding.
ada beberapa yang perlu saya tanyakan.
1. apabila ea open buy, maka secara bersamaan ea open pending buy dan sell stop secara bersamaan.
2. apabila po buystop tereksekusi, maka ea akan buka po sellstop.

itu perintahnya gimana ya gan?
secara garis besar seperti ini om
Code:
int ticket;
ticket= OrderSend(Symbol(),OP_BUY,Lot,ask,slippage,SL,TP,comment,magic);
kl om ketik OrderSend di Metaeditor kan akan muncul otomatis urutan formatnya yg benar

Silahkan dicoba om, semangat terus om belajarnya
 
secara garis besar seperti ini om
Code:
int ticket;
ticket= OrderSend(Symbol(),OP_BUY,Lot,ask,slippage,SL,TP,comment,magic);
kl om ketik OrderSend di Metaeditor kan akan muncul otomatis urutan formatnya yg benar

Silahkan dicoba om, semangat terus om belajarnya
semalem saya mencoba dan terus mencoba, akhirnya sudah bisa om untuk buka po secara bersamaan dengan op.

namun sekarang yang saya bingungkan ini om.
- apabila salah satu po tereksekusi, maka po yang tidak tereksekusi akan dihapus, lalu buka po lagi dengan lot yang baru.

itu clue petintahnya gimana om?
 
semalem saya mencoba dan terus mencoba, akhirnya sudah bisa om untuk buka po secara bersamaan dengan op.

namun sekarang yang saya bingungkan ini om.
- apabila salah satu po tereksekusi, maka po yang tidak tereksekusi akan dihapus, lalu buka po lagi dengan lot yang baru.

itu clue petintahnya gimana om?
Mungkin bisa dicoba dihitung jumlah ordernya om pake ordertotal
 
semalem saya mencoba dan terus mencoba, akhirnya sudah bisa om untuk buka po secara bersamaan dengan op.

namun sekarang yang saya bingungkan ini om.
- apabila salah satu po tereksekusi, maka po yang tidak tereksekusi akan dihapus, lalu buka po lagi dengan lot yang baru.

itu clue petintahnya gimana om?
ini klunya, Jika Jumlah OpenOrder= 1(buat fungsi untuk menghitung Open order), maka delete PO dengan nomer tiketnya, lalu buka PO lagi dengan lot baru
 
ini klunya, Jika Jumlah OpenOrder= 1(buat fungsi untuk menghitung Open order), maka delete PO dengan nomer tiketnya, lalu buka PO lagi dengan lot baru

om mohon koreksinya om.
ini saya lagi belajar bikin ea dengan system inti begini.
1. apabila ea OP, maka secara bersamaan ea buka OP buy dan sell stop.
2. apabila salah satu PO tersentuh, maka PO yang tidak tersentuh akan dihapus, dan buka PO baru dg lot baru.
3. semua TP dan SL mengikuti OP yang awal.

untuk yang nomer 2, saya sudah coba dan belum sesuai om
mohon dikoreksi ya om, mana yang harus diperbaiki, sebelum saya lanjut mempelajari ordermodify.

Code:
//+------------------------------------------------------------------+
//|                                               EA belajar.mq4 |
//|                                                         Mastemon |
//|                                        facebook.com/zahrul.falah |
//+------------------------------------------------------------------+
#property copyright "Mastemon"
#property link      "facebook.com/zahrul.falah"
#property version   "1.00"
#property strict

//+------------------------------------------------------------------+
//| External Parameter                                               |
//+------------------------------------------------------------------+
extern   double   Lots        =0.01;
extern   int      TakeProfit  =30;
extern   int      StopLoss    =30;
extern   int      MagicNumber =5394;

//+------------------------------------------------------------------+
//| Internal Parameter                                               |
//+------------------------------------------------------------------+
double   lot      =2;
string   Comment  ="Testing";
double   slb,tpb,sls,tps,pt;
int      res,dpo;
int      ticket;
double   bs1,bs2,ss1,ss2;

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
//Cek Digit Broker
int init()
 {
   if(Digits==3 || Digits==5) pt=10*Point; else pt=Point;
   return(0);
 }

// fungsi order
// op buy
void Buy()
{
  ticket=OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,slb,tpb,Comment,MagicNumber,0,Blue);
}

// po buystop
void bs1()
{ticket=OrderSend(Symbol(),OP_BUYSTOP,NR(Lots)*1,OrderOpenPrice()+7*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Blue);}

void bs2()
{ticket=OrderSend(Symbol(),OP_BUYSTOP,NR(Lots)*2,OrderOpenPrice()+20*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Blue);}


void BuyStop()
{
 ticket=OrderSend(Symbol(),OP_BUYSTOP,xlot(),OrderOpenPrice()+20*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Blue);
}

// op sell
void Sell()
 {
  ticket=OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,sls,tps,Comment,MagicNumber,0,Red);
 }

// po sell stop
void ss1()
{ticket=OrderSend(Symbol(),OP_SELLSTOP,NR(Lots)*1,OrderOpenPrice()-10*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Red);}

void ss2()
{ticket=OrderSend(Symbol(),OP_SELLSTOP,NR(Lots)*2,OrderOpenPrice()-23*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Red);}


void SellStop()
{
 ticket=OrderSend(Symbol(),OP_SELLSTOP,xlot(),OrderOpenPrice()-23*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Red);
}

//Oeder Filter
int jumlahorder( int tipe)
{
int total=0;
for(int i=0;i<OrdersTotal();i++)
 {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
   if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber||OrderType()!=tipe) continue;
   total++;
  }
return(total);
}

//Lots Filter
double NR(double thelot)
{
 double maxlots = MarketInfo(Symbol(), MODE_MAXLOT),
 minilot = MarketInfo(Symbol(), MODE_MINLOT),
 lstep = MarketInfo(Symbol(), MODE_LOTSTEP);
 double lots = lstep*NormalizeDouble(thelot/lstep, 0);
 lots = MathMax(MathMin(maxlots, lots), minilot);
 return (lots);
}

//double lots
double xlot()
{
 double ylot,dlot;
  for (int i=0;i<OrdersHistoryTotal();i++)
  {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
   if(OrderSymbol()!=Symbol() || OrderComment()!=Comment)continue;
  }
   dlot=OrderLots();
  ylot=NR(dlot*lot);
  return(ylot);
 }
   
//delete po
void del()
{for(int i=OrdersTotal()-1;i>=0;i--)
   {if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
    if(OrderSymbol()!=Symbol()) continue;
    if(OrderType()>1){res=OrderDelete(OrderTicket());}
   }
}

Code:
//+------------------------------------------------------------------+
//| Open Order                                                       |
//+------------------------------------------------------------------+
int start()
{  
//Signal
double buka    =iOpen(Symbol(),PERIOD_CURRENT,1);
double tutup   =iClose(Symbol(),PERIOD_CURRENT,1);
int signal;
if(tutup>buka)     signal=1;// aturan buy
if(tutup<buka)     signal=2;//aturan sell

  {
  if(StopLoss==0)slb=0;else slb=Ask-StopLoss*pt;
  if(StopLoss==0)sls=0;else sls=Bid+StopLoss*pt;
  if(TakeProfit==0)tpb=0;else tpb=Ask+TakeProfit*pt;
  if(TakeProfit==0)tps=0;else tps=Bid-TakeProfit*pt;
//Open BUY  
      {
      if(jumlahorder(0)==0 && jumlahorder(1)==0 && signal==1)Buy();
      if(jumlahorder(4)==0 && jumlahorder(5)==0 && signal==1)bs1();
      if(jumlahorder(5)==0 && jumlahorder(1)==0 && signal==1)ss2();
      }
//Open SELL
      {
      if(jumlahorder(1)==0 && jumlahorder(0)==0 && signal==2)Sell();
      if(jumlahorder(5)==0 && jumlahorder(4)==0 && signal==2)ss1();
      if(jumlahorder(4)==0 && jumlahorder(0)==0 && signal==2)bs2();
      }
//Open Buystop
      {
      if(jumlahorder(5)==0)del();
      if(jumlahorder(4)==0 && jumlahorder(5)==0)BuyStop();
      }
//Open Sellstop
      {
      if(jumlahorder(4)==0)del();
      if(jumlahorder(5)==0 && jumlahorder(4)==0)SellStop();
      }
  }


//+------------------------------------------------------------------+
//| Informasi Akun                                                   |
//+------------------------------------------------------------------+
Comment ("\n", "-----------------------------", 
      "\n", "Testing EA", 
      "\n", "Forex Account Server :", AccountServer(),
      "\n", "Equity  = ", AccountEquity(), 
      "\n", "Balance = ", AccountBalance(), 
      "\n", "-----------------------------", 
      "\n", "Date        : ", Day(), "-", Month(), "-", Year(),
      "\n", "Server Time : ", Hour(), ":", Minute(), ":", Seconds(), 
      "\n");
 return(0);
 }
//+------------------------------------------------------------------+
 
Saya tidak koreksi intinya order pertama BuyStop dan SellStop berikan comment yang berbeda dengan order berikutnya, sehingga ketika salah satu tersentuh maka comment order yng pertama tinggal satu, dan Delete berdasarkan comment tadi, setelah di delate maka buka order berikutnya dengan comment yang beda. Sedikit Clue dari saya :)
 
bagi master yang jago coding bisa bantu untuk penambahan cut switch pada EA MA cross. jadi bila ada signal baru maka OP sebelumnya di close dan membuka order baru sesuai signal..
berikut strategi coding nya

//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
{
if(OrderMagicNumber()==MagicNumber) {int halt1=1;}
}
}
}
//-------------------------------------------------------------------+

//-------------------------------------------------------------------+
// trading strategy
//-------------------------------------------------------------------+


if(halt1!=1){// halt1

// Sell criteria
if ((MA1_bc>MA2_bc)&&(MA1_bp>MA2_bp)&&(MA1_bl<MA2_bl)) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"X trader order ",MagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}
// Buy criteria
if ((MA1_bc<MA2_bc)&&(MA1_bp<MA2_bp)&&(MA1_bl>MA2_bl)) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"X trader order ",MagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}
}// halt1

//-----------------------------------------------------------------------------------------------------
if(OrdersTotal()>0){
for(i=1; i<=OrdersTotal(); i++){ // Cycle searching in orders

if (OrderSelect(i-1,SELECT_BY_POS)==true){ // If the next is available

if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); }
if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); }

}
}
}

//-------------------------------------------------------------------+
 
bagi master yang jago coding bisa bantu untuk penambahan cut switch pada EA MA cross. jadi bila ada signal baru maka OP sebelumnya di close dan membuka order baru sesuai signal..
berikut strategi coding nya

//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
{
if(OrderMagicNumber()==MagicNumber) {int halt1=1;}
}
}
}
//-------------------------------------------------------------------+

//-------------------------------------------------------------------+
// trading strategy
//-------------------------------------------------------------------+


if(halt1!=1){// halt1

// Sell criteria
if ((MA1_bc>MA2_bc)&&(MA1_bp>MA2_bp)&&(MA1_bl<MA2_bl)) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"X trader order ",MagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}
// Buy criteria
if ((MA1_bc<MA2_bc)&&(MA1_bp<MA2_bp)&&(MA1_bl>MA2_bl)) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"X trader order ",MagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}
}// halt1

//-----------------------------------------------------------------------------------------------------
if(OrdersTotal()>0){
for(i=1; i<=OrdersTotal(); i++){ // Cycle searching in orders

if (OrderSelect(i-1,SELECT_BY_POS)==true){ // If the next is available

if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); }
if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); }

}
}
}

//-------------------------------------------------------------------+
Disini tidak ada yang jago coding mas, yang ada adalah sama sama belajar CODING, selain itu tentu permintaan untuk menambahkan CUT SWITCH tidak bisa diberikan, kecuali mas mempunyai ide awal seperti apa yang dimaksudkan, karena jika saya berikan maka sama halnya nanti tidak belajar
 
Disini tidak ada yang jago coding mas, yang ada adalah sama sama belajar CODING, selain itu tentu permintaan untuk menambahkan CUT SWITCH tidak bisa diberikan, kecuali mas mempunyai ide awal seperti apa yang dimaksudkan, karena jika saya berikan maka sama halnya nanti tidak belajar
ini udah saya tambahkan di bawah "buy criteria "tapi saya masi bingung masi ada eror d mna yah?

if(CutSwitch){
QnCloseType(Symbol(),Magic,QnRev(signal-1));
}
QnOrder(Symbol(),signal-1,myLots,mySL,myTP,Magic,Notes);
}
 
Saya tidak koreksi intinya order pertama BuyStop dan SellStop berikan comment yang berbeda dengan order berikutnya, sehingga ketika salah satu tersentuh maka comment order yng pertama tinggal satu, dan Delete berdasarkan comment tadi, setelah di delate maka buka order berikutnya dengan comment yang beda. Sedikit Clue dari saya :)
berarti untuk menghapus PO tersebut berdasarkan comment ya gan.
oke, saya coba dulu gan.
 
Untuk Delete PO yang tidak tereksekusi bermacam macam caranya, yang saya berikan adalah salah satu Teknik yang bisa di terapkan. Silahkan dicoba dan mencoba, karena jika masih GAGAL, itu artinya adalah SUKSES yang tertunda, masih ada hari besok untuk belajar dan Mencoba sampai menemukan
 
Untuk Delete PO yang tidak tereksekusi bermacam macam caranya, yang saya berikan adalah salah satu Teknik yang bisa di terapkan. Silahkan dicoba dan mencoba, karena jika masih GAGAL, itu artinya adalah SUKSES yang tertunda, masih ada hari besok untuk belajar dan Mencoba sampai menemukan
clue yang om berikan tadi sudah saya terapkan, dan berjalan seperti yang saya mau.
next, mau mempelajari ordermodify.
pelan pelan asal paham :D
 
ini udah saya tambahkan di bawah "buy criteria "tapi saya masi bingung masi ada eror d mna yah?

if(CutSwitch){
QnCloseType(Symbol(),Magic,QnRev(signal-1));
}
QnOrder(Symbol(),signal-1,myLots,mySL,myTP,Magic,Notes);
}
Pesan errornya seperti apa mas??
 
clue yang om berikan tadi sudah saya terapkan, dan berjalan seperti yang saya mau.
next, mau mempelajari ordermodify.
pelan pelan asal paham :D
mantap om...sip....
udah mas, ternyata EA nya ada versi terbaru ...jadi udah termasuk cutswitch bila signal berubah.. cuman maw tanya di compile ada tanda seru segitiga warning apa kah itu ga apa2?
setahu ane kalo cuma warning EA masih bisa jalan kok, kalo error baru agak bisa jalan om :)
 
udah mas, ternyata EA nya ada versi terbaru ...jadi udah termasuk cutswitch bila signal berubah.. cuman maw tanya di compile ada tanda seru segitiga warning apa kah itu ga apa2?
Tentu kalau ada tanda warning pasti ada yang salah, sekalipun bisa jalan tetapi itu akan mengganggu ketika EA running, walau sekarang mungkin tidak terasa
 
Last edited:
bagi master yang jago coding bisa bantu untuk penambahan cut switch pada EA MA cross. jadi bila ada signal baru maka OP sebelumnya di close dan membuka order baru sesuai signal..
berikut strategi coding nya

//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
{
if(OrderMagicNumber()==MagicNumber) {int halt1=1;}
}
}
}
//-------------------------------------------------------------------+

//-------------------------------------------------------------------+



// trading strategy
//-------------------------------------------------------------------+


if(halt1!=1){// halt1

// Sell criteria
if ((MA1_bc>MA2_bc)&&(MA1_bp>MA2_bp)&&(MA1_bl<MA2_bl)) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"X trader order ",MagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}
// Buy criteria
if ((MA1_bc<MA2_bc)&&(MA1_bp<MA2_bp)&&(MA1_bl>MA2_bl)) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"X trader order ",MagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}
}// halt1

//-----------------------------------------------------------------------------------------------------
if(OrdersTotal()>0){
for(i=1; i<=OrdersTotal(); i++){ // Cycle searching in orders

if (OrderSelect(i-1,SELECT_BY_POS)==true){ // If the next is available

if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); }
if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); }

}
}
}

//-------------------------------------------------------------------+

mungkin gini om

//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
{
if(OrderMagicNumber()==MagicNumber) {int halt1=1;}
}
}
}
//-------------------------------------------------------------------+

//-------------------------------------------------------------------+
// trading strategy
//-------------------------------------------------------------------+


if(halt1!=1){// halt1

// Sell criteria
if ((MA1_bc>MA2_bc)&&(MA1_bp>MA2_bp)&&(MA1_bl<MA2_bl)) //Signal Sell
{

for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderSymbol() != Symbol() ) continue;
if (OrderType() == 0) tk=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, CLR_NONE);
}
}

int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"X trader order ",MagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}
// Buy criteria
if ((MA1_bc<MA2_bc)&&(MA1_bp<MA2_bp)&&(MA1_bl>MA2_bl)) //Signal Buy
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderSymbol() != Symbol() ) continue;
if (OrderType() == 0) tk=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, CLR_NONE);
}
}

int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"X trader order ",MagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}
}// halt1

//-----------------------------------------------------------------------------------------------------
if(OrdersTotal()>0){
for(i=1; i<=OrdersTotal(); i++){ // Cycle searching in orders

if (OrderSelect(i-1,SELECT_BY_POS)==true){ // If the next is available

if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); }
if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); }

}
}
}

//-------------------------------------------------------------------+
 
mohon bantuannya para Suhu : saya ingin menampilkan data satu candle kebelakang, biasanya saya menggunakan fungsi iCustom seperti ini
double a = iCustom(NULL,0,"nama_indikator",0,i+1); jadi ada dua indikator, indikator A yang dipanggil dan indikator B yang memanggil.
yang saya ingin belajar bagaimana menulis code mql nya tanpa menggunakan iCustom? jadi saya perlu satu indikator saja.
atas kesempatannya saya ucapkan banyak terima kasih
 
Back
Top