Bỏ qua

Làm việc với tệp trong cTrader

Trong bài viết này và video tương ứng, chúng tôi sẽ giải thích cách bạn có thể làm việc với tệp trong cTrader. Thông thường, người dùng lo ngại về việc khởi chạy các cBot hoặc chỉ báo yêu cầu quyền truy cập đầy đủ vào thiết bị của họ. Đặc biệt khi không có mã nguồn, rất khó để biết thuật toán đang làm gì với những quyền này. May mắn thay, cTrader cung cấp một số phương thức cho phép các thuật toán truy cập tệp trên máy cục bộ mà không cần quyền nâng cao.

Ghi vào thư mục thuật toán

cTrader cho phép tất cả các thuật toán truy cập một thư mục với địa chỉ này:

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

, trong đó algoTypecBots hoặc Indicators.

Chúng ta sẽ tạo một cBot ví dụ và minh họa cách bạn có thể truy cập thư mục này theo chương trình.

 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!");
        }
    }
}

Như thường lệ, chúng ta lưu và xây dựng cBot, sau đó tạo phiên bản của nó.

Sau khi phiên bản bắt đầu, chúng ta có thể điều hướng đến thư mục được xác định ở trên. Trong đó, chúng ta sẽ thấy tệp Hello World.txt chứa văn bản mà chúng ta đã chỉ định trong mã của mình.

Đọc từ thư mục thuật toán

Bước tiếp theo là đọc nội dung của một tệp nằm trong thư mục thuật toán. Để làm điều đó, chúng ta có thể viết lại phương thức OnStart() của mình như sau.

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

Sau khi chúng ta xây dựng và khởi chạy cBot, chúng ta sẽ thấy thuật toán in chuỗi từ tệp vào nhật ký cTrader.

Truy cập các thư mục khác

Lưu ý rằng không có hoạt động nào mà cBot của chúng ta thực hiện trước đó yêu cầu cung cấp quyền truy cập nâng cao. Thực tế, quyền truy cập đã được đặt rõ ràng thành None ở cấp độ lớp.

Chúng ta sẽ thử ghi vào một tệp nằm trong một thư mục khác và xem điều gì xảy ra. Chúng ta sẽ sửa đổi mã của mình để ghi vào một tệp nằm trong thư mục gốc Documents.

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

Khi chúng ta xây dựng và chạy lại cBot, chúng ta sẽ thấy một ngoại lệ được ném ra trong nhật ký cho biết chúng ta không được phép ghi vào thư mục cụ thể này.

Để giải quyết vấn đề này, chúng ta có thể quay lại mã cBot và thay đổi quyền truy cập của nó như sau.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Chúng ta xây dựng và chạy cBot. Thay vì ném ra một ngoại lệ, bot giờ đây sẽ truy cập thư mục đã chỉ định và ghi vào tệp chính xác.

Để minh họa thêm một lần nữa cách quyền truy cập hoạt động, chúng ta sẽ sửa đổi phương thức OnStart() như sau.

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

Chúng ta cũng sẽ đặt lại quyền truy cập thành None.

1
[Robot(AccessRights = AccessRights.None)]

Sau khi cBot bắt đầu chạy, chúng ta sẽ thấy rằng nó không thể đọc từ tệp.