انتقل إلى المحتوى

العمل مع الملفات في cTrader

في هذا المقال والفيديو المصاحب له، سنشرح كيف يمكنك العمل مع الملفات في cTrader. في المتوسط، يقلق المستخدمون بشأن تشغيل cBots أو المؤشرات التي تطلب حقوق وصول كاملة إلى أجهزتهم. خاصة عندما لا يكون الكود المصدري متاحًا، من الصعب معرفة ما تفعله الخوارزمية بهذه الأذونات. لحسن الحظ، توفر cTrader العديد من الطرق التي تسمح للخوارزميات بالوصول إلى الملفات على أجهزتهم المحلية دون الحاجة إلى أذونات مرتفعة.

الكتابة في دليل الخوارزمية

تسمح cTrader لجميع الخوارزميات بالوصول إلى مجلد بهذا العنوان:

C:/Users/{username}/Documents/cAlgo/Data/{algoType}

، حيث algoType هو cBots أو Indicators.

سننشئ مثالاً لـ cBot ونوضح كيف يمكنك الوصول إلى هذا الدليل برمجيًا.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using System.IO;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class FileBot : Robot
    {

        protected override void OnStart()
        {
            File.WriteAllText("Hello World.txt", "Hello World!");
        }
    }
}

كالمعتاد، نقوم بحفظ وبناء cBot، ثم إنشاء نسخة منه.

بعد بدء تشغيل النسخة، يمكننا الانتقال إلى المجلد المحدد أعلاه. فيه، يجب أن نرى ملف Hello World.txt الذي يحتوي على النص الذي حددناه في الكود الخاص بنا.

القراءة من دليل الخوارزمية

الخطوة التالية هي قراءة محتويات ملف موجود في دليل الخوارزمية. للقيام بذلك، يمكننا إعادة كتابة طريقة OnStart() الخاصة بنا كما يلي.

1
2
3
4
protected override void OnStart()
{
        Print(File.ReadAllText("Hello Word.txt"));
}

بعد أن نقوم ببناء وتشغيل cBot الخاص بنا، سنرى أن الخوارزمية تطبع السلسلة من الملف إلى سجل cTrader.

الوصول إلى الأدلة الأخرى

لاحظ أن أيًا من العمليات التي قام بها cBot الخاص بنا في وقت سابق لم تتطلب تزويده بحقوق وصول مرتفعة. في الواقع، تم تعيين حقوق الوصول صراحةً إلى None على مستوى الفئة.

سنحاول الكتابة في ملف موجود في دليل مختلف ونرى ماذا يحدث. سنقوم بتعديل الكود الخاص بنا للكتابة في ملف موجود في دليل Documents الجذر.

1
2
3
4
protected override void OnStart()
{
    File.WriteAllText("C://OneDrive//Documents//Hello World.txt", "Hello World!");
}

بمجرد أن نقوم ببناء وتشغيل cBot مرة أخرى، سنرى استثناءً يتم رميه في السجل يشير إلى أننا غير مصرح لنا بالكتابة في هذا الدليل المحدد.

لحل هذا، يمكننا العودة إلى كود cBot وتغيير حقوق الوصول الخاصة به كما يلي.

1
[Robot(AccessRights = AccessRights.FullAccess)]

نقوم ببناء وتشغيل cBot. بدلاً من رمي استثناء، سيقوم البوت الآن بالوصول إلى الدليل المحدد والكتابة في الملف الصحيح.

لمزيد من التوضيح حول كيفية عمل حقوق الوصول، سنقوم بتعديل طريقة OnStart() كما يلي.

1
2
3
4
protected override void OnStart()
{
        Print(File.ReadAllText("C://OneDrive//Documents//Hello World.txt"));
}

سنقوم أيضًا بإعادة تعيين حقوق الوصول إلى None.

1
[Robot(AccessRights = AccessRights.None)]

بعد أن يبدأ cBot في التشغيل، سنرى أنه يفشل في القراءة من الملف.