Langkau tajuk talian

Bekerja dengan fail dalam cTrader

Dalam artikel ini dan video yang berkaitan, kami akan menerangkan cara anda boleh bekerja dengan fail dalam cTrader. Secara purata, pengguna bimbang tentang pelancaran cBot atau indikator yang meminta hak akses penuh kepada peranti mereka. Terutamanya apabila tiada kod sumber tersedia, sukar untuk mengetahui apa yang dilakukan oleh algoritma dengan kebenaran ini. Nasib baik, cTrader menyediakan beberapa kaedah yang membolehkan algo mengakses fail pada mesin tempatan tanpa memerlukan kebenaran yang lebih tinggi.

Tulis ke direktori algo

cTrader membenarkan semua algo mengakses folder dengan alamat ini:

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

, di mana algoType ialah cBots atau Indicators.

Kami akan mencipta contoh cBot dan menunjukkan cara anda boleh mengakses direktori ini secara programatik.

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

Seperti biasa, kami menyimpan dan membina cBot, kemudian mencipta contohnya.

Selepas contoh bermula, kita boleh menavigasi ke folder yang ditakrifkan di atas. Di dalamnya, kita sepatutnya melihat fail Hello World.txt yang mengandungi teks yang kita nyatakan dalam kod kita.

Baca dari direktori algo

Langkah seterusnya ialah membaca kandungan fail yang terletak dalam direktori algo. Untuk berbuat demikian, kita boleh menulis semula kaedah OnStart() kita seperti berikut.

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

Selepas kita membina dan melancarkan cBot kita, kita akan melihat bahawa algo mencetak rentetan dari fail ke log cTrader.

Akses direktori lain

Perhatikan bahawa tiada satu pun operasi yang dilakukan oleh cBot kita sebelum ini memerlukan pemberian hak akses yang lebih tinggi. Malah, hak akses telah ditetapkan secara eksplisit kepada None pada tahap kelas.

Kita akan cuba menulis ke fail yang terletak dalam direktori yang berbeza dan melihat apa yang berlaku. Kita akan mengubah suai kod kita untuk menulis ke fail yang terletak dalam direktori Documents akar.

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

Sebaik sahaja kita membina dan menjalankan cBot sekali lagi, kita akan melihat pengecualian dilemparkan dalam log yang menunjukkan bahawa kita tidak dibenarkan untuk menulis dalam direktori tertentu ini.

Untuk menyelesaikannya, kita boleh kembali ke kod cBot dan menukar hak aksesnya seperti berikut.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Kita membina dan menjalankan cBot. Bukannya melontarkan pengecualian, bot kini akan mengakses direktori yang dinyatakan dan menulis ke fail yang betul.

Untuk satu lagi demonstrasi tentang cara hak akses berfungsi, kita akan mengubah suai kaedah OnStart() seperti berikut.

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

Kita juga akan menetapkan hak akses kembali kepada None.

1
[Robot(AccessRights = AccessRights.None)]

Selepas cBot mula berjalan, kita akan melihat bahawa ia gagal membaca dari fail.