Aller au contenu

Travailler avec des fichiers dans cTrader

Dans cet article et sa vidéo correspondante, nous expliquerons comment vous pouvez travailler avec des fichiers dans cTrader. En moyenne, les utilisateurs sont préoccupés par le lancement de cBots ou d'indicateurs demandant des droits d'accès complets à leur appareil. Surtout lorsqu'aucun code source n'est disponible, il est difficile de savoir ce que l'algorithme fait avec ces autorisations. Heureusement, cTrader fournit plusieurs méthodes qui permettent aux algorithmes d'accéder aux fichiers sur leur machine locale sans avoir besoin d'autorisations élevées.

Écrire dans le répertoire de l'algorithme

cTrader permet à tous les algorithmes d'accéder à un dossier avec cette adresse :

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

, où algoType est cBots ou Indicators.

Nous allons créer un exemple de cBot et démontrer comment vous pouvez accéder à ce répertoire par programmation.

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

Comme d'habitude, nous enregistrons et compilons le cBot, puis créons son instance.

Une fois l'instance démarrée, nous pouvons naviguer vers le dossier défini ci-dessus. Dedans, nous devrions voir le fichier Hello World.txt contenant le texte que nous avons spécifié dans notre code.

Lire à partir du répertoire de l'algorithme

L'étape suivante consiste à lire le contenu d'un fichier situé dans le répertoire de l'algorithme. Pour ce faire, nous pouvons réécrire notre méthode OnStart() comme suit.

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

Après avoir compilé et lancé notre cBot, nous verrons que l'algorithme imprime la chaîne du fichier dans le journal de cTrader.

Accéder à d'autres répertoires

Notez qu'aucune des opérations effectuées précédemment par notre cBot ne nécessitait de lui fournir des droits d'accès élevés. En fait, les droits d'accès ont été explicitement définis sur None au niveau de la classe.

Nous allons essayer d'écrire dans un fichier situé dans un répertoire différent et voir ce qui se passe. Nous allons modifier notre code pour écrire dans un fichier situé dans le répertoire racine Documents.

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

Une fois que nous aurons construit et exécuté à nouveau le cBot, nous verrons une exception levée dans le journal indiquant que nous ne sommes pas autorisés à écrire dans ce répertoire spécifique.

Pour résoudre ce problème, nous pouvons revenir au code du cBot et modifier ses droits d'accès comme suit.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Nous construisons et exécutons le cBot. Au lieu de lever une exception, le bot accédera désormais au répertoire spécifié et écrira dans le fichier correct.

Pour une démonstration supplémentaire du fonctionnement des droits d'accès, nous allons modifier la méthode OnStart() comme suit.

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

Nous allons également rétablir les droits d'accès sur None.

1
[Robot(AccessRights = AccessRights.None)]

Après le démarrage du cBot, nous verrons qu'il ne parvient pas à lire le fichier.