hello all.
I'm new in mt4 programming and below are my very first EA. The purpose of this EA is to close all position regardless any currency pair based on the same magic number.
Let say under magic # 8675310, i got 2 position EURUSD & USDCFh. It shall be able to close all these pair when it reaches certain profit target.
The problem with this EA is,
Open Transaction # 1 EURUSD (able to close)
Open Transaction # 2 USDCFh (won't be able to close)
IT WON'T BE ABLE TO CLOSE TRANSACTION # 2.
Any Ideas ?
Thanks
//+------------------------------------------------------------------+
//| Closing_Trade_By_Magic_No_v1 .mq4 |
//| Mine |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Mine"
#property link "http://www.metaquotes.net"
//---- input parameters
extern int MagicNumber1=8675310;
extern int Profit1=10;
extern int MagicNumber2=8675311;
extern int Profit2=15;
extern int MagicNumber3=8675312;
extern int Profit3=15;
extern int MagicNumber4=8675313;
extern int Profit4=15;
extern int MagicNumber5=8675314;
extern int Profit5=15;
extern int MagicNumber6=0;
extern int Profit6=10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
onScreenComment(98,"Tengak Initialize..");
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
string myMessage="";
myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Profit1,myMessage);
myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Profit2,myMessage);
myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Profit3,myMessage);
myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Profit4,myMessage);
myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Profit5,myMessage);
myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Profit6,myMessage);
onScreenComment(98,myMessage);
//----
//----
return(0);
}
string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )
{
int total = OrdersTotal();
double MyCurrentProfit=0;
string MyOrderNo="";
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == myMagicNumber)
{
MyCurrentProfit += OrderProfit();
MyOrderNo= MyOrderNo + "," + OrderTicket();
}
}
if(MyCurrentProfit>=myProfit)
CloseAll(myMagicNumber);
myMessage="Group Position #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;
return (myMessage);
}
void CloseAll(int myMagicNumber)
{
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == myMagicNumber)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,5,Violet);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,5,Violet);
}
}
void onScreenComment(int myEvent, string myComment)
{
switch (myEvent)
{
case 98: Comment(myComment); break;
}
}
//+------------------------------------------------------------------+
I'm new in mt4 programming and below are my very first EA. The purpose of this EA is to close all position regardless any currency pair based on the same magic number.
Let say under magic # 8675310, i got 2 position EURUSD & USDCFh. It shall be able to close all these pair when it reaches certain profit target.
The problem with this EA is,
Open Transaction # 1 EURUSD (able to close)
Open Transaction # 2 USDCFh (won't be able to close)
IT WON'T BE ABLE TO CLOSE TRANSACTION # 2.
Any Ideas ?
Thanks
//+------------------------------------------------------------------+
//| Closing_Trade_By_Magic_No_v1 .mq4 |
//| Mine |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Mine"
#property link "http://www.metaquotes.net"
//---- input parameters
extern int MagicNumber1=8675310;
extern int Profit1=10;
extern int MagicNumber2=8675311;
extern int Profit2=15;
extern int MagicNumber3=8675312;
extern int Profit3=15;
extern int MagicNumber4=8675313;
extern int Profit4=15;
extern int MagicNumber5=8675314;
extern int Profit5=15;
extern int MagicNumber6=0;
extern int Profit6=10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
onScreenComment(98,"Tengak Initialize..");
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
string myMessage="";
myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Profit1,myMessage);
myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Profit2,myMessage);
myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Profit3,myMessage);
myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Profit4,myMessage);
myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Profit5,myMessage);
myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Profit6,myMessage);
onScreenComment(98,myMessage);
//----
//----
return(0);
}
string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )
{
int total = OrdersTotal();
double MyCurrentProfit=0;
string MyOrderNo="";
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == myMagicNumber)
{
MyCurrentProfit += OrderProfit();
MyOrderNo= MyOrderNo + "," + OrderTicket();
}
}
if(MyCurrentProfit>=myProfit)
CloseAll(myMagicNumber);
myMessage="Group Position #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;
return (myMessage);
}
void CloseAll(int myMagicNumber)
{
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == myMagicNumber)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,5,Violet);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,5,Violet);
}
}
void onScreenComment(int myEvent, string myComment)
{
switch (myEvent)
{
case 98: Comment(myComment); break;
}
}
//+------------------------------------------------------------------+