Saltar a contenido

Trabajar con archivos en cTrader

En este artículo y su video correspondiente, explicaremos cómo puede trabajar con archivos en cTrader. En promedio, los usuarios se preocupan por ejecutar cBots o indicadores que solicitan derechos de acceso completos a su dispositivo. Especialmente cuando no hay código fuente disponible, es difícil saber qué está haciendo el algoritmo con estos permisos. Afortunadamente, cTrader proporciona varios métodos que permiten a los algoritmos acceder a archivos en su máquina local sin necesidad de permisos elevados.

Escribir en el directorio del algoritmo

cTrader permite a todos los algoritmos acceder a una carpeta con esta dirección:

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

, donde algoType es cBots o Indicators.

Crearemos un cBot de ejemplo y demostraremos cómo puede acceder a este directorio programáticamente.

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

Como de costumbre, guardamos y construimos el cBot, luego creamos su instancia.

Después de que la instancia se inicie, podemos navegar a la carpeta definida anteriormente. En ella, deberíamos ver el archivo Hello World.txt que contiene el texto que especificamos en nuestro código.

Leer desde el directorio del algoritmo

El siguiente paso es leer el contenido de un archivo ubicado en el directorio del algoritmo. Para hacerlo, podemos reescribir nuestro método OnStart() de la siguiente manera.

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

Después de construir y lanzar nuestro cBot, veremos que el algoritmo imprime la cadena del archivo en el registro de cTrader.

Acceder a otros directorios

Tenga en cuenta que ninguna de las operaciones que nuestro cBot realizó anteriormente requirió proporcionarle derechos de acceso elevados. De hecho, los derechos de acceso se establecieron explícitamente en None a nivel de clase.

Intentaremos escribir en un archivo ubicado en un directorio diferente y veremos qué sucede. Modificaremos nuestro código para escribir en un archivo ubicado en el directorio raíz Documents.

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

Una vez que construyamos y ejecutemos el cBot de nuevo, veremos una excepción lanzada en el registro que indica que no estamos autorizados para escribir en este directorio específico.

Para resolver esto, podemos volver al código del cBot y cambiar sus derechos de acceso de la siguiente manera.

1
[Robot(AccessRights = AccessRights.FullAccess)]

Construimos y ejecutamos el cBot. En lugar de lanzar una excepción, el bot ahora accederá al directorio especificado y escribirá en el archivo correcto.

Para una demostración más de cómo funcionan los derechos de acceso, modificaremos el método OnStart() de la siguiente manera.

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

También estableceremos los derechos de acceso de vuelta a None.

1
[Robot(AccessRights = AccessRights.None)]

Después de que el cBot comience a ejecutarse, veremos que falla al leer desde el archivo.