رد: تبادل الخبرات في برمجة MQL
أولا أشكر الأخ محمد على المشاركة القيمة جزاه الله كل خير ... وعندي بعض التصحيح
اقتباس:
المشاركة الأصلية كتبت بواسطة mohamed982
اقولك الاول الطريقة الصعبة عن طريق رمكتبات الدب الل الل في الويندوز اللي بتتعامل مع الريجيستري هتحط متغير فب الريجيستري تغرفه علي انه تاريخ بداية التشغيل وفانكشن جوع كود الاكسبيرت بتقارن الفبمة دي بالتاريخ الحالي اذا اكبر من المدة الحددة بتعمل init_failed
اللي فوق دي فكرة الطريقة الصعبة وهي الاصح بالمناسبة
العبارة هذي غير صحيحة فالكتابة للريجستري ليست الأصح ... هي تشبة الـ Global Variablesغير أن الـGlobal Variablesلاتحتاج permissions أوتصاريح .. ونستطيع أن نكتب إلى الريجستري عن طريق الدوال
[PHP]
RegCreateKeyEx
RegOpenKeyEx
RegSetValueEx
RegQueryValueEx
RegCloseKey
[/PHP]
والموجودة في مكتبة Advapi32.dll ... مع مراعاة أن الدوال الأربعة الأول تحتاج إضافة A للـANSI وW للـUnicode
ولو بحث في النت عن أكسبيرت يستخدم الريجستري فلن تجد ... ببساطة أحد الأسباب الرئيسية الـ permissions أو الـaccess فالميتاتريدر نفسه لايملك تصريح على ملفات النظام والسبب الآخر وجود الـGlobal Variables فهي تستطيع القيام بحفظ المتغييرات مثل الريجستري .. وعيب الطريقتين أن أي شخص يستطيع أن يمسح القيمة المحفوظة ويعمل reset للتاريخ كما ذكر أخي محمد
اقتباس:
المشاركة الأصلية كتبت بواسطة mohamed982
الفكرة الثانية واشك انها تنضرب بسهولة من اي حد يعرف الجلولال فيريابل انك تعرف متغير جلوبات وتحط فيه تاريخ بداية التشغيل وتعمل مقارنة زي باقي الطرق
خد كمان واحدة ، خلي الكود يعمل ملف باول تاريخ ويقارنه بس برده ممكن يضرب لانواي حد ممكن يرح لمكان الملف ويغير اللي جواه مانيوا
طريقة كتابة التاريخ لملف وأسترجاعه جيدة ولكن نفس نقطة ضعف الريجستري والـGlobal Variables بمجرد معرفة الملف سيتم مسحه أوتعديل القيمة
اقتباس:
المشاركة الأصلية كتبت بواسطة mohamed982
اقولك فكرة للطريقة السهلة لا هقولك اتنين الاولي ودي الاقوي ، اول ما الاكسبيرت يفتح امر انترهتمون معرف ثابت محدش يعرفه غيرك قيمته كام جوه الكود واول ما الاكسبيرت يفتح امر بيحط قيمة الثابت كتعليق ، وتحط فانكشن بتعمل ريتيرنو لتاريخ فتح الصفقة جوه الهيستوري والبحث عن طريق القيمة جوه التعليق وترجع اقدم تاريخ ، بعد كده واضحة فانكشن بتقارن اول تاريخ مع الفترة المحددة وليكن ٩٠ يوم بالتاريخ الحالي وهكدا ،
هذي الطريقة جيدة
هنالك طريقة أخرى وهي أستخدام سيرفر لحفظ المعلومات وأسترجاعها وهي مستخدمة في بعض الأكسبيرتات ... ويتم عمل Encryption للمعلومات المرسلة والمستقبلة حتى لا تكون معرضة للتعديل عن طريق sniffers
طريقة أخرى معقدة وهي عمل مكتبة dll تعدل على نفسها مع التشغيل كل مرة لأن الـ mql ما يسمح بالتعديل على الملف في وقت التشغيل runtime modification وما أظنه راح يسمح مستقبلا لأنه يعمل checksum على ملف الأكسبيرت
الطريقة الأفضل هو أستخدام تاريخ ثابت داخل الأكسبيرت وهو المتبع حاليا في أغلب الأكسبيرتات التي تعتمد على الوقت وهذي الطريقة وطريقة السيرفر لن يستطيع تخطيها إلا من يستطيع فتح الأكسبيرت
أشكر أخي محمد مرة أخرى وأنا سعيد لتواجدك في الموضوع
التوقيع
وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ
ربي أغفر لي ولوالدي وللمؤمنين والمؤمنات