ข้ามไปที่เนื้อหา

การทำงานกับไฟล์ใน cTrader

ในบทความนี้และวิดีโอที่เกี่ยวข้อง เราจะอธิบายวิธีการทำงานกับไฟล์ใน cTrader โดยเฉลี่ยแล้ว ผู้ใช้มักกังวลเกี่ยวกับการเปิดใช้งาน cBot หรืออินดิเคเตอร์ที่ร้องขอสิทธิ์ในการเข้าถึงอุปกรณ์ของพวกเขาอย่างเต็มที่ โดยเฉพาะอย่างยิ่งเมื่อไม่มีซอร์สโค้ดให้ใช้งาน จึงยากที่จะรู้ว่าอัลกอริทึมกำลังทำอะไรกับสิทธิ์เหล่านี้ โชคดีที่ cTrader มีหลายวิธีที่อนุญาตให้ Algo เข้าถึงไฟล์บนเครื่องของพวกเขาได้โดยไม่ต้องขอสิทธิ์ที่สูงขึ้น

เขียนไปยังไดเรกทอรี algo

cTrader อนุญาตให้ Algo ทั้งหมดเข้าถึงโฟลเดอร์ที่มีที่อยู่นี้:

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 ที่มีข้อความที่เราระบุไว้ในโค้ดของเรา

อ่านจากไดเรกทอรี algo

ขั้นตอนต่อไปคือการอ่านเนื้อหาของไฟล์ที่อยู่ในไดเรกทอรี algo เพื่อทำเช่นนั้น เราสามารถเขียนเมธอด OnStart() ของเราใหม่ดังนี้

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

หลังจากที่เราสร้างและเปิดใช้งาน cBot ของเรา เราจะเห็นว่า Algo พิมพ์สตริงจากไฟล์ไปยังบันทึกของ 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 เริ่มทำงาน เราจะเห็นว่ามันไม่สามารถอ่านจากไฟล์ได้