Ir para o conteúdo

Operações de ficheiros

Os utilizadores da plataforma expressam preocupações justificadas sobre a execução de cBots e indicadores com AccessRights.FullAccess. Isto é especialmente verdade quando não há código-fonte disponível, é difícil saber com certeza quais alterações serão introduzidas pelo algoritmo no sistema de ficheiros. No guia de direitos de acesso, já aconselhamos que os cBots e indicadores que está a partilhar com outros devem receber AccessRights.None.

Este guia da API explica como os algoritmos com AccessRights limitados podem realizar operações seguras com ficheiros locais.

Operações de ficheiros em um minuto!

  • A funcionalidade de operações de ficheiros permite que algoritmos com direitos de acesso restritos trabalhem com ficheiros e pastas apenas dentro de uma pasta designada.
  • O nome da pasta corresponde ao nome do cBot ou indicador.
  • Todos os outros diretórios do sistema de ficheiros do utilizador permanecem protegidos de acesso não autorizado.
  • Na API, a funcionalidade de operações de ficheiros é suportada apenas para algoritmos .NET 6.0.

Regras das operações de ficheiros

Qualquer algoritmo com direitos de acesso restritos tem permissão para realizar operações de ficheiros apenas numa pasta designada do sistema de ficheiros do utilizador. Cada tipo de algoritmo localiza a sua própria pasta como mostrado abaixo (como cBots e indicadores), com uma pasta separada criada para cada nome de algoritmo.

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

Nota

A funcionalidade de operações de ficheiros está disponível apenas para algoritmos .NET 6.0.

As seguintes regras determinam como a funcionalidade de operações de ficheiros funciona na API:

1. Cada algoritmo tem acesso apenas à pasta correspondente ao seu nome (incluindo subpastas, se houver).

2. Se não houver uma pasta correspondente, essa pasta é criada no sistema de ficheiros de acordo com o esquema acima quando uma instância é iniciada pela primeira vez.

3. Se não for possível criar uma nova pasta, o cBot ou indicador não será iniciado e um erro será reportado.

4. No código do algoritmo, não é necessário especificar o caminho completo para a pasta correspondente. Em vez disso, os algoritmos usam um caminho relativo.

5. O namespace System.IO oferece uma variedade de classes (File, FileInfo, Directory. DirectoryInfo, Path, etc.) para as quais métodos relevantes podem ser chamados para executar operações com ficheiros e pastas.

Abaixo estão alguns exemplos dos métodos incluídos nas classes File e Directory.

Método Descrição
File.Create() Cria ou sobrescreve um ficheiro no diretório designado.
File.WriteAllText() Cria um novo ficheiro, escreve a string especificada no ficheiro e fecha o ficheiro.
File.Copy() Copia o ficheiro existente para um novo ficheiro. Não é permitido sobrescrever um ficheiro com o mesmo nome.
File.Delete() Elimina um ficheiro no diretório designado.
Directory.CreateDirectory() Cria uma pasta ou uma subpasta.
Directory.Delete() Elimina uma pasta ou uma subpasta.
Directory.Exists() Verifica se o diretório especificado existe.
Directory.Move() Move o diretório existente para um novo diretório especificado.

Caso de uso

Ao chamar o método TakeChartshot(), não é necessário especificar o caminho completo do diretório de gravação após File.WriteAllBytes. Devido à natureza das operações de ficheiros, o chartshot será guardado num diretório relacionado com o algoritmo, mesmo com AccessRights.None.

Criar um exemplo de cBot

O exemplo de cBot abaixo tem AccessRights.None, mas cria um ficheiro de texto na pasta correspondente chamado "File Access Test" imediatamente após a sua inicialização. Se uma ordem de mercado for colocada com sucesso OnStart(), o cBot escreve um ID de posição no ficheiro criado.

 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

Resumo

O recurso de operações de ficheiros na API ainda permite que algoritmos com direitos de acesso restritos trabalhem com ficheiros e pastas locais. Pode usar métodos do namespace System.IO do C# para programar como os algoritmos realizarão tais operações dentro dos limites da pasta correspondente. Assim, outros diretórios no sistema de ficheiros do utilizador permanecem totalmente protegidos, mesmo se o código-fonte do algoritmo não estiver disponível.