وحلقة اخرى تعود بالماجيك نمبر لاخر صفقة اغلقت على ربح
Printable View
وحلقة اخرى تعود بالماجيك نمبر لاخر صفقة اغلقت على ربح
الخطأ الذي يظهر لديك غالبا هو 130 وهذا يعني خطأ في سعر وضع الأمر المعلق فقد يكون السعر قريب جدا من سعر وضع الأمر المعلق
أو أن سعر وضع الأمر المعلق مثلا إذا كان أمر الشراء فقط يكون سعر وضع الأمر أكبر من السعر الحالي فلا يقوم الإكسبرت بوضعه بما أنه باي ليميت
السلام عليكم
في الاوامر المعلقه
نصادف في بعض الاحيان ان تحقق الصفقه هدفها ويتعلق امر ثاني بحكم ان الشروط مازالت متوفره
ماهو الكود البرمجي الذي يمنع تكرار نفس الامر في نفس الشمعه
هل يمكن ان اجعل الاكسبيرت يفتح مع افتتاح السوق وليس عند الساعه 0 لانه احيانا يفتح متاخرا مثلا عند 1:20 فلا يستطيع الاكسبيرت ان يعمل اوامر معلقه لانه مبرمج فقط عندالساعه 0 ؟
ماهو الكود لغلق جميع الصفقات المعلقه والمفتوحه مع اغلاق سعر الجمعه وليس عند وقت محدد من الجمعه لانه احيانا يغلق السوق قبل الساعه 22 ؟
الشي الاخر عملت تنزيل بيانات العمله السابقه لشارت الدقيقه لكني اجد بعض الشموع غير موجوده رغم اني مسحت الهيستوري السابقه ونزلتها من جديد لكن دون فائده
اين اجد هذه البيانات كامله؟
وعليكم السلام ورحمة الله وبركاته
حتى نجعل الإكسبرت لا يقوم بفتح أكثر من صفقه في نفس الشمعه سنحتاج إلى معرفة توقيت هذه الشمعه حتى نضع شرط يمنع فتح الصفقه إلا إذا تغيرت الشمعه
دائما أستخدم هذا الكود
أولا نقوم بتعريف متغير من نوع datetime خارج الداله start
ثم أضع من ضمن شروط الدخولكود PHP:
datetime Time0;
ثم ستلاحظ بعد فتح الصفقه أني قمت بجعل قيمة المتغير هو قيمة الشمعه الحاليه بالتالي عندما يقارن في المره التاليه نفس الشرط فلن يتحقق شرط أنكود PHP:
if (Time0!=Time[0]){
if(orderscnt()<1){
if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
if(TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,digits),3*Q,SL,TP,"EA",MagicNumber,0,Blue);
PlaySound("Alert.wav");
Time0=Time[0];
}
}
بالتالي لن يتم فتح الصفقه إلا إذا تغيرت الشمعه بالتالي يتغير توقيت الشمعهكود PHP:
Time0!=Time[0]
الداله orderscnt ستتغير حسب حالة الصفقات لأنها في كل مره تعمل سوف تقوم بالبحث عن الصفقات المفتوحه التي بنفس الماجيك نمبر وسوف تجدها فسواء أغلقت المنصه ثم قمت بفتحها فعندما يبدأ عملها فسوف تبحث عن الصفقات المفتوحه بنفس الماجيك نمبر ثم تأخذ قيمتها
لكن ما يجب أن تسأل عنه هو هل المتغير Time0 سوف يظل محتفظ بقيمته في حال تم إغلاق المنصه وفتحها لكن هنا سأجيبك بلا لذلك أحد الحلول التي إستخدمتها لحل هذه الثغره هو إستخدام الداله GlobalVariableSet بدلا من المتغير Time0 فسوف يصبح بالشكل الآتي
بالتالي مهما أغلقت المنصه فلن تحذف القيم أو تتغير إلا إذا قمت بحذفها بنفسك GlobalVariableDelكود PHP:
if(GlobalVariableGet("T")!=Time[0]){
//Open Order
GlobalVariableSet("T",Time[0]);
}
طبعا يجب أن تراعي عند التسميه إستخدام الإكسبرت على أكثر من عمله أو تايم فريم لذلك إجعل الإسم بهذا الشكل
كود PHP:
if(GlobalVariableGet("T"+Symbol()+Period())!=Time[0]){
//Open Order
GlobalVariableSet("T"+Symbol()+Period(),Time[0]);
بالنسبه للسؤال الأول قم بتعريف متغير من نوع datetime خارج الداله start
ثم بدلا من وضع شرط فتح الصفقه في ساعة معينه قم بوضع شرط بحيث يتعرف الإكسبرت على بداية إسبوع جديدكود PHP:
datetime Time0;
بالتالي مع بداية كل إسبوع جديد سوف يقوم الإكسبرت بفتح صفقه جديده مهما كان توقيت إفتتاح الإسبوعكود PHP:
if(Time0!=iTime(Symbol(),10080)){
//open Order
Time0=iTime(Symbol(),10080));
}
بالنسبه للسؤال الثاني فلا يوجد كود لمعرفة ذلك لأن إغلاق السوق يختلف من بروكر لآخر لذلك يمكنك معرفة في أي وقت يغلق البروكر ثم تغلق الصفقات في هذه الساعه
يمكنك تحميل البيانات التاريخية للعملات من هذا الموضوعكود PHP:
if(Hour()==20&&DayOfWeek()==5){
// Close Order
}
http://www.forextester.com/data/datasources.html