BTC USD 76,543.5 Gold USD 4,351.69
Time now: Jun 1, 12:00 AM

Belajar Coding EA (mql) asas

ada tak cth simple ea yg bukan byk post..kata biasa kita bukak 1lot, sekarang ni nak guna 0.2lotx5 serentak...
kalau masta ada contoh coding..mintak tempek kat sini...tq


Paling simple tanpa ambil kira requote, repeat 5 kali

Code:
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);

ataupun boleh guna for

Code:
for (int i=0; i<5; i++)
{
   OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
}

guna while pun boleh juga

Code:
int i=0
while (i<5)
{
   OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
   i++;
}

Walaubagaimanapun, masuk 1 post (1 lot) lebih baik drp 5 post(0.2 lot)
 
Paling simple tanpa ambil kira requote, repeat 5 kali

Code:
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);

ataupun boleh guna for

Code:
for (int i=0; i<5; i++)
{
   OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
}

guna while pun boleh juga

Code:
int i=0
while (i<5)
{
   OrderSend(Symbol(),OP_BUY,0.2,Ask,3,0,0,"Comment",0,0,Green);
   i++;
}

Walaubagaimanapun, masuk 1 post (1 lot) lebih baik drp 5 post(0.2 lot)

tq bro aiman...kerana kalau masuk 5 post mungkin tak dapat harga yg sama kan bro...atau ada sebab lain
 
tq bro aiman...kerana kalau masuk 5 post mungkin tak dapat harga yg sama kan bro...atau ada sebab lain

betul, takde jaminan kesemua 5 post dapat open pada harga sama.
Bila close all pun tak ada jaminan dapat harga sama.

Kalau open 1 post(1 lot) kita masih boleh buat partial close 0.2 lot, jadi 0.8 lot
 
betul, takde jaminan kesemua 5 post dapat open pada harga sama.
Bila close all pun tak ada jaminan dapat harga sama.

Kalau open 1 post(1 lot) kita masih boleh buat partial close 0.2 lot, jadi 0.8 lot

oooo..boleh jugak mcm tu...ingat nak pecah kan lot sebab nak close manual asing2 nanti...bro aiman boleh bagi cth utk partial close tak..
 
oooo..boleh jugak mcm tu...ingat nak pecah kan lot sebab nak close manual asing2 nanti...bro aiman boleh bagi cth utk partial close tak..

Codenya sama, cuma kena "specify" kan jumlah lot yang hendak ditutup

tutup post (keseluruhan lot)
Code:
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

tutup sebahagian (0.2 lot)
Code:
OrderClose(OrderTicket(),[COLOR="Red"]0.2[/COLOR],Bid,3,Red);
 
Codenya sama, cuma kena "specify" kan jumlah lot yang hendak ditutup

tutup post (keseluruhan lot)
Code:
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

tutup sebahagian (0.2 lot)
Code:
OrderClose(OrderTicket(),[COLOR="Red"]0.2[/COLOR],Bid,3,Red);

tq bro aiman
 
masta aiman...kalau tgk cth di dibawah ni...adakah apabila kita set sl maka arahan close buy/sell akan terbatal? katakan saya buy bila ma10>ma21 dan closebuy bila ma10<ma21..jika saya set sl, adakah ea akan lihat pada sl sahaja atau closebuy dan sl sekali? saya foward test..bila saya set sl..closebuy tu tak berfungsi...betul ke?
kalau ea buat salah satu sahaja..bagaimana nak jadikan ea tersebut akan closebuy bertindak pada kedua2nya( bermakna ea akan close ikut yg mana trigger dahulu )..

//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = True;
extern int TakeProfit = 60;
extern bool UseTrailingStop = True;
extern int TrailingStop = 30;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+


double Buy1_1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseBuy1_1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_2 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseSell1_1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_2 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, Current + 0);


//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+

if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;


//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+

if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;


//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+
 
Last edited:
Tuan pasti ke setting tuan betul? EA guna SMA 25 bukan 21. Mungkin belum bersilang. Apa yang saya nampak, sepatutnya 2 2 jalan
 

Live Forex Chart

Currency
Rates
EUR / USD
1.14749
USD / JPY
155.983
GBP / USD
1.33577
USD / CHF
0.82459
USD / CAD
1.39889
EUR / JPY
179.052
AUD / USD
0.71103
Back
Top
Log in Register