رد: تبادل الخبرات في برمجة MQL
اقتباس:
المشاركة الأصلية كتبت بواسطة Rock
هلا ياغالى
طب فى حاله استخدمناها بالشكل التالى
NormalizeDouble(bors,Digits);
هل سيتحقق المطلوب بنفس العملية السابقة
وهل تقصد من عدم تساوي مع قيم اخري انه هيصل سعر الاسك او البيد لهذا السعر بمراحل تشغيل الاكسيبرت بالتالى سيتساوي كلا منهم بنفس القيمه ؟!
نعم ، أعتقد ان استعملنا NormalizeDouble(bors,Digits) سينجح الامر ،
بالنسبة لسؤالك الثاني أخي روووك ، عملية التساوي ممكنة نظريا فقط ، أما عمليا فهي مستحيلة لسببين على ما أظن :
- السبب الاول رياضي بامتياز ، فالاعداد الحقيقية تحمل الكثير من الارقام بعد الفاصلة بصفة غير متناهية، خذ عندك مثال العدد ( بي ) ، فعمليا لا يمكننا اعطاء قيمة مساوية بالضبط لهذا العدد ، مادمنا نحن عاجزين عن ايجاد عدد مساوي له ، فكذلك الحاسوب اللذي نعطيه الامر بايجاد عدد حقيقي مساوي ل ( بي ) سيعجز عن ذلك بالتأكيد و النتيجة راح تطلع error ، اما ان كان المطلب ايجاد قيمة قريبة ل ( بي ) ، هنا عمليا المطلب ممكن تحقيقه سواء لنا نحن البشر ، أو بالنسبة للآلة ،
- السبب الثاني يتعلق بطبيعة السوق ، فتحرك السعر يتم بسرعة خيالية أحيانا ، بل غالبا ، لنفترض أن الزمن T0 هو الزمن اللذي سيتساوى فيه السعر مع قيمة معينة ، حواسيبنا غير مهيئة لتنفيذ أمر في هذا الزمن بالذات ، فهناك تأخر زمني لعوامل كثيرة منها سرعة النت ، الخ ،،،
لذلك من الافضل استعمال دالة normalisedouble و أيضا استبدال التساوي ب (( أكبر من أو يساوي )) أو (( أصغر من يساوي )) ،،،
بالمناسبة اكتشفت الخطأ في الكود بتاعي ، الخطأ يكمن في الدالة :
if(trade == True)
الخ
كنت مضطر لاستعمال هاذ الدالة قبل أوامر البيع ، و السبب هو تفعيل اوامر بيع كثيرة عوض أمر بيع واحد ،
للاسف لا أعلم كيف أعالج الامر و لا واحد يريد مساعدتي في باقي المنتديات