Saltar a contenido

Operaciones con archivos

Los usuarios de la plataforma expresan preocupaciones justificadas sobre el lanzamiento de cBots e indicadores con AccessRights.FullAccess. Esto es especialmente cierto cuando no hay código fuente disponible, es difícil saber con certeza qué cambios introducirá el algoritmo en el sistema de archivos. En la guía de derechos de acceso, ya hemos aconsejado que los cBots e indicadores que comparta con otros deben recibir AccessRights.None.

Esta guía de API explica cómo los algoritmos con AccessRights limitados pueden realizar operaciones seguras con archivos locales.

¡Operaciones con archivos en un minuto!

  • La función de operaciones con archivos permite a los algoritmos con derechos de acceso restringidos trabajar con archivos y carpetas solo dentro de una carpeta designada.
  • El nombre de la carpeta corresponde al nombre del cBot o indicador.
  • Todos los demás directorios del sistema de archivos del usuario permanecen protegidos de forma segura contra el acceso no autorizado.
  • En la API, la función de operaciones con archivos solo es compatible con algoritmos .NET 6.0.

Reglas de las operaciones con archivos

Cualquier algoritmo con derechos de acceso restringidos puede realizar operaciones con archivos solo en una carpeta designada del sistema de archivos del usuario. Cada tipo de algoritmo localiza su propia carpeta como se muestra a continuación (como cBots e indicadores), con una carpeta separada creada para cada nombre de algoritmo.

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

Nota

La función de operaciones con archivos está disponible solo para algoritmos .NET 6.0.

Las siguientes reglas determinan cómo funciona la función de operaciones con archivos en la API:

1. Cada algoritmo tiene acceso solo a la carpeta correspondiente a su nombre (incluidas las subcarpetas, si las hay).

2. Si no existe una carpeta correspondiente, se crea dicha carpeta en el sistema de archivos según el esquema anterior cuando se inicia una instancia por primera vez.

3. Si no se puede crear una nueva carpeta, el cBot o indicador no se iniciará y se informará un error.

4. En el código del algoritmo, no es necesario especificar la ruta completa a la carpeta correspondiente. En su lugar, los algoritmos utilizan una ruta relativa.

5. El espacio de nombres System.IO ofrece una variedad de clases (File, FileInfo, Directory. DirectoryInfo, Path, etc.) para las cuales se pueden llamar métodos relevantes para ejecutar operaciones con archivos y carpetas.

A continuación se muestran algunos ejemplos de los métodos incluidos en las clases File y Directory.

Método Descripción
File.Create() Crea o sobrescribe un archivo en el directorio designado.
File.WriteAllText() Crea un nuevo archivo, escribe la cadena especificada en el archivo y cierra el archivo.
File.Copy() Copia el archivo existente a un nuevo archivo. No se permite sobrescribir un archivo con el mismo nombre.
File.Delete() Elimina un archivo en el directorio designado.
Directory.CreateDirectory() Crea una carpeta o una subcarpeta.
Directory.Delete() Elimina una carpeta o una subcarpeta.
Directory.Exists() Comprueba si existe el directorio especificado.
Directory.Move() Mueve el directorio existente a un nuevo directorio especificado.

Caso de uso

Al llamar al TakeChartshot() método, no es necesario especificar la ruta completa del directorio de destino después de File.WriteAllBytes. Debido a la característica de las operaciones de archivos, la captura de pantalla del gráfico se guardará en el directorio relacionado con el algoritmo incluso si los derechos de acceso son AccessRights.None.

Crear un ejemplo de cBot

El siguiente ejemplo de cBot tiene AccessRights.None, pero crea un archivo de texto en la carpeta correspondiente llamada "File Access Test" inmediatamente después de su inicialización. Si se coloca una orden de mercado exitosa OnStart(), el cBot escribe un ID de posición en el archivo creado.

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

Created File

Written Position ID

Resumen

La función de operaciones con archivos en la API aún permite que los algoritmos con derechos de acceso restringidos trabajen con archivos y carpetas locales. Puede utilizar métodos del espacio de nombres System.IO de C# para programar cómo los algoritmos realizarán dichas operaciones dentro de los límites de la carpeta correspondiente. Por lo tanto, otros directorios en el sistema de archivos del usuario permanecen completamente protegidos incluso si el código fuente del algoritmo no está disponible.