استاذي العزيز هناك تحذير على الدالة رقمة 24
possible use of uninitialized variable 'MaxPrice'
فما معناه وهل هذا يوقف عمل الدالة ؟؟؟؟
Printable View
السلام عليكم
أرجو المساعدة في تحديد آخر صفقة أقفلت، لأني وجدت ثلاثة أكواد تؤدي نفس الدور غير أنها ربما تحتاج إلى تصحيح
الكود الأول
كود:for(int o_pos=0;o_pos<OrdersHistoryTotal();o_pos++)
{
OrderSelect(o_pos, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
LastOrderTicket = OrderTicket();
}
}
الكود الثاني
كود:for(int o_pos=OrdersHistoryTotal()-1;o_pos<=0;o_pos--)
{
OrderSelect(o_pos, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
LastOrderTicket = OrderTicket();
}
}
الكود الثالث
وهو الكود الذي يظهر أقرب إلى أن يقوم بدوره بحيث وجدت من يعلق ويقول أن آخر صفقة أقفلت ليس بالضورة أن يكون ترتيبها هو الأول أو الآخر في OrdersHistoryTotal() لذا يتم الاعتماد على OrderCloseTime() لتحديد آخر صفقة في History
كود:static datetime lastOrderCloseTime=0;
for(int iPos=OrdersHistoryTotal()-1; iPos >= 0; iPos--)
{
if(
OrderSelect(iPos, SELECT_BY_POS, MODE_HISTORY)
&& OrderMagicNumber() == MagicNumber
&& OrderSymbol() == Symbol()
&& OrderCloseTime() > lastOrderCloseTime
)
{
lastOrderCloseTime = OrderCloseTime();
LastOrderTicket = OrderTicket();
}
}
من منكم يستطيع أن يحسم لي في هذا الأمر ويعطيني كون نهائي يفي بالغرض جزاكم الله خيرا
بل هناك كود رابع، ما العمل؟؟
كود:OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
LastOrderTicket = OrderTicket();
}
stop levels
وهو الحد الذي لا يسمح بتحريك الوقف أو الهدف اليه
الملف المرفق 456206
هل ممكن كود استخراجه
وعليكم السلام ورحمة الله وبركاته
الكود الأول
صحيح لكن عيبه أنك ستبحث في جميع الصفقات المغلقه من البداية والأفضل أن تبحث عن الصفقات المغلقه من النهاية حتى تقلل حلقة البحث
الكود الثاني
هو الصحيح مع بعض التعديل بحيث يجب أن تستخدم الداله Break عندما تجد آخر صفقة التي تطابق الشروط
مثال
الكود الثالثكود PHP:for(int o_pos=OrdersHistoryTotal()-1;o_pos<=0;o_pos--)
{
OrderSelect(o_pos, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
LastOrderTicket = OrderTicket();
break;
}
}
صحيح لكن لا داعي للبحث في جميع الصفقات ووضع المقارنه لأن آخر صفقة في الهيستوري هي آخر صفقة أغلقت
الكود الرابع
صحيح إذا كان الإكسبرت يعمل لوحده على الحساب ولا تفتح صفقات أخرى سواء يدويا أو بواسطة إكسبرت آخر و غير صحيح لأن الصفقة الأخيرة في الهيستوري ليست بالضروره هي الصفقة التي فتحها الإكسبرت قد تكون فتحت بواسطة إكسبرت آخر أو يدويا
اشكرك بعمق استاذي الفاضل
لك الشكر الجزيل أخي Mr. Dollar لقد أفدتني كثيرا بتعليقك على الأكواد
إذا أفضل كود بينهم هو الكود الثاني باضافة الدالة Break
كود:for(int o_pos=OrdersHistoryTotal()-1;o_pos<=0;o_pos--)
{
OrderSelect(o_pos, SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
LastOrderTicket = OrderTicket();
break;
}
}
السلام عليكم ورحمة الله وبركاته
مساء الخير الجميع
قمت بوضع أمر شراء معلق عند تحقق شرط معين
كود PHP:if ( // شرط فتح امر شراء معلق )
{
OrderSend(Symbol(),OP_BUYSTOP,0.01,Ask,5,low,high,"Me",MagicNumber,0,Blue);
}
كيف ستكون آلية حذف هذا الأمر المعلق عند تحقق شرط آخر ،
وكيف ستكون الآليه مع الماجيك نمبر ( اذا كان هناك اكثر من أمر معلق )
وفقكم الله
وعليكم السلام ورحمة الله وبركاته
نفس طريقة حذف الأوامر المعلقه هي طريقة إغلاق الصفقات
قم بعمل دالة لإغلاق الصفقات
على حسب نوع الصفقهكود PHP:void CloseOrders(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type)
{
if(OrderType()==OP_BUY)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,3*P);
}
else if(OrderType()==OP_SELL)
{
bool close=OrderClose(OrderTicket(),OrderLots(),Ask,3*P);
}
else if(OrderType()>OP_SELL)
{
bool del=OrderDelete(OrderTicket());
}
}
}
}