Zum Inhalt

Arbeiten mit Dateien in cTrader

In diesem Artikel und dem dazugehörigen Video werden wir erklären, wie Sie mit Dateien in cTrader arbeiten können. Im Durchschnitt sind Benutzer besorgt über das Starten von cBots oder Indikatoren, die vollständige Zugangsrechte zu ihrem Gerät anfordern. Besonders wenn kein Quellcode verfügbar ist, ist es schwierig zu wissen, was der Algorithmus mit diesen Berechtigungen macht. Glücklicherweise bietet cTrader mehrere Methoden, die es Algos ermöglichen, auf Dateien auf ihrem lokalen Rechner zuzugreifen, ohne erhöhte Berechtigungen zu benötigen.

In das Algo-Verzeichnis schreiben

cTrader ermöglicht allen Algos den Zugriff auf einen Ordner mit dieser Adresse:

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

, wobei algoType cBots oder Indicators ist.

Wir werden einen Beispiel-cBot erstellen und demonstrieren, wie Sie programmgesteuert auf dieses Verzeichnis zugreifen können.

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

Wie üblich speichern und erstellen wir den cBot und erstellen dann seine Instanz.

Nachdem die Instanz gestartet wurde, können wir zu dem oben definierten Ordner navigieren. Darin sollten wir die Datei Hello World.txt sehen, die den Text enthält, den wir in unserem Code angegeben haben.

Aus dem Algo-Verzeichnis lesen

Der nächste Schritt besteht darin, den Inhalt einer Datei zu lesen, die sich im Algo-Verzeichnis befindet. Dazu können wir unsere OnStart()-Methode wie folgt umschreiben.

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

Nachdem wir unseren cBot erstellt und gestartet haben, werden wir sehen, dass der Algo die Zeichenfolge aus der Datei in das cTrader-Protokoll ausgibt.

Auf andere Verzeichnisse zugreifen

Beachten Sie, dass keine der Operationen, die unser cBot zuvor durchgeführt hat, erforderte, ihm erhöhte Zugangsrechte zu gewähren. Tatsächlich wurden die Zugangsrechte auf Klassenebene explizit auf None gesetzt.

Wir werden versuchen, in eine Datei zu schreiben, die sich in einem anderen Verzeichnis befindet, und sehen, was passiert. Wir werden unseren Code ändern, um in eine Datei zu schreiben, die sich im Stammverzeichnis Documents befindet.

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

Sobald wir den cBot erneut erstellen und ausführen, werden wir sehen, dass im Protokoll eine Ausnahme ausgelöst wird, die anzeigt, dass wir nicht berechtigt sind, in dieses spezifische Verzeichnis zu schreiben.

Um dies zu lösen, können wir zum cBot-Code zurückkehren und seine Zugangsrechte wie folgt ändern.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Wir erstellen und führen den cBot aus. Anstatt eine Ausnahme auszulösen, greift der Bot nun auf das angegebene Verzeichnis zu und schreibt in die richtige Datei.

Für eine weitere Demonstration, wie Zugangsrechte funktionieren, werden wir die OnStart()-Methode wie folgt ändern.

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

Wir werden auch die Zugangsrechte wieder auf None setzen.

1
[Robot(AccessRights = AccessRights.None)]

Nachdem der cBot zu laufen beginnt, werden wir sehen, dass er nicht aus der Datei lesen kann.