BTC USD 80,819.5 Gold USD 4,353.00
Time now: Jun 1, 12:00 AM

Belajar Coding EA (mql) asas

salam masta aiman..

sori sye terpaksa ambik contoh indi tuan..

nk tnye.. ni pasal array...konpius gk..



Code:
for(i=0;i<ArraySize(iPairs);i++)
 {
  for(int j=i;j<ArraySize(iPairs);j++)
  {
   if((tradetype==1 && profitbuy[j]<profitbuy[i]) || (tradetype==2 && profitsell[j]<profitsell[i]))
   {
    strTemp=symbol[i]; // <<< ----ni ape  makne ek
    symbol[i]=symbol[j];
    symbol[j]=strTemp;

    dblTemp=openbuy[i];// <<< ----ni ape  makne ek
    openbuy[i]=openbuy[j]; // <<< ----ni ape  makne ek
    openbuy[j]=dblTemp;               

    dblTemp=closebuy[i];
    closebuy[i]=closebuy[j];
    closebuy[j]=dblTemp;               

    dblTemp=opensell[i];
    opensell[i]=opensell[j];
    opensell[j]=dblTemp;               

    dblTemp=closesell[i];
    closesell[i]=closesell[j];
    closesell[j]=dblTemp;          

    dblTemp=pipsbuy[i];
    pipsbuy[i]=pipsbuy[j];
    pipsbuy[j]=dblTemp;               

    dblTemp=pipssell[i];
    pipssell[i]=pipssell[j];
    pipssell[j]=dblTemp;               

    dblTemp=profitbuy[i];
    profitbuy[i]=profitbuy[j];
    profitbuy[j]=dblTemp;               

    dblTemp=profitsell[i];
    profitsell[i]=profitsell[j];
    profitsell[j]=dblTemp;      
    
    dblTemp=spread[i];
    spread[i]=spread[j];
    spread[j]=dblTemp;         
   }
  }
 }


npe i j ade kurungan []


sye tau ini untuk paparkan susunan pair ikut size...

tapi ape yg banyak sgt baris tuh..?

Pembetulan. Coding ni asalnya bukan saya punya, tapi masta tempe punya. Saya copy paste masuk indi saya. :D

Tujuannya, bila saya ada 2 atau lebih array sebagai contoh. Saya nak sorting array yang pertama, dan dalam masa yang sama, array yang lain ikut susunan array yang pertama, sebabtu banyak baris.
 
bro aiman, tanyer sikit..

macamana yerk nak coding..buat Take Profit macam ni,
(beza post pertama dengan post terakhir)/2

dan semua TP tu di modify jadi sama jer..
dah cuba buat tapi dop jadi ah..

Thanks

Yang ini merupakan script, tapi nak run sebagai ea pun boleh. Baru buat tapi tak le nak test sebab market close. Bro cuba test.

Berfungsi bila ada 2 atau lebih pos buy atau 2 atau lebih pos sell.

Code:
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   double buyPriceHighest =0;
   double buyPriceLowest  =0;
   double sellPriceHighest=0;
   double sellPriceLowest =0;
   
   // dapatkan price highest dan lowest untuk buy dan sell
   // 4 price sebab buy dan sell mesti separate

   int i;
   for (i=0; i<OrdersTotal(); i++)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol()!=Symbol()) continue;
      
      if (OrderType()==OP_BUY)
      {
         if (buyPriceHighest==0)
         {
            buyPriceHighest=OrderOpenPrice();
            buyPriceLowest=OrderOpenPrice();
         }
         else
         {
            buyPriceHighest=MathMax(buyPriceHighest,OrderOpenPrice());
            buyPriceLowest=MathMin(buyPriceLowest,OrderOpenPrice());
         }
      }  

      else if (OrderType()==OP_SELL)
      {
         if (sellPriceHighest==0)
         {
            sellPriceHighest=OrderOpenPrice();
            sellPriceLowest=OrderOpenPrice();
         }
         else
         {
            sellPriceHighest=MathMax(sellPriceHighest,OrderOpenPrice());
            sellPriceLowest=MathMin(sellPriceLowest,OrderOpenPrice());
         }
      }
   }
   // ------
   
   // dapatkan price tengah2 antara highest price dan lowest price (untuk buy pos sahaja)
   double buyTakeProfitPrice = 0;
   if (buyPriceHighest>buyPriceLowest)
   {
      buyTakeProfitPrice=buyPriceHighest-((buyPriceHighest-buyPriceLowest)/2);
      buyTakeProfitPrice=NormalizeDouble(buyTakeProfitPrice,Digits);
   }
   else
   {
      buyTakeProfitPrice=0;
   }
   // -----
   
   
   // dapatkan price tengah2 antara highest price dan lowest price (untuk sell pos sahaja)
   double sellTakeProfitPrice = 0;
   if (sellPriceHighest>sellPriceLowest)
   {
      sellTakeProfitPrice=sellPriceHighest-((sellPriceHighest-sellPriceLowest)/2);
      sellTakeProfitPrice=NormalizeDouble(sellTakeProfitPrice,Digits);
   }
   else
   {
      sellTakeProfitPrice=0;
   }


   // check semua order buy, dan modify takeprofit
   // buyTakeProfitPrice = merupakan price untuk buy takeprofit 
   if (buyTakeProfitPrice!=0)
   {
      for(i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol()!=Symbol() || OrderType()!=OP_BUY) continue;
         if (OrderTakeProfit()!=buyTakeProfitPrice)
         {
            if (buyTakeProfitPrice>Ask)
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),buyTakeProfitPrice,0,CLR_NONE);
         }
      }
   }

   // check semua order sell, dan modify takeprofit 
   // sellTakeProfitPrice = merupakan price untuk sell takeprofit 
   if (sellTakeProfitPrice!=0)
   {
      for(i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol()!=Symbol() || OrderType()!=OP_SELL) continue;
         if (OrderTakeProfit()!=sellTakeProfitPrice)
         {
            if (sellTakeProfitPrice<Bid)
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),sellTakeProfitPrice,0,CLR_NONE);
         }
      }
   }   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Last edited:
