آخر كود تم تعديله هو في المشاركة رقم 11 وذلك بعد ملاحظات الأخ حازم .
كود PHP:
#property copyright "Idea by Supaplex Programing by waddah attar"
#property link "waddahattar@hotmail.com"
//خصائص الاكسبيرت
extern int TakeProfit=80;
extern int StopLoss=80;
extern double FirstLots=0.1;
extern bool OpenBuy=true;
extern int LotsDouble=2;
extern int MagicNumber = 2008;
int Ticket1,Ticket2;
int t1,t2,gT1,gT2;
int handle;
int init()
{
Comment("Waddah Attar Supaplex");
return(0);
}
int deinit()
{
Comment("");
return(0);
}
int start()
{
Procces_1();
return(0);
}
//****************************************************************************************************************
// الوظيفة الخاصة بفتح عقد الشراء مع مضاعفة إن اقتضى الأمر
void OpenBUYOrder(double Lots,int Magic)
{
double sl,tp;
sl=Ask-StopLoss*Point;
tp=Ask+TakeProfit*Point;
if (Lots==FirstLots)
{
Ticket1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"",Magic,0,Green);
if(Ticket1>0)
{
gT1=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-TakeProfit*Point,"",Magic,0,Green);
gT2=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-(TakeProfit*Point),"",Magic,0,Green);
}
else
{
Alert("خطأ شراء "," Err = ",GetLastError()," Price = ",Ask," Lots = ",Lots);
}
}
}
// الوظيفة الخاصة بفتح عقد البيع مع مضاعفة إن اقتضى الأمر
void OpenSELLOrder(double Lots,int Magic)
{
double sl,tp;
sl=Bid+StopLoss*Point;
tp=Bid-TakeProfit*Point;
if (Lots==FirstLots)
{
Ticket1=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"",Magic,0,Red);
if(Ticket1>0)
{
gT1=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+TakeProfit*Point,"",Magic,0,Green);
gT2=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+(TakeProfit*Point),"",Magic,0,Green);
}
else
{
Alert("خطأ بيع "," Err = ",GetLastError()," Price = ",Bid," Lots = ",Lots);
}
}
}
// الوظيفة الرئيسية
int Procces_1()
{
double slot,ssl,stp,bw;
// في حال لا يوجد صفقات حالية وكان هناك صفقات معلقة فاحذفها لأنه لا داعي لها
if (MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==2)
{
DeletePendingOrders(MagicNumber);
return(0);
}
// في حال لا يوجد صفقات حالية أو صفقات معلقة فقم بفتح صفقة بيع أو صفقة شراء حسب رغبة المستخدم
if (MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==0)
{
if (OpenBuy)
{
OpenBUYOrder(FirstLots,MagicNumber);
}
else
{
OpenSELLOrder(FirstLots,MagicNumber);
}
return(0);
}
// في حال تم فتح صفقة بيع أو شراء يجب وضع صفقات معلقة معاكسة لها نوعا واتجاها
if (MyRealOrdersTotal(MagicNumber)==2 && MyPendingOrdersTotal(MagicNumber)==0)
{
OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
slot=OrderLots()*LotsDouble;
ssl=OrderStopLoss();
stp=OrderTakeProfit();
if (OrderType()==OP_BUY)
{
gT1=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-TakeProfit*Point,"",MagicNumber,0,Green);
gT2=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-(TakeProfit*Point),"",MagicNumber,0,Green);
}
if (OrderType()==OP_SELL)
{
gT1=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+TakeProfit*Point,"",MagicNumber,0,Green);
gT2=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+(TakeProfit*Point),"",MagicNumber,0,Green);
}
}
return(0);
}
// وظيفة لحساب عدد الصفقات الحالية
int MyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
t2=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
if (t1==-1)
{
t1=OrderTicket();
}
else
{
if (t2==-1)
{
t2=OrderTicket();
}
}
c++;
}
}
return(c);
}
// وظيفة لحساب عدد الصفقات المعلقة فقط
int MyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
c++;
}
}
return(c);
}
// وظيفة لحذف الصفقات المعلقة
int DeletePendingOrders(int Magic)
{
int total = OrdersTotal();
for (int cnt = total - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
{
OrderDelete(OrderTicket());
}
}
return(0);
}
ضع الكود البرمجي في بلوك كود PHP ليتم تلوينه آليا ولي في بلوك كود فقط .