Aller au contenu

Opérations sur les fichiers

Les utilisateurs de la plateforme expriment des préoccupations justifiées concernant le lancement de cBots et d'indicateurs avec AccessRights.FullAccess. Cela est particulièrement vrai lorsqu'aucun code source n'est disponible, il est difficile de savoir avec certitude quelles modifications seront introduites par l'algorithme dans le système de fichiers. Dans le guide des droits d'accès, nous avons déjà conseillé que les cBots et indicateurs que vous partagez avec d'autres devraient recevoir AccessRights.None.

Ce guide API explique comment les algorithmes avec des AccessRights limités peuvent effectuer en toute sécurité des opérations avec des fichiers locaux.

Opérations sur les fichiers en une minute !

  • La fonctionnalité d'opérations sur les fichiers permet aux algorithmes avec des droits d'accès restreints de travailler avec des fichiers et des dossiers uniquement à l'intérieur d'un dossier désigné.
  • Le nom du dossier correspond au nom du cBot ou de l'indicateur.
  • Tous les autres répertoires du système de fichiers de l'utilisateur restent protégés de manière sécurisée contre tout accès non autorisé.
  • Dans l'API, la fonctionnalité d'opérations sur les fichiers est prise en charge uniquement pour les algorithmes .NET 6.0.

Règles des opérations sur les fichiers

Tout algorithme avec des droits d'accès restreints est autorisé à effectuer des opérations sur les fichiers uniquement dans un dossier désigné du système de fichiers de l'utilisateur. Chaque type d'algorithme localise son propre dossier comme indiqué ci-dessous (tels que les cBots et les indicateurs), avec un dossier distinct créé pour chaque nom d'algorithme.

Documents
|-cAlgo
  |-Data
    |-cBots
      |-${cBot Name}
    |-Indicators
      |-${Indicator Name}

Remarque

La fonctionnalité d'opérations sur les fichiers est disponible uniquement pour les algorithmes .NET 6.0.

Les règles suivantes déterminent le fonctionnement de la fonctionnalité d'opérations sur les fichiers dans l'API :

1. Chaque algorithme n'a accès qu'au dossier correspondant à son nom (y compris les sous-dossiers, le cas échéant).

2. S'il n'y a pas de dossier correspondant, un tel dossier est créé dans le système de fichiers selon le schéma ci-dessus lorsqu'une instance est lancée pour la première fois.

3. Si un nouveau dossier ne peut pas être créé, le cBot ou l'indicateur ne démarrera pas et une erreur sera signalée.

4. Dans le code de l'algorithme, vous n'avez pas besoin de spécifier le chemin complet vers le dossier correspondant. Au lieu de cela, les algorithmes utilisent un chemin relatif.

5. L'espace de noms System.IO offre une variété de classes (File, FileInfo, Directory. DirectoryInfo, Path, etc.) pour lesquelles des méthodes pertinentes peuvent être appelées pour exécuter des opérations avec des fichiers et des dossiers.

Vous trouverez ci-dessous quelques exemples de méthodes incluses dans les classes File et Directory.

Méthode Description
File.Create() Crée ou écrase un fichier dans le répertoire désigné.
File.WriteAllText() Crée un nouveau fichier, écrit la chaîne spécifiée dans le fichier et ferme le fichier.
File.Copy() Copie le fichier existant vers un nouveau fichier. L'écrasement d'un fichier portant le même nom n'est pas autorisé.
File.Delete() Supprime un fichier dans le répertoire désigné.
Directory.CreateDirectory() Crée un dossier ou un sous-dossier.
Directory.Delete() Supprime un dossier ou un sous-dossier.
Directory.Exists() Vérifie si le répertoire spécifié existe.
Directory.Move() Déplace le répertoire existant vers un nouveau répertoire spécifié.

Cas d'utilisation

Lors de l'appel de la méthode TakeChartshot(), vous n'avez pas besoin de spécifier le chemin complet vers le répertoire de destination après File.WriteAllBytes. En raison de la fonctionnalité d'opérations sur les fichiers, le chartshot sera enregistré dans le répertoire d'algorithme correspondant même si les droits d'accès sont AccessRights.None.

Créer un exemple de cBot

L'exemple de cBot ci-dessous a AccessRights.None, mais il crée un fichier texte dans le dossier correspondant nommé "File Access Test" immédiatement après son initialisation. Si un ordre de marché réussi est placé OnStart(), le cBot écrit un ID de position dans le fichier créé.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class MycBot : Robot
    {
        protected override void OnStart()
        {
            TradeResult result = ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);

            if (result.IsSuccessful)
            {
                string positionId = result.Position.Id.ToString();
                {
                    File.WriteAllText("My positions.txt", $"{positionId}");
                } 
            }
        }
    }
}

Fichier créé

Written Position ID

Paramètre File

Le type de paramètre File permet aux algorithmes d'accepter des entrées de fichiers de la part des utilisateurs via l'API. Il permet aux algorithmes de lire et d'écrire en toute sécurité dans un fichier sélectionné par l'utilisateur sur la machine locale.

Lorsqu'il est défini dans un algorithme :

  • Dans l'interface utilisateur de cTrader, le paramètre s'affiche sous forme de champ de texte avec un bouton Parcourir qui ouvre une boîte de dialogue de sélection de fichier.
  • Dans cTrader CLI, les utilisateurs peuvent transmettre directement un chemin de fichier comme valeur de paramètre.
  • L'algorithme reçoit un objet File fortement typé avec des méthodes de lecture et d'écriture intégrées.

Remarque

L'accès au fichier est limité au fichier explicitement fourni par l'utilisateur et n'accorde pas un accès illimité au système de fichiers local.

Le type de paramètre File peut être utilisé pour effectuer les opérations suivantes dans les algorithmes :

Opération Exemples
Entrée de données externes Lire des fichiers CSV ou texte, charger des ensembles de données personnalisés.
Sortie persistante Écrire des journaux dans un fichier, exporter des résultats.
Gestion de la configuration Charger des fichiers de configuration externes, maintenir de grands ensembles de paramètres.

Pour définir un paramètre de fichier, déclarez une propriété de type File et annotez-la avec l'attribut [Parameter].

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None)]
public class FileParameterTypeTest : Robot
{
    [Parameter(DefaultValue = @"C:\Data\input.txt")]
    public File DataFile { get; set; }

    protected override void OnStart()
    {
        Print($"Exists: {DataFile.Exists()}");
    }
}
La DefaultValue optionnelle peut être utilisée pour préremplir le paramètre avec un chemin de fichier, et le type File expose un ensemble de méthodes de haut niveau pour interagir avec le contenu du fichier.

Vous pouvez lire l'intégralité du fichier sous forme de texte ou sous forme de lignes individuelles.

1
2
var text = DataFile.ReadAllText();
var lines = DataFile.ReadLines();

Les opérations d'écriture écrasent le contenu existant du fichier.

1
DataFile.WriteAllText("This is a test", EncodingType.Ascii);

Vous pouvez ajouter du texte ou plusieurs lignes sans écraser le contenu existant.

1
2
DataFile.AppendAllText("This is a test", EncodingType.Utf8);
DataFile.AppendAllLines(new[] { "Line 1", "Line 2" }, EncodingType.Utf8);

Avant d'effectuer des opérations, vous pouvez vérifier si le fichier existe.

1
2
3
4
if (DataFile.Exists())
{
    Print("File is available");
}

Résumé

La fonctionnalité d'opérations sur les fichiers dans l'API permet toujours aux algorithmes avec des droits d'accès restreints de travailler avec des fichiers et des dossiers locaux. Vous pouvez utiliser des méthodes de l'espace de noms System.IO de C# pour programmer la façon dont les algorithmes effectueront de telles opérations dans les limites du dossier correspondant. Ainsi, les autres répertoires du système de fichiers de l'utilisateur restent entièrement protégés même si le code source de l'algorithme n'est pas disponible.