Lewati ke isi

Bekerja dengan berkas di cTrader

Dalam artikel ini dan video terkaitnya, kami akan menjelaskan cara Anda dapat bekerja dengan berkas di cTrader. Rata-rata, pengguna khawatir menjalankan cBot atau indikator yang meminta hak akses penuh ke perangkat mereka. Terutama ketika tidak ada kode sumber yang tersedia, sulit untuk mengetahui apa yang dilakukan algoritma dengan izin ini. Untungnya, cTrader menyediakan beberapa metode yang memungkinkan algo untuk mengakses berkas di mesin lokal mereka tanpa memerlukan izin tingkat tinggi.

cTrader memungkinkan semua algo untuk mengakses folder dengan alamat ini:

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

, di mana algoType adalah cBots atau Indicators.

Kami akan membuat contoh cBot dan menunjukkan cara Anda dapat mengakses direktori ini secara terprogram.

 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 membangun cBot, lalu membuat instansnya.

Setelah instans dimulai, kita dapat menavigasi ke folder yang ditentukan di atas. Di dalamnya, kita seharusnya melihat berkas Hello World.txt yang berisi teks yang kita tentukan dalam kode kita.

Membaca dari direktori algo

Langkah selanjutnya adalah membaca isi berkas yang terletak di direktori algo. Untuk melakukannya, kita dapat menulis ulang metode OnStart() kita sebagai berikut.

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

Setelah kita membangun dan meluncurkan cBot kita, kita akan melihat bahwa algo mencetak string dari berkas ke log cTrader.

Mengakses direktori lain

Perhatikan bahwa tidak ada operasi yang dilakukan cBot kita sebelumnya yang memerlukan pemberian hak akses tingkat tinggi. Sebenarnya, hak akses secara eksplisit diatur ke None pada tingkat kelas.

Kita akan mencoba menulis ke berkas yang terletak di direktori yang berbeda dan melihat apa yang terjadi. Kita akan memodifikasi kode kita untuk menulis ke berkas yang terletak di direktori Documents root.

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

Setelah kita membangun dan menjalankan cBot lagi, kita akan melihat pengecualian dilemparkan dalam log yang menunjukkan bahwa kita tidak diizinkan untuk menulis di direktori tertentu ini.

Untuk menyelesaikan ini, kita dapat kembali ke kode cBot dan mengubah hak aksesnya sebagai berikut.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Kita membangun dan menjalankan cBot. Alih-alih melemparkan pengecualian, bot sekarang akan mengakses direktori yang ditentukan dan menulis ke berkas yang benar.

Untuk satu demonstrasi lagi tentang cara kerja hak akses, kita akan memodifikasi metode OnStart() sebagai berikut.

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

Kita juga akan mengatur hak akses kembali ke None.

1
[Robot(AccessRights = AccessRights.None)]

Setelah cBot mulai berjalan, kita akan melihat bahwa ia gagal membaca dari berkas.