كيفية العمل مع التخزين المحلي
في هذا المقال والفيديو المصاحب له، سنشرح ما هو التخزين المحلي وكيف يمكن استخدامه في خوارزميات cTrader الخاصة بك. سنقدم أيضًا أمثلة مفيدة ونشرح كيف يعمل نطاق التخزين المحلي.
لماذا نستخدم التخزين المحلي
هناك العديد من الحالات التي قد ترغب فيها أن تقوم خوارزميتك بحفظ شيء ما أو الوصول إلى شيء ما من نظام الملفات المحلي. على سبيل المثال، قد ترغب في حفظ سجل لجميع عمليات cBot. ومع ذلك، عادةً ما يتطلب هذا أن تتمتع الخوارزمية بحقوق وصول مرتفعة (AccessRights.FullAccess)، وهو أمر غير مثالي للمستخدمين. إذا طلبت خوارزمية من المستخدم توفير أذونات مرتفعة، فمن المرجح أن يكون المستخدم أقل ثقة بالخوارزمية، خاصة إذا تم توزيعها بدون كود المصدر الخاص بها. التخزين المحلي هو طريقة مريحة للوصول بأمان إلى نظام الملفات المحلي دون إثارة أي مخاوف أمنية. يسمح استخدام التخزين المحلي للمطورين بالحفاظ على حقوق الوصول لخوارزمياتهم معينة على AccessRights.None.
حفظ السلاسل النصية في التخزين المحلي
يحتوي كل نوع من خوارزميات cTrader على خاصية LocalStorage تسمح بتنفيذ عمليات القراءة والكتابة. لتوضيح كيفية عمل التخزين المحلي، سنقوم بإنشاء cBot جديد. في معالج OnStart الخاص به، سنستخدم طريقة LocalStorage.SetString(string key, string value). كما ترى، فإنها تأخذ وسيطين، وهما المفتاح الذي يجب حفظ المعلومات تحته والقيمة المراد حفظها.
1 | |
لاسترداد القيمة، سنستخدم طريقة GetString(string key) في معالج OnTick الخاص بـ cBot.
1 | |
طالما أن Message ليست فارغة، يمكننا بناء cBot ورؤية القيمة المستردة يتم طباعتها بشكل صحيح في السجل.
حفظ الكائنات في التخزين المحلي
بالإضافة إلى السلاسل النصية، يمكنك استخدام التخزين المحلي لحفظ أي نوع من الكائنات. في الكواليس، يقوم cTrader بتسلسل وإلغاء تسلسل الكائنات في التخزين المحلي مما يسمح بمشاركة أي نوع من البيانات. لتوضيح ذلك، يمكننا إنشاء فئة جديدة لتخزين المعلومات وحفظها واستردادها لاحقًا. سنسمي هذه الفئة Signal.
1 2 3 4 5 6 | |
في طريقة OnStart()، سننشئ مثيلًا جديدًا لهذه الفئة ونهيئ خصائصها.
1 2 3 4 5 | |
سنستخدم طريقة SetObject(string key, Object object) لحفظ واسترداد رصيد الحساب.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
إذا قمنا ببناء cBot الخاص بنا وتشغيله، يجب أن نرى القيم الصحيحة يتم طباعتها في السجل.
نطاقات التخزين المحلي
عند استخدام التخزين المحلي، يمكنك أيضًا تحديد النطاق الذي يتم فيه عرض القيم المحفوظة للاسترداد المستقبلي. هناك ثلاثة نطاقات مختلفة متاحة:
- نطاق المثيل - القيم المحفوظة متاحة فقط لمثيل محدد.
- نطاق النوع - القيم المحفوظة متاحة لجميع مثيلات خوارزمية معينة.
- نطاق الجهاز - القيم المحفوظة متاحة لجميع الخوارزميات بغض النظر عن أنواعها.
إليك كيف يمكن أن يبدو استخدام نطاق المثيل.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
لاحظ أننا حددنا النطاق بشكل صريح في طريقة SetString().
يمكننا إضافة العديد من مثيلات cBot هذا وتكوينها بحيث يكتب أحدها في التخزين المحلي بينما يسترد الآخر المعلومات. في هذه الحالة، يجب أن تكون قراءة المعلومات مستحيلة. ومع ذلك، إذا تم إعداد مثيل واحد فقط لتنفيذ عمليات الكتابة والقراءة معًا، فيجب أن يعمل cBot كما هو مقصود.
إليك مثال على استخدام نطاق النوع.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
إذا أنشأنا مثيلين لهذا الروبوت وقمنا بإعدادهما بحيث يكتب مثيل واحد في التخزين المحلي ويقرأ الآخر القيمة المحفوظة، يجب أن يعمل كل شيء دون إثارة أي أخطاء.
أخيرًا وليس آخرًا، يسمح نطاق الجهاز بتبادل المعلومات بين الخوارزميات المختلفة. إليك مثال على استخدام هذا النوع من النطاق.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
يمكننا بناء العديد من خوارزميات cBot التي تستخدم جميعها نفس الكود. إذا قمنا بإعدادها بشكل صحيح، يمكن لـ cBot واحد حفظ المعلومات في التخزين المحلي بينما يسترد آخر هذه المعلومات. طالما أن النطاق يساوي LocalStorageScope.Device، يجب أن يعمل نظامنا كما هو مقصود.
استخدام طرق Flush() و Reload()
إذا كنت ترغب في مشاركة المعلومات بين عدة مثيلات من cTrader، قم باستدعاء طرق Flush() و Reload().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
إذا قمنا ببناء العديد من خوارزميات cBot بهذا الكود وأجرينا تجربة لمشاركة المعلومات بين مثيلات مختلفة من cTrader، سنرى أن قيمنا المحفوظة يتم الاحتفاظ بها كما هو مقصود.