• 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

 
Code:
double envelope=iEnvelopes(NULL,0,4,0,0,0,0.07,1,1);//Upper envelope 4 dev 0.07 shift 1
double close=iClose(NULL,0,1);//candle close shift 1
if(close>envelope)
{
Alert("breakout envelope upper"+Symbol());//gimana agar Alert hanya sekali?

mau tanya master,
gimana caranya agar Alertnya cuma sekali?
 
Saya belajar sedikit-sedikit cara membuat coding, Apa bedanya coding seperti ini:

for(int i=OrdersTotal()-1; i>=0; i--){
if( !OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()!=mySym
||OrderMagicNumber()!=myMagic) continue;

dengan yang ini:
for(int i=OrdersTotal()-1; i>=0; i--){
if( OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()==mySym
||OrderMagicNumber()==myMagic) continue;

saya berharap ada yang mau menjelaskannya? trm kash sblumnya
 
tp ea smulator ini bs sayang dia trial hanya 5 openan
 
Ea tersebut bs berfungsi latihan dengan rule yng kita punya sampai betul2 hafal dengan rulenya, ea tsb berlaku juga di backtest
 

double newStopLoss=0.0;
int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Stop<StopLevel)Stop=StopLevel;
for (int i = OrdersTotal() - 1; i >= 0; i--){
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber ) continue;
if(OrderType()==OP_BUY) {
newStopLoss=Bid-(Stop*Point);
if(Bid-OrderOpenPrice()>Point*Stop) {
if((OrderStopLoss()<Bid-Point*Stop) || (OrderStopLoss()==0)) {
if(OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0,clrNONE)==false)
{
return(false);
}else
{
return(true);
}
}
}
}
if(OrderType()==OP_SELL) {
newStopLoss=Ask+(Stop*Point);
if((OrderOpenPrice()-Ask)>(Point*Stop)){
if(OrderStopLoss()>Ask+(Point*Stop) || (OrderStopLoss()==0)){
if(OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0,clrNONE)==false)
{
return(false);
}else
{
return(true);
}
}
}
}
}
silahkan koreksi jika ad kekurangan

kenapa returnnya bernilai false?

saya juga ada script trailing
Code:
void dtrailing()
{
for(int i=0; i<OrdersTotal(); i++){
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magicbuy || OrderMagicNumber()!=magicsell ) continue;
        if(OrderType()==OP_BUY)  {
         if(Bid-OrderOpenPrice()>pt*TrailingStop)  {
           if((OrderStopLoss()<Bid-pt*TrailingStop) || (OrderStopLoss()==0)) {
              OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pt*TrailingStop,OrderTakeProfit(),0,Green);
              return(0);
              }
              }
           }
        if(OrderType()==OP_SELL)  {
         if((OrderOpenPrice()-Ask)>(pt*TrailingStop)){
           if(OrderStopLoss()>(Ask+pt*TrailingStop) || (OrderStopLoss()==0)){
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+pt*TrailingStop,OrderTakeProfit(),0,Red);
              return(0);
              }
              }
           }
     }
 
}

kurang lebih sama.. cuma klo saya taruh di global dalam bentuk void.. selalu ada error di return
 
bantu jawab semampunya
Saya belajar sedikit-sedikit cara membuat coding, Apa bedanya coding seperti ini:

for(int i=OrdersTotal()-1; i>=0; i--){
if( !OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()!=mySym
||OrderMagicNumber()!=myMagic) continue;

dengan yang ini:
for(int i=OrdersTotal()-1; i>=0; i--){
if( OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()==mySym
||OrderMagicNumber()==myMagic) continue;

saya berharap ada yang mau menjelaskannya? trm kash sblumnya
perbedaanya ada di ==(sama dengan) dan !=(ngak sama dengan).
dari scrip di atas gunanya untuk melompati beberapa pilihan yang gak di inginkan dari hasil looping,
 
bantu jawab semampunya

perbedaanya ada di ==(sama dengan) dan !=(ngak sama dengan).
dari scrip di atas gunanya untuk melompati beberapa pilihan yang gak di inginkan dari hasil looping,

Kalau == (sama dengan) dan !=(ngak sama dengan) saya sudh cukup jelas gan. cuman dampaknya jika jika EA ini di pasang di satu pair atau beberapa pair yang saya belum mengerti gan.

misal scrip ini:
if( !OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()!=mySym
||OrderMagicNumber()!=myMagic) continue;

penjelasan berdasarkan pengetahuan saya : jika tidak orderselect/orderselect gagal atau OrderSymbol() tidak sama dengan mySym atau OrderMagicNumber() tidak sama dengan myMagic, maka continue.

pertanyaannya :

1. Mengapa harus dibuat (!OrderSelect(i,SELECT_BY_POS)), jika dibuat seperti ini (OrderSelect(i,SELECT_BY_POS)) tidak pakai tanda"!" apa dampaknya?
2. Mengapa harus orderselectnya gagal (!OrderSelect(i,SELECT_BY_POS)), kalau gagal berarti gak diselec dong?
3. Jika dibuat seperti ini :if(OrderSymbol()!=mySy ||OrderMagicNumber()!=myMagic) apa dampaknya?
4. Jika dibuat seperti ini :if(OrderSymbol()==mySy ||OrderMagicNumber()==myMagic) apa dampaknya?

mohon penjelasannya master, sebelumnya diducapkan terima kasih
 
lha ini saya juga kurang tahu gan :D,
kalo saya sih suka pake yang no empat :lipssealed:,
semoga ada master yang bersedia menjelaskan,
ini contoh coddingan orang bule silahkan diresapi komen2nya.
Code:
void sub_Check4StrayTrades()
{
    // Initiate some local variables
    int loop;
    int totals;
    bool modified = TRUE;
    bool selected;
    double ordersl;
    double newsl;
   
    // New SL to use for modifying stray market orders is max of either current SL or 10 points
    newsl = MathMax ( StopLoss, 10 );
    // Get number of open orders
    totals = OrdersTotal();

    // Loop through all open orders from first to last
   for ( loop = 0; loop < totals; loop ++ )
    {
        // Select on order
        if ( OrderSelect ( loop, SELECT_BY_POS, MODE_TRADES ) )
        {
           // Check if it matches the MagicNumber and chart symbol
         if ( OrderMagicNumber() == Magic && OrderSymbol() == Symbol() )    // If the orders are for this EA
           {   
                ordersl = OrderStopLoss();
                // Continue as long as the SL for the order is 0.0
                while ( ordersl == 0.0 )
                {
                    // We have found a Buy-order
                    if ( OrderType() == OP_BUY )
                    {
                        // Set new SL 10 points away from current price
                        newsl = Bid - newsl * Point;
                        modified = OrderModify ( OrderTicket(), OrderOpenPrice(), NormalizeDouble ( newsl, Digits ), OrderTakeProfit(), 0, Blue );
                    }
 
menurut newbie untuk tanda ! pada fungsi bool itu untuk menggantikan false,
bool fungsi();
if(bool fungsi == false){bla bla bla;} gan.
biar simple di tulis langsung if(!bool fungsi){bla bla bla;}
atau bool fungsi();
if(!bool fungsi){bla bla bla;}
tanda ! menunjukan nilai false gan.
 
 
Code:
double envelope=iEnvelopes(NULL,0,4,0,0,0,0.07,1,1);//Upper envelope 4 dev 0.07 shift 1
double close=iClose(NULL,0,1);//candle close shift 1
if(close>envelope)
{
Alert("breakout envelope upper"+Symbol());//gimana agar Alert hanya sekali?

mau tanya master,
gimana caranya agar Alertnya cuma sekali?
belum ada yang mampir nih,colek om HendroFx
 
Kalau == (sama dengan) dan !=(ngak sama dengan) saya sudh cukup jelas gan. cuman dampaknya jika jika EA ini di pasang di satu pair atau beberapa pair yang saya belum mengerti gan.

misal scrip ini:
if( !OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()!=mySym
||OrderMagicNumber()!=myMagic) continue;

penjelasan berdasarkan pengetahuan saya : jika tidak orderselect/orderselect gagal atau OrderSymbol() tidak sama dengan mySym atau OrderMagicNumber() tidak sama dengan myMagic, maka continue.

pertanyaannya :

1. Mengapa harus dibuat (!OrderSelect(i,SELECT_BY_POS)), jika dibuat seperti ini (OrderSelect(i,SELECT_BY_POS)) tidak pakai tanda"!" apa dampaknya?
2. Mengapa harus orderselectnya gagal (!OrderSelect(i,SELECT_BY_POS)), kalau gagal berarti gak diselec dong?
3. Jika dibuat seperti ini :if(OrderSymbol()!=mySy ||OrderMagicNumber()!=myMagic) apa dampaknya?
4. Jika dibuat seperti ini :if(OrderSymbol()==mySy ||OrderMagicNumber()==myMagic) apa dampaknya?

mohon penjelasannya master, sebelumnya diducapkan terima kasih
Pertanyaan yang bagus, dan memang perlu mengerti dasar dari perintah

if( !OrderSelect(i,SELECT_BY_POS)
||OrderSymbol()!=mySym
||OrderMagicNumber()!=myMagic) continue;

Perintah itu mempunyai arti:
1. Jika Posisi i gagal memilih maka lanjutkan pilih nomor order berikutnya
2. Jika Symbol tidak sama dengan simbol dimana EA di pakai maka lanjutkan berikutnya
3. Jika magicnumbernya berbeda debgan magicNUmber EA yang sedang Running maka lanjutkan untuk memilih yang lain

Sehingga dengan perintah di atas memaksa EA untuk memilih Simbol dimana EA sedang runing dan MagicNumber yang sedang digunakan. :)
 
Tolong bantuin master, kenapa pas ada signal BUY/SELL EAnya melakukan OP terus menerus tanpa henti, padahal sudah dibuat TotalOPBuy<1 && TotalOPSell<1? trim kash atas bantuanya

code:

int Slipage = 0;
int Magic = 1234;
double Over_Sold = 29.50;
double Over_Bought = 30.00;


void OnTick()
{
int TotalOPBuy = 0, TotalOPSell = 0; //ini ditaruh di Deklarasi Global
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderType()==OP_BUY){TotalOPBuy++;}
if(OrderType()==OP_SELL){TotalOPSell++;}}}

double RSI =NormalizeDouble(iRSI(Symbol(),0,14,PRICE_CLOSE,0),2);
if(TotalOPBuy<1 && TotalOPSell<1){
if(RSI <= Over_Sold )
{
QnOrder(Symbol(),OP_BUY,0.01,500,500,0,"",0);
}}

if(RSI >= Over_Bought )
{
QnOrder(Symbol(),OP_SELL,0.01,500,500,0,"",0); }

//====================================================
void QnOrder(string mySym, int myCMD, double myLots, int myTP=0, int mySL=0, int myMagic=0,string myNotes="", int myPendingPips=0){

double myPrice = 0,pTP=0,pSL=0;
double myPoint = MarketInfo(mySym,MODE_POINT);

switch(myCMD){
case OP_BUY:
myPrice = Ask;
pSL = myPrice-mySL*myPoint;
pTP = myPrice+myTP*myPoint;
break;
case OP_SELL:
myPrice = Bid;
pSL = myPrice+mySL*myPoint;
pTP = myPrice-myTP*myPoint;
break;
case OP_BUYLIMIT:
myPrice = Ask-myPendingPips*myPoint;
pSL = myPrice-mySL*myPoint;
pTP = myPrice+myTP*myPoint;
break;
case OP_SELLLIMIT:
myPrice = Bid+myPendingPips*myPoint;
pSL = myPrice+mySL*myPoint;
pTP = myPrice-myTP*myPoint;
break;
case OP_BUYSTOP:
myPrice = Ask+myPendingPips*myPoint;
pSL = myPrice-mySL*myPoint;
pTP = myPrice+myTP*myPoint;
break;
case OP_SELLSTOP:
myPrice = Bid-myPendingPips*myPoint;
pSL = myPrice+mySL*myPoint;
pTP = myPrice-myTP*myPoint;
break;
}
if(myTP==0) pTP=0;
if(mySL==0) pSL=0;
int myTicket = OrderSend(mySym,myCMD,myLots,myPrice,Slipage,0,0,myNotes,myMagic);
if(myTicket>0 && OrderSelect(myTicket,SELECT_BY_TICKET)){
bool rModify = OrderModify(OrderTicket(),OrderOpenPrice(),pSL,pTP,0);
}
}
 
Tolong bantuin master, kenapa pas ada signal BUY/SELL EAnya melakukan OP terus menerus tanpa henti, padahal sudah dibuat TotalOPBuy<1 && TotalOPSell<1? trim kash atas bantuanya

code:

int Slipage = 0;
int Magic = 1234;
double Over_Sold = 29.50;
double Over_Bought = 30.00;


void OnTick()
{
int TotalOPBuy = 0, TotalOPSell = 0; //ini ditaruh di Deklarasi Global
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderType()==OP_BUY){TotalOPBuy++;}
if(OrderType()==OP_SELL){TotalOPSell++;}}}

double RSI =NormalizeDouble(iRSI(Symbol(),0,14,PRICE_CLOSE,0),2);
if(TotalOPBuy<1 && TotalOPSell<1){
if(RSI <= Over_Sold )
{
QnOrder(Symbol(),OP_BUY,0.01,500,500,0,"",0);
}}

if(RSI >= Over_Bought )
{
QnOrder(Symbol(),OP_SELL,0.01,500,500,0,"",0); }

//====================================================
void QnOrder(string mySym, int myCMD, double myLots, int myTP=0, int mySL=0, int myMagic=0,string myNotes="", int myPendingPips=0){

double myPrice = 0,pTP=0,pSL=0;
double myPoint = MarketInfo(mySym,MODE_POINT);

switch(myCMD){
case OP_BUY:
myPrice = Ask;
pSL = myPrice-mySL*myPoint;
pTP = myPrice+myTP*myPoint;
break;
case OP_SELL:
myPrice = Bid;
pSL = myPrice+mySL*myPoint;
pTP = myPrice-myTP*myPoint;
break;
case OP_BUYLIMIT:
myPrice = Ask-myPendingPips*myPoint;
pSL = myPrice-mySL*myPoint;
pTP = myPrice+myTP*myPoint;
break;
case OP_SELLLIMIT:
myPrice = Bid+myPendingPips*myPoint;
pSL = myPrice+mySL*myPoint;
pTP = myPrice-myTP*myPoint;
break;
case OP_BUYSTOP:
myPrice = Ask+myPendingPips*myPoint;
pSL = myPrice-mySL*myPoint;
pTP = myPrice+myTP*myPoint;
break;
case OP_SELLSTOP:
myPrice = Bid-myPendingPips*myPoint;
pSL = myPrice+mySL*myPoint;
pTP = myPrice-myTP*myPoint;
break;
}
if(myTP==0) pTP=0;
if(mySL==0) pSL=0;
int myTicket = OrderSend(mySym,myCMD,myLots,myPrice,Slipage,0,0,myNotes,myMagic);
if(myTicket>0 && OrderSelect(myTicket,SELECT_BY_TICKET)){
bool rModify = OrderModify(OrderTicket(),OrderOpenPrice(),pSL,pTP,0);
}
}
Karena penghitungan order buy dan sell tidak benar, maka EA tidak bisa melakukan filter pembatasan order.
 
master mw minta tolong dong script untuk memilih op terakhir dan syaratnya lebih waktu open lebih dari 5 menit
 
I need help and Please .
I'm have a trade copier but i want to to add a stochastic filter into it so that the trade copier uses a stochastic to filter its trades before copying to slave.

The Stochastic should be adjustable,
When the Stochastic is in overbought area (should be from 55 -100) copier will copy only sell orders at this point of time
When the Stochastic is in oversold should be 0 - 45 (copier will copy only buy orders at this point of time)
unmatched Trades should be either filtered or reversed.

Neutral area.
This is the region between the overbought and the oversold area.
Therefore trades located between 45-55 will always be ignored , and can never be reversed even when the reverse option for the umatched trades is switched on.

I'm hoping and praying someone to help :whew: ,I will humbly appreciate. Thanks


View attachment 20419

To get help open up a new thread, since the topic here is basically coding language
 
Para master coding EA saya mau tanya, gimana cara untuk mengunci EA supaya hanya bisa digunakan untuk akun real tertentu tapi bisa digunakan untuk semua akun demo, mohon bantuannya ya..
 
Untuk bertanya tidak perlu minta maaf, karena agan tidak bersalah kepada saya :)
fungsi ini bertujuan untuk mencari CANDLE KE BERAPA PALING TINGGI DARI 10 CANDEL , jika Candel target di isi 10.
iHighest (PAIR yang akan digunakan, Time Frame berapa, MODE yang akan dipakai, Cendle Target akir, Cendel Start Memulai )
CONTOH.
Code:
int fHigh = iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,10,1);
  double fHigest=iHigh(Symbol(), PERIOD_CURRENT,fHigh);
   // Untuk melihat hasilnya, gunakan Alert saja
   Alert (fHigest);
 
Back
Top