استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
الســلام عليــكم و رحمة الله و بركاته..
سؤالي هو كيف أعمل كود يحذف الأوامر المعلقة أو يغلق الأوامر المنفذة بدون ما أعمل لووب..
بمعنى آخر ، إذا تحققت الشروط الأساسية ، يقوم الإكسبيرت بفتح أمر معلق
إذا لم يتفعل هذا الأمر (order) ، ينحذف مباشرة إذا تحقق شرط آخر
أي أن استراتيجية الإكسبيرت لا ترسل أمر دون حذف السابق..
أرجو أن يكون الموضوع مفهوم
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
إستخدم هذا الكود ولا تنسى طبعا إضافة شروط حذف الأمر المعلق إلى هذا الكود وإلا فإن أي أمر معلق تضعه فسوف يتم حذف مباشرة إذا وضعت الكود بدون تحديد
كود PHP:
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()>OP_SELL)
{OrderDelete(OrderTicket())
}
}}
أما إذا أردت غلق الصفقة المفتوحة فسوف تستخدم الأمر OrderClose في نفس الكود السابق مع بعض التغييرات البسيطة
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
إستخدم هذا الكود ولا تنسى طبعا إضافة شروط حذف الأمر المعلق إلى هذا الكود وإلا فإن أي أمر معلق تضعه فسوف يتم حذف مباشرة إذا وضعت الكود بدون تحديد
كود PHP:
for (int cnt = 0 ; cnt < OrdersTotal() ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol())
{
if (OrderType()>OP_SELL)
{OrderDelete(OrderTicket())
}
}}
أما إذا أردت غلق الصفقة المفتوحة فسوف تستخدم الأمر OrderClose في نفس الكود السابق مع بعض التغييرات البسيطة
شكرًا جزيلاً أخي الفاضل ،،
في الحقيقة لا أرغب في استخدام Loop
لأن الاستراتيجية التي أعمل عليها لا يمكن أن تفتح صفقة دون غلق الصفقة السابقة..
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
اقتباس:
المشاركة الأصلية كتبت بواسطة موريسكي
شكرًا جزيلاً أخي الفاضل ،،
لأن الاستراتيجية التي أعمل عليها لا يمكن أن تفتح صفقة دون غلق الصفقة السابقة..
لم أفهم قصدك ماذا تعني بأن الإستراتيجية لا يمكن أن تفتح صفقة دون غلق الأخرى :eh_s(7):
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
لم أفهم قصدك ماذا تعني بأن الإستراتيجية لا يمكن أن تفتح صفقة دون غلق الأخرى :eh_s(7):
يعني طبيعة الاستراتيجية ما تفتح صفقة دون غلق السابقة
كل صفقة جديدة بمثابة غلق للصفقات القديمة
فليش أحتاج أعمل لووب ؟
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
اقتباس:
المشاركة الأصلية كتبت بواسطة موريسكي
يعني طبيعة الاستراتيجية ما تفتح صفقة دون غلق السابقة
كل صفقة جديدة بمثابة غلق للصفقات القديمة
فليش أحتاج أعمل لووب ؟
نستخدم اللوب في حالة إحتمالية وجود أكثر من صفقة مفتوحة لكن إذا كان عدد الصفقات المفتوحة تكون 1 دائما إستخدم الأمر OrderSelect مباشرة وضع رقم الصفقة وسيكون 1 بدلا من cnt
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
نستخدم اللوب في حالة إحتمالية وجود أكثر من صفقة مفتوحة لكن إذا كان عدد الصفقات المفتوحة تكون 1 دائما إستخدم الأمر OrderSelect مباشرة وضع رقم الصفقة وسيكون 1 بدلا من cnt
شكرًا أخي الفاضل و بارك الله فيك
أستفدت منك كثيرًا :asvc:
و فرصة أسألك سؤال ثاني إذا ما عندك مانع..
كيف ممكن أعمل stop trailing ؟
حاولت عن طريق الـOrderModify ... بس ما عرفت كيف يعمل هالفنكشن ؟
رد: استفسار ... غلق الأوردرات المنفذة و حذف المعلقة
اقتباس:
المشاركة الأصلية كتبت بواسطة موريسكي
شكرًا أخي الفاضل و بارك الله فيك
أستفدت منك كثيرًا :asvc:
و فرصة أسألك سؤال ثاني إذا ما عندك مانع..
كيف ممكن أعمل stop trailing ؟
حاولت عن طريق الـOrderModify ... بس ما عرفت كيف يعمل هالفنكشن ؟
يوجد أكثر من طريقة لعمل التريلينج ستوب وأكثر من كود لكن جميع الأكواد تدور حول فكرة واحدة
إذا كان السعر الحالي أكبر من سعر فتح الصفقة + التريلينج ستوب المحدد
نقوم بعمل Order Modify للصفقة ونبدأ في تحريك الأستوب
بالنسبة لي أستخدم هذا الكود في إكسبرتاتي
كود PHP:
if(TrailingStop>0)MoveTrailingStop();
كود PHP:
void MoveTrailingStop()
{
int cnt,total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingProfit*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blue);
return(0);
}
}
}
else
{
if(TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingProfit*point,digits))
{
if((NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}