النتائج 1 إلى 4 من 4
- 03-06-2013, 01:49 PM #1
مشكلة برمجية أرجو المساعدة من المبرمجين
في المرفقات كنت قد ذكرت في موضوع سابق انني صممت اول اسكبيرت بيسط من انتاجي وهه نسخة معدلة ولكن على 4 ارقام وتعمل على بروكرات ECN لكن عندي مشكلة جربتها على الباك تيست لعدة بروكرات وحرتني والمشكلة كلاتي
اولا ساذكر لكم باختصار عمل الاكسبيرت
الاكسبيرت تضع به السعر المناسب للدخول يعني نقطة الدخول وعندما يقترب السعر الحالي في الشارت من نقطة الدخول بمقارنتها بمعادلة وقد شرحتها في الاكسبيرت المرفق فيدخل صفقة وقد اضفت خيار اختيار نوع العملية مسبقا للدخول بيع ام شراء وتحديد اول لوت والتيك بروفيت
البرنامج يفتح صفقات بدون مشاكل ولكن الغريب في الباكتيست انه عندما يغلق صفقات المضاعفة وبالاخص عندما يزيد عن 3 صفقات
يعني اذا فتح صفقتين يغلقهم في وقت واحد بدون اي مشكلة
ولكن ان فتح 3 صفقات بلوت 0.1 0.2 0.4
فهو يغلق 0.1 و 0.4 في وقت واحد ويترك 0.2 ليغلقها فيما بعد او يفتح صفقة اخرى ويغلقها معها
وان فتح 4 صفقات فيغلق 3 صفقات مرة واحدة ويترك واحدة معلقة حتى يغلقها فيما بعد
هه ملاحظاتي ا كله على الباك تيست وليس لايف
ولكن انا لم افهم لماذا لا يغلق الصفقات في وقت وحد وبالاخص عندما يزيد عن صفقتين ويتجاوز احدهما طالما امر الاغلاق سليم عندما يغلق بنظام ال position ؟؟؟
آسف انني وضعت الموضوع في ركن مستقل ولكن حتى يظهر للجميع لان المشكلة حيرتني وقد جربت الاغلاق على اسكريبت ويعمل بدون مشاكل لكن عنمدا اخذ هذه الاومار في الا EA اواجه مشكلة عدم اكمال التتابع في عملية الاغلاق
- 03-06-2013, 03:41 PM #2
رد:مشكلة برمجية أرجو المساعدة من المبرمجين
عفوا نسيت ارفاق الاكسبيرت للمتابعة
- 04-06-2013, 03:26 AM #3
رد:مشكلة برمجية أرجو المساعدة من المبرمجين
سأخبرك لماذا
هذا هو الكود الخاص بإغلاق الصفقات الذي قمت بكتابته
كود PHP:for (i=0 ; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,0) ;
int type = OrderType();
switch(type)
{
// Buy order
case 0 :
OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),3,CLR_NONE);
break ;
// Sell order
case 1:
OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),3,CLR_NONE);
}
Lots=LotReset;
// EntryPrice=0; // option for closing EA and work one time only
// ObjectDelete("HoriLine"); // option for closing EA and work one time only
}
سوف تبدأ الحلقه بالبحث عن الصفقه رقم 0 وتتحقق الشروط وتغلق الصفقه بالتالي عندما أغلقت الصفقه أصبح يوجد حاليا صفقتين فقط وأرقام سوف تترتب مره أخرى لتصبح 0 - 1
لكن في الحلقه قيمة i زادت وأصبحت 1 والمفروض سوف يختار الصفقه رقم 1 ويترك الصفقه رقم 0
بالتالي يغلق الصفقه رقم 1 التي المفروض أنها أساسا كان رقمها 2 وهكذا تحدث هذه المشكله مع أي عدد صفقات أكثر من 2
الحل يمكنك تعديل الكود ليصبح
كود PHP:for (int i=0 ; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,0) ;
int type = OrderType();
bool close;
switch(type)
{
// Buy order
case 0 :
close =OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),3,CLR_NONE);
break ;
// Sell order
case 1:
close = OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),3,CLR_NONE);
}
if(close)i--;
// EntryPrice=0; // option for closing EA and work one time only
// ObjectDelete("HoriLine"); // option for closing EA and work one time only
}
}
- 04-06-2013, 04:07 AM #4
شكرا جزيلا على المعلومة القيمة وبالفعل حلت المشكلة الان
فالفعل لم الحظ ذلك عندما يقفل كل مرة الاسكريبت صفقة تقل عدد الصفقات بالتناقص