daripada contoh bro tempe,
Save ini sebagai script

Code:
int start ()
{
   int i;
   string mySymbol[] = {"EURUSD","EURJPY","USDJPY"};
   int mySpread[3]; // initialize mySpread dengan size array adalah 3.

   for(i=0;i<ArraySize(mySymbol);i++)
   {
      mySpread[i] = MarketInfo(mySymbol[i],MODE_SPREAD);
   }

   string textComment;

   for (i=0; i<3; i++)
   {
      textComment = textComment + mySymbol[i] + ", spread =  " + mySpread[i] + "\n";
   }
   
   Comment (textComment);

   return (0);
}

run dan lihat comment belah kiri atas..

kemudian tambahkan yang warna merah

Code:
int start ()
{
   int i;
   string mySymbol[] = {"EURUSD","EURJPY","USDJPY"};
   int mySpread[3]; // initialize mySpread dengan size array adalah 3.

   for(i=0;i<ArraySize(mySymbol);i++)
   {
      mySpread[i] = MarketInfo(mySymbol[i],MODE_SPREAD);
   }

   [COLOR="Red"]double dblTemp;
   string strTemp;
   int j;

   for (i=0; i<3; i++)
   {
      for (j=i; j<3; j++)
      {
         if (mySpread[i]>mySpread[j])
         {
            strTemp=mySymbol[i];
            mySymbol[i]=mySymbol[j];
            mySymbol[j]=strTemp;

            dblTemp=mySpread[i];
            mySpread[i]=mySpread[j];
            mySpread[j]=dblTemp;
         }
      }
   }[/COLOR]
   
   string textComment;

   for (i=0; i<3; i++)
   {
      textComment = textComment + mySymbol[i] + ", spread =  " + mySpread[i] + "\n";
   }
   
   Comment (textComment);

   return (0);
}

run sekali lagi, perbezaannya kali ini array tersusun mengikut nilai spread.
 
Ini adalah nota ringkas untuk buat EA. Step-by-step basic jer... Still in English, tapi English mudah... broken English...

Selamat mencuba...

Download di sini.
 
cam ne kalau dalam array ada..aku tngok ade EA yg cam ni..

cth:

strTemp=mySymbol[i + 5];
mySymbol[i + 10]=mySymbol[j + 1];
mySymbol[j + 30]=strTemp;

tu ape ek.?

dalam kurungn [] ada tambah lagi...
 
Last edited:
cam ne kalau dalam array ada..aku tngok ade EA yg cam ni..

cth:

strTemp=mySymbol[i + 5];
mySymbol[i + 10]=mySymbol[j + 1];
mySymbol[j + 30]=strTemp;

tu ape ek.?

dalam kurungn [] ada tambah lagi...

Mana plak bro dapat code ni, Pelik rupanya
nampaknya var strTemp tu tak perlu pun takpe
line 1 dan 3, takde kena mengena dengan line 2

[STRIKE]strTemp[/STRIKE]=mySymbol[i + 5];
mySymbol[i + 10]=mySymbol[j + 1];
mySymbol[j + 30]=[STRIKE]strTemp[/STRIKE];

sama dengan bawah ni

mySymbol[i + 10]=mySymbol[j + 1];
mySymbol[j + 30]=mySymbol[i + 5];


andaikata i=1 dan j=2 bermaksud bro nak samakan nilai mySymbol[11] dengan mySymbol[3]
dan mySymbol[32] dengan mySymbol[6]

yang dalam square bracket [] tu merupakan position value dalam array, nilai mesti integer
 
ni contoh penggunaan 2D array. Komplikated sket...

Disclaimer : sebarangan kerosakan mental setelah cuba memahamkan code di bawah adalah tanggungjawab sendiri... :)

Code:
    if(iHigh(thisPair[iPair],0,i-1)>emaVal1 && iLow(thisPair[iPair],0,i-1)<emaVal1 && iLow(thisPair[iPair],0,i)>emaVal2 && iLow(thisPair[iPair],0,i+1)>emaVal3)
   {
      while((iLow(thisPair[iPair],0,i)>iMA(thisPair[iPair],0,MA_Period,0,MA_Mode,PRICE_CLOSE,i) || iHigh(thisPair[iPair],0,i)>iHigh(thisPair[iPair],0,i-1)) && i<WindowBarsPerChart())
      {
         i++;
      }
      
      bar2=iHighest(thisPair[iPair],0,MODE_HIGH,i-1,1);
      bar1=iHighest(thisPair[iPair],0,MODE_HIGH,WindowBarsPerChart()-1,1);
      
      if(bar1==bar2)
      {
         bar1=bar2+10;
         time1=iTime(thisPair[iPair],0,bar1);
         time2=iTime(thisPair[iPair],0,bar2);
         price1=iHigh(thisPair[iPair],0,bar2);
         price2=iHigh(thisPair[iPair],0,bar2);
      }
      else
      {
         for(i=bar1;i>bar2;i--)
         {
            if(bar1-bar2!=0) priceNow=iHigh(thisPair[iPair],0,bar1)-(iHigh(thisPair[iPair],0,bar1)-iHigh(thisPair[iPair],0,bar2))/(bar1-bar2)*(bar1-i);
            if(iHigh(thisPair[iPair],0,i)>priceNow) bar1=i;  
         }
         for(i=bar2;i>0;i--)
         {
            if(bar1-bar2!=0) priceNow=iHigh(thisPair[iPair],0,bar1)-(iHigh(thisPair[iPair],0,bar1)-iHigh(thisPair[iPair],0,bar2))/(bar1-bar2)*(bar1-i);
            if(iHigh(thisPair[iPair],0,i)>priceNow) bar2=i;  
         }

         time1=iTime(thisPair[iPair],0,bar1);
         time2=iTime(thisPair[iPair],0,bar2);
         price1=iHigh(thisPair[iPair],0,bar1);
         price2=iHigh(thisPair[iPair],0,bar2);
      }
      
      TLR[iPair][TIME1]=time1;
      TLR[iPair][TIME2]=time2;
      TLR[iPair][PRICE1]=price1;
      TLR[iPair][PRICE2]=price2;

      TLRN[iPair][TIME1]=time1;
      TLRN[iPair][TIME2]=time2;
      TLRN[iPair][PRICE1]=price1;
      TLRN[iPair][PRICE2]=price2;
 
Ada lagi sambungan...

Code:
   if(lastBuy[iPair]<TLR[iPair][TIME2])
   {
      price1=TLRN[iPair][PRICE1];      
      price2=TLRN[iPair][PRICE2];      
      bar1=iBarShift(thisPair[iPair],0,TLRN[iPair][TIME1]);      
      bar2=iBarShift(thisPair[iPair],0,TLRN[iPair][TIME2]);
      if(bar1-bar2!=0)
         priceNow=price1-(price1-price2)/(bar1-bar2)*(bar1-1);

      if(iClose(thisPair[iPair],0,1)>priceNow && iOpen(thisPair[iPair],0,1)<priceNow)
      {
         if(iClose(thisPair[iPair],0,1)<(price1+price2)/2) buyNow=true;
         if((price1==price2)) buyNow=true;
      }

   }
   
   if(lastSell[iPair]<TLS[iPair][TIME2])
   {
      price1=TLSN[iPair][PRICE1];      
      price2=TLSN[iPair][PRICE2];      
      bar1=iBarShift(thisPair[iPair],0,TLSN[iPair][TIME1]);      
      bar2=iBarShift(thisPair[iPair],0,TLSN[iPair][TIME2]);
      if(bar1-bar2!=0)
         priceNow=price1-(price1-price2)/(bar1-bar2)*(bar1-1);

      if(iClose(thisPair[iPair],0,1)<priceNow && iOpen(thisPair[iPair],0,1)>priceNow)
      {
         if(iClose(thisPair[iPair],0,1)>(price1+price2)/2) sellNow=true;
         if((price1==price2)) sellNow=true;
      }
   }
 
ni macam indicator untuk lukis trendline, betul ke?
 

Live Forex Chart

Currency
Rates
EUR / USD
1.14641
USD / JPY
156.876
GBP / USD
1.33707
USD / CHF
0.82419
USD / CAD
1.40087
EUR / JPY
179.844
AUD / USD
0.71102
Back
Top
Log in Register