اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
وعليكم السلام ورحمة الله وبركاته
أعتقد المشكله عندك في حذف الأمر المعاكس وليس في وضع الأوامر فالنسبه لوضع الأمر فيكفي أن تضع الكود بحيث يفتح الأمرين معا مباشرة
لكن الفكره في كيف ستربط كل أمر مفتوح بالأمر المعلق الخاص به يمكنك لحل هذه المشكله أن تجعل رقم التيكيت لأي أمر يفتح تضعه كومنت للأمر المعلق
مثال
كود PHP:
if(/*Condtions*/)
{
int ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3,SL,TP,"EA",MagicNumber,0,Blue);
double price=Ask-10*Point;
OrderSend(Symbol(),OP_SELLSTOP,Lots,NormalizeDouble(price,Digits),3,SL,TP,IntegerToString(ticket,0),MagicNumber,0,Red);
}
ثم الآن لحذف الأمر المعلق يمكنك عمل دالة تبحث عن الأمر المعلق فإذا كان يوجد أمر مفعل له نفس رقم التيكيت بالتالي لا يحذف الأمر أما إذا لم يوجد فهذا يعني أن الأمر المعلق أغلق بالتالي تحذف الأمر المعلق
مثال
كود PHP:
void DeletePendingOrders()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string comment=OrderComment();
int ticket=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(CheckOrderExist(StringToInteger(comment)==false)
{
OrderDelete(ticket);
}
}
}
}
bool CheckOrderExist(int ticket)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()<=OP_SELL)
{
if(OrderTicket()==ticket)return(true);
}
}
return(false);
}
ثم ستستخدم الداله DeletePendingOrders()
رائع استاذنا مستر دولار
جزاك الله خير
سوف اقوم بالتجربه :015: