BTC USD 76,366.4 Gold USD 4,341.84
Time now: Jun 1, 12:00 AM

Belajar Coding EA (mql) asas

dah compile tapi ada error 'i' variable already defined

saya dah tukar if (totalSell==0 && sell==true) // sekiranya sell dan sell variable true
{
for (int s=0; s<10; s++) // 10 kali sell


complete.. cuma test tadi dia hanya bukak 5 post je.. betul cam kata bro tadi.. takpe.. saya tunggu malam ni:) tq bebanyak

// saya rasa kena masukkan slippage la bro .. (10 post sekaligus membebankan server)
 
Last edited:
code yang sebelum tu saya declare variable i 2 kali, sebabtu error. Tak perasan.
solutionnya, macam yang tuan buat tu betul lah, tuan rename salah 1 jadi s
1 lagi solution ialah declare i di luar for

Code:
int i;
for (i=0; i<=10; i++)
{

}
perati betul2 dalam for takde int lagi.

untuk function while pula syntax nya macam ni

Code:
while ( )
{
   
}
selagi yang di dalam bracket sebelah while itu true, semua code dalam curly bracket { } akan diulang

contoh

Code:
int i=0;
while (i<10)
{
   Print ("value i ialah: ", i);
   i++;
}

Untuk ea tuan pula, saya akan jadikan code untuk kira total pos sebagai custom function supaya saya boleh run berulang kali di dalam while



Code:
extern bool buy = true;
extern bool sell = true;

int start ()
{
   if (totalPos(OP_BUY) ==0 && buy==true) [COLOR="Gray"]// sekiranya buy 0 dan buy variable true[/COLOR]
   {
      while (totalPos(OP_BUY)<=10) [COLOR="gray"]// selagi total buy tak cukup 10, run function kat bawah[/COLOR]
      {
         OrderSend(Symbol(),OP_BUY,1,Ask,3,0,Ask+10*Point,"My order buy",0,0,Green); // buy 1 lot tp 10
         Sleep (500); 
      }
   }

   if (totalPos(OP_SELL) ==0 && sell==true) [COLOR="gray"]// sekiranya sell 0 dan sell variable true[/COLOR]
   {
      while (totalPos(OP_SELL)<=10) [COLOR="gray"]// selagi total sell tak cukup 10, run function kat bawah[/COLOR]
      {
         OrderSend(Symbol(),OP_SELL,1,Bid,3,0,Bid-10*Point,"My order sell",0,0,Red); // sell 1 lot tp 10
         Sleep (500); 
      }
   }
   return (0);
}

[COLOR="Gray"]// custom fucntion ntuk kira total pos[/COLOR]
int totalPos (int orderType)
{
   int total = 0; [COLOR="gray"]// counter bermula 0[/COLOR]
   for (int i=0; i<OrdersTotal(); i++)
   {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol()!=Symbol()) continue; [COLOR="gray"]// bukan current pair... skip[/COLOR]
      if (OrderType()==orderType) total++; [COLOR="gray"]// counter tambah 1[/COLOR]
   }
   return (total);
}


dengan while di atas, saya letakkan custom function di dalam bracket, selagi valuenya tak bertukar kepada false, selagi itu lah dia akan cycle code yang berada dalam curly bracket.
Dengan cara ni tuan dapat pastikan yang pos tuan cukup 10, sebab kalau requote atau server bz, ea akan terus menerus send order sampai cukup 10 pos berjaya dibuka.

if, for dan while ni merupakan operator yang penting dalam MQL. Banyak cara kita boleh gunakan, yang penting coder mesti faham macammana nak guna.
Cara coder A coding mengkin berbeza dengan cara coding Coder B, tapi hasilnya boleh jadi sama. Ikut kreativiti masing2 macammana nak susun code.
 
Last edited:
hmm.. tq bro. .sangat2 berterima kasih..cuma nak tanye sket.. boleh tak kalo tak guna while?andai kata saya nak guna if atau for sahaja? tapi function sama cam while?(sekadar ingin belajar)

extern bool buy = true;
extern bool sell = true;


if (buy==true && sell==true)
{Alert("Invalid settings, choose to buy or sell by setting one of them to true");
Alert("the script must now be relaunched");
return (0);
} <-- comand ni kena ada kalo tak silap bro.. takut lupa ekjas..(tapi saya tak tau nak bubuh kat mana..)
 
Last edited:
** pembetulan, explaination saya tentang while kat atas terbalik. Selagi dalam bracket while true (bukan false), code dalam { } akan di ulang. Harap maklum.

Kalau nak pakai if dan for aje. Tak nak pakai while pun boleh. Tapi pada saya kurang cantik. Bergantung kepada coder lah nak buat camne. Tuan boleh create global/public variable. Contoh cam ni
Code:
bool completed = true; [COLOR="Gray"]// yang ni setkan di luar start() sebagai global variable[/COLOR]

if (totalPos(OP_BUY)==0) completed = false;
if (totalPos(OP_BUY)>=10) completed = true;

if (completed == false)
{
   for (int i=0; i<=10-totalPos(OP_BUY); i++)
   {
       OrderSend......
       Sleep (500);
   }
}

Kalau nak pastikan buy & sell 2 2 setting tak bole true, letak code ni kat depan int start()

Code:
int start ()
{
   if (buy && sell)
   {
      Alert{"Buy dan sell tak boleh true!"};
      return (-1); [COLOR="gray"]//-- ea akan stop kat sini[/COLOR]
   }
   // sambung code yang lain2....

if (buy && sell) sebenarnya sama if (buy==true && sell==true)
dan
if (!buy && !sell) sebenarnya sama if (buy==false && sell==false)
 
Untuk makluman, segala contoh yang saya bagi adalah mengikut style coding saya sendiri.
Seperti yang saya pernah beritahu, cara coding boleh jadi macam2 bergantung kepada coder itu sendiri. Coding saya bukanlah yang terbaik.
Sekiranya ada para coder di luar sana ada contoh yang lebih baik, anda dipersilakan menyumbang. terima kasih.
 
Untuk makluman, segala contoh yang saya bagi adalah mengikut style coding saya sendiri.
Seperti yang saya pernah beritahu, cara coding boleh jadi macam2 bergantung kepada coder itu sendiri. Coding saya bukanlah yang terbaik.
Sekiranya ada para coder di luar sana ada contoh yang lebih baik, anda dipersilakan menyumbang. terima kasih.



hehe.. takpe bro.. namanye pun belajar.. buat masa ni ada bro aiman je yang kongsi ilmu...

*ilmu bila diajarkan lebih bermanfaat..:)cgrock



alhamdulillah ..seronok dengan penerangan tuan..pandai byk cabang..


if (totalPos(OP_BUY)>=10) completed = true;
<--- apa maksud komand ni? op buy = 10 ??
napa tak buat camni?----> if (totalPos(OP_BUY)==10) completed = true;
 
Last edited:

if (totalPos(OP_BUY)>=10) completed = true;
<--- apa maksud komand ni? op buy = 10 ??
napa tak buat camni?----> if (totalPos(OP_BUY)==10) completed = true;

hanya precaution, tapi macammana pulak kalau total buy = 11?
benda ni boleh terjadi kalau secara tak sengaja, tuan ter attach 2 ea sekali gus. total 9 terus jadi 11 sebab 2 ea OrderSend serentak.

Pada saya letak >= lebih baik daripada ==.
kalau takde masalah boleh jugak letak ==
hasilnya sama
 
salam.. hm.. masih tak cun ea ni.. still tak amik 10 post.. rasa2nye kena setiap tick tak bro?


on tick ( scan all post ) ??
 
kalau close semua pos, bukan 1 atau 2 pos, tapi semua sekali
dia akan buka balik 10 pos tak?
 

Live Forex Chart

Currency
Rates
EUR / USD
1.14776
USD / JPY
155.972
GBP / USD
1.33558
USD / CHF
0.82443
USD / CAD
1.39913
EUR / JPY
179.019
AUD / USD
0.71092
Back
Top
Log in Register