Vai al contenuto

Lavorare con i file in cTrader

In questo articolo e nel video corrispondente spiegheremo come puoi lavorare con i file in cTrader. In media, gli utenti sono preoccupati di avviare cBot o indicatori che richiedono diritti di accesso completo al loro dispositivo. Soprattutto quando non è disponibile il codice sorgente, è difficile sapere cosa sta facendo l'algoritmo con queste autorizzazioni. Fortunatamente, cTrader fornisce diversi metodi che consentono agli algoritmi di accedere ai file sul proprio computer locale senza necessitare di autorizzazioni elevate.

Scrivere nella directory dell'algoritmo

cTrader consente a tutti gli algoritmi di accedere a una cartella con questo indirizzo:

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

, dove algoType è cBots o Indicators.

Creeremo un cBot di esempio e dimostreremo come puoi accedere a questa directory in modo programmatico.

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

Come al solito, salviamo e creiamo il cBot, quindi creiamo la sua istanza.

Dopo l'avvio dell'istanza, possiamo navigare nella cartella definita sopra. Al suo interno dovremmo vedere il file Hello World.txt contenente il testo che abbiamo specificato nel nostro codice.

Leggere dalla directory dell'algoritmo

Il passo successivo è leggere il contenuto di un file situato nella directory dell'algoritmo. Per farlo, possiamo riscrivere il nostro metodo OnStart() come segue.

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

Dopo aver creato e avviato il nostro cBot, vedremo che l'algoritmo stampa la stringa dal file nel log di cTrader.

Accedere ad altre directory

Nota che nessuna delle operazioni eseguite in precedenza dal nostro cBot richiedeva di fornirgli diritti di accesso elevati. In effetti, i diritti di accesso erano esplicitamente impostati su None a livello di classe.

Proveremo a scrivere in un file situato in una directory diversa e vedremo cosa succede. Modificheremo il nostro codice per scrivere in un file situato nella directory radice Documents.

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

Una volta che creiamo ed eseguiamo nuovamente il cBot, vedremo un'eccezione generata nel log che indica che non siamo autorizzati a scrivere in questa directory specifica.

Per risolvere questo problema, possiamo tornare al codice del cBot e modificare i suoi diritti di accesso come segue.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Creiamo ed eseguiamo il cBot. Invece di generare un'eccezione, il bot accederà ora alla directory specificata e scriverà nel file corretto.

Per un'ulteriore dimostrazione di come funzionano i diritti di accesso, modificheremo il metodo OnStart() come segue.

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

Imposteremo anche i diritti di accesso di nuovo su None.

1
[Robot(AccessRights = AccessRights.None)]

Dopo che il cBot inizia a essere eseguito, vedremo che non riesce a leggere dal file.