أنا كنت مثلك في بداية تعلمي لبرمجة الإكسبرت وكنت أعتقد أن الموضوع صعب في المؤشرات لكن الفكره كلها في إستخدام المصفوفات Arrays
سوف أنسق لعمل محاضره أو أكثر للناجحين في دورة الإكسبرتات بحيث تكون دورة المؤشرات متابعة مباشرة للبرمجه ولا تستغرق وقت
Printable View
السلام عليكم أستاذ أسامه
برجاء الإطلاع على الإكسبيرتين المرفقين و مراجعة هل يوجد به أخطاء تمنعه من العمل على النحو الذي ذكرته فب هذه الموضوع
https://forum.arabictrader.com/t143751-2.html#22
والإكسبيرتين واحد ولكن الإختلاف في إستخدام (أو) بدلا من التكرار
..
أرجو إبلاغي إن كان هناك خطأ و أيضا أشعر أن الطريقة التي برمجته بها معقده قليلا و قد يوجد أسهل منها .
وجزاك الله كل خير
المشكله لديك في إستدعاء خطوط الترند والمستويات
فلنفرض مثلا أنك قمت برسم ترند بالتالي سوف تصبح قيمة trend1 صحيحه لكن في نفس الوقت قيمة line1 سوف تأخذ قيمة أيضا وهو سعر الترند للنقطه الأولىكود PHP:
double trend1 = ObjectGetValueByShift("buy",1);
double trend2 = ObjectGetValueByShift("sell",1);
double line1=ObjectGet("buy",OBJPROP_PRICE1);
double line2=ObjectGet("sell",OBJPROP_PRICE1);
وبالتالي عند المقارنه سوف تحدث الأخطاء
لحل هذه المشكله قم بوضع شرط للمقارنه هل المرسوم هو ترند أو خط أفقي مثلا
في هذه الحاله سوف تحل المشكله وفي نفس الوقت لن تحتاج إلى متغير مستقل للترند وآخر للخط الأفقي فسوف تسهل المقارنهكود PHP:
if(ObjectType("buy")==OBJ_TREND){
double line1 = ObjectGetValueByShift("buy",1);
double line2 = ObjectGetValueByShift("sell",1);
}
else {
double line1=ObjectGet("buy",OBJPROP_PRICE1);
double line2=ObjectGet("sell",OBJPROP_PRICE1);
}
جزاك الله كل خير استاذ اسامة ، وبالفعل هى مشكلة غريبة لأن الاكسيبرت يفتح الصفقات فـ الباك تست بدون ظهور اى أخطـاء وعدم فتح الصفقات لايف ليس له أى سبب !!
انا قمت بإضافة التعديلات التى تفضلت وذكرتها ، أرجو الإطلاع على الاكسيبرت ومعرفة هل تم التعديل بشكل صحيح وهل توجد أكواد ناقصة .
شكرا أخي أسامة ... لكن أنا أستخدم هذا الإكسبيرت بحيث أقوم برسم شئ واحد فقط إما ترندا أو مستوى ولا أرسم ترندين أو ترند و مستوى معا فهل أيضا بهذه الطريقه تحدث أخطاء ولا يعمل ؟؟؟
وبالنسبه للشرط الذي أضيفه هذا هل أضعه مع شروط كل عمليه بيعا و شرائا ؟؟؟ أم في تعريف الترند و المستوى كما بالتعديل في المرفق
لديك فقط خطأ في المقارنه
GlobalVariableSet تقوم بحفظ القيمه لكن عندما تبدأ بالمقارنه فأنت تريد أن تستدعي القيمه المحفوظهكود PHP:
GlobalVariableSet("T"+Symbol(),Time[0])!=Time[0]
فتستخدم GlobalVariableGet
كود PHP:
GlobalVariableGet("T"+Symbol())!=Time[0]
نعم حتى إذا رسمت ترند فقط أو مستوى فقط فسوف تظل المشكله موجوده لأنك في الشروط لم تحدد للإكسبرت التأكد هل المرسوم ترند أو مستوى والإكسبرت لن يعرف ما هو المرسوم إلا إذا أخبرته بذلك
فمثلا في كودك القديم أنت جعلت
ولنفرض أنك رسمت ترند قيمة trend1 و trend2 سوف تصبح صحيحه وسوف يدخل في الشروط بشكل صحيحكود PHP:
double trend1 = ObjectGetValueByShift("buy",1);
double trend2 = ObjectGetValueByShift("sell",1);
double line1=ObjectGet("buy",OBJPROP_PRICE1);
double line2=ObjectGet("sell",OBJPROP_PRICE1);
لكن أيضا قيمة line1 و line2 سوف تأخذ قيم لأنه سيبحث عن الخط لكن سيأخذ سعر النقطة الأولى له وسوف تصبح قيمته وعند المقارنه سوف يقارن أيضا حسب السعر لكنه سيكون سعر خاطئ بالتالي سوف تجد دخول خاطئ
الشرط سوف تضيفه مره واحده فقط مع تعريف المستوى فلن تحتاج إلى أن تضيفه مره أخرى
أو يمكنك أن تضيف شرط آخر أيضا في شرط الترند مثلا
وفي شرط الخطكود PHP:
if ( Close[1]>Open[1]&& ObjectType("buy")==OBJ_TREND
&& Open[1]<trend1
&& Close[1]>trend1
&& d1>=ClosePipsFrom*point && d1<=ClosePipsTo*point )
كود PHP:
if ( Close[1]>Open[1]&& ObjectType("buy")==OBJ_HLINE
&& Open[1]<trend1
&& Close[1]>trend1
&& d1>=ClosePipsFrom*point && d1<=ClosePipsTo*point )
استاذ اسامة هل الـ slippage المستخدم فـ أمر OrderSend قد يؤدى الى عدم فتح صفقات او عدم فتح بعض الصفقات على منصات مختلفة ، أقصد اذا كان الرقم صغير مثل
وهل أقوم بوضع رقم أكبر مثلا 50 !!كود PHP:
,5*Q,
نعم صحيح
قليلا ما يكون إعادة التسعير هي السبب لأنها لا تحدث غالبا إلا في الحركه السريعه التي قد تجدها وقت الأخبار و5 نقاط تعتبر كافيه جدا ولا تحتاج زيادتها لأن 50 نقطه تعتبر كبيره جدا إذا فتح صفقة وقت صدور خبر وتحرك السعر كثيرا
تمام جدا أخي اسامة و بارك الله فيك ... أنا كنت أظن أن لو قمت برسم الترند و قام الغكسبيرت بإستدعائه وقتها فقط الترند المرسوم هوا ما سيأخذ قيمة ولا ياخذ المستوى قيمة لأنه غير موجود على الشارت ...
عموما الآن أنا فهمت أنه من الممكن عمل شئ من الإثنين إما أن أقوم بإضافة الشرط مع التعريف للترند و المستوى هكذا
و الشرط يكونكود PHP:
if(ObjectType("buy")==OBJ_TREND){
double trend1 = ObjectGetValueByShift("buy",1);
double trend2 = ObjectGetValueByShift("sell",1);
}
else {
double line1=ObjectGet("buy",OBJPROP_PRICE1);
double line2=ObjectGet("sell",OBJPROP_PRICE1);
}
كود PHP:
if ( Close[1]>Open[1]
&& Open[1]<trend1
&& Close[1]>trend1
&& d1>=ClosePipsFrom*point && d1<=ClosePipsTo*point )
و إما أقوم بغضافة شرط الترند أو المستوى مع الشروط هكذا
لكن لا أحتاج لعمل الإثنين معا ... أليس كذلك ؟؟؟كود PHP:
if ( Close[1]>Open[1]&& ObjectType("buy")==OBJ_TREND
&& Open[1]<trend1
&& Close[1]>trend1
&& d1>=ClosePipsFrom*point && d1<=ClosePipsTo*point )
إن شاء الله سوف أقوم بالتعديل و إرفاقه لتطلع عليه .
وبارك الله فيك .
لا ، أنا لا أرى أى كود في الإكسيبرت يجعله لا يقبل حجم أى لوت ، لكن أحد الأخوه ذكر أنه
لايفتح صفقات على منصة instaforex اذا وضع حجم اللوت 0.01 .
والحقيقة يا أستاذ أسامة ، انا لم أعد أعلم هل الخطـأ منى أم من الاكسيبرت أم من الإخوة التى تستخدم الإكسيبرت ، والموضوع اصبح مرهق لأنه لاتوجد أخطـاء ولا أعلم سبب اى شـىء يحدث الآن مع الاكسيبرت !!