Armazenamento local
Neste guia, explicamos como pode trabalhar com armazenamento local ao desenvolver algoritmos cTrader. Abaixo, fornecemos um resumo de um minuto sobre como funciona o acesso ao armazenamento local.
Armazenamento local em um minuto!
- O armazenamento local permite-lhe guardar informações no seu sistema de ficheiros local. Use-o para persistir dados entre duas ou mais implementações dos seus cBots e indicadores.
- Para guardar dados, use os métodos
SetString(string key, string value)eSetObject(string key, object obj). Para recuperá-los, invoque os métodosGetString(string key)eT GetObject<T>(string key). - Especifique o seu âmbito de armazenamento local preferido usando o enum
LocalStorageScope. Por exemplo, a sobrecargaSetString(string key, string value, LocalStorageScope.Device)guardará dados no seu diretórioDocuments/cAlgo/LocalStorage/. - Embora as informações sejam guardadas automaticamente a cada minuto, pode usar o método
Flush(LocalStorageScope localStorageScope)para armazenar dados sem atrasos. - Durante testes de verificação e otimização, o armazenamento local guarda dados apenas na memória.
Usar armazenamento local
Pense no armazenamento local como uma forma de armazenar informações entre uma ou várias paragens e inícios dos seus cBots e indicadores. Este recurso permite guardar dados de cBot e indicadores e depois aceder a essas informações de várias maneiras, dependendo das suas necessidades. O armazenamento local funciona independentemente dos direitos de acesso concedidos a um algoritmo.
A interface LocalStorage contém todos os métodos que pode usar para armazenar e aceder a dados de e para o armazenamento local. Alguns exemplos desses métodos incluem os seguintes:
SetString(string key, string value)- guarda um valor de string combinando-o com a chave especificada.SetObject(string key, object obj)- guarda um objeto combinando-o com a chave especificada.GetString(string key)- recupera um valor de string guardado encontrando-o sob a chave especificada.T GetObject<T>(string key)- recupera um objeto guardado do tipoTdo armazenamento local encontrando-o sob a chave especificada.
Aviso
Os métodos SetObject(string key, object obj) e GetObject<T>(string key) só funcionam com tipos de dados que podem ser serializados (convertidos em bytes).
Considere o seguinte exemplo no qual pedimos a uma instância de cBot para guardar uma mensagem de exemplo no início. Em inícios subsequentes, a mesma instância exibirá uma caixa de mensagem contendo a nossa mensagem.
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 30 31 32 33 | |
Após uma instância do cBot acima ser lançada pela primeira vez, ela guarda a nossa mensagem de exemplo no armazenamento local. Depois de parar a instância e iniciá-la novamente, a seguinte caixa de mensagem é mostrada.

Note que o armazenamento local funciona mesmo quando AccessRights.None é especificado.
Defina o âmbito do armazenamento local
O âmbito do armazenamento local (definido através do tipo LocalStorageScope) determina onde exatamente a informação é armazenada e como pode ser acedida. Este enum contém as seguintes constantes:
LocalStorageScope.Instance- os dados guardados são armazenados e só podem ser acedidos por uma instância específica em execução de um cBot ou indicador. A informação é guardada no diretórioDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. Neste caminho, "AlgoType" denota o tipo de extensão cTrader que trabalha com o armazenamento local (cBotsouIndicators) enquantoAlgoNameé o nome de um cBot/indicador específico.InstanceUniqueIdentifieré o ID único de uma instância específica de um cBot ou indicador em particular.LocalStorageScope.Type- os dados guardados são armazenados e podem ser acedidos por todas as instâncias em execução de um cBot ou indicador em particular. A informação é guardada no diretórioDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.LocalStorageScope.Device- os dados guardados são armazenados e podem ser acedidos por todas as instâncias em execução de cBots e indicadores no dispositivo atual. A informação é guardada no diretório "Documents/cAlgo/LocalStorage/".
Por sua vez, métodos como SetString() e SetObject() têm sobrecargas adicionais que permitem especificar um âmbito de armazenamento local personalizado. Por exemplo, o seguinte código irá guardar uma string em LocalStorageScope.Type; esta string, subsequentemente, será acessível a todas as extensões de um tipo particular.
1 | |
Se LocalStorageScope não for especificado como um parâmetro, LocalStorageScope.Instance é utilizado por predefinição.
Note que este comportamento é diferente para os métodos GetString(string key) e T GetObject<T>(string key). Quando estes métodos são invocados sem especificar o âmbito do armazenamento local, irão procurar pela chave especificada em todos os âmbitos seguindo a hierarquia abaixo:
- Instância
- Tipo
- Dispositivo
Adicionalmente, cada âmbito de armazenamento local diferente tem a sua própria quota de espaço em disco:
LocalStorageScope.Instanceestá limitado a 10 MB.LocalStorageScope.Typeestá limitado a 100 MB.LocalStorageScope.Deviceestá limitado a 500 MB.
Os limites definidos acima não são cumulativos. Por exemplo, se já tiver utilizado todos os 500 MB de armazenamento ao nível do dispositivo, ainda poderá armazenar informação utilizando o armazenamento ao nível da instância até atingir o seu limite de 10 MB.
Como funciona o armazenamento e carregamento de informação
Ao armazenar informação no armazenamento local (por exemplo, invocando o método SetString()), o cTrader guarda automaticamente os dados a cada minuto. Os dados também são guardados quando a instância é parada.
No entanto, pode personalizar este comportamento utilizando os seguintes métodos:
Flush(LocalStorageScope localStorageScope)- guarda todos os dados no âmbito especificado.Reload(LocalStorageScope localStorageScope)- recarrega todos os valores do âmbito especificado.
Tenha em mente que, ao chamar o método Reload(LocalStorageScope localStorageScope, quaisquer alterações pendentes podem ser perdidas. Para evitar isto, certifique-se de invocar Flush(LocalStorageScope localStorageScope) antes.
No exemplo abaixo, pedimos a um cBot para executar uma ordem de mercado. Após esta ação ser concluída, guardamos imediatamente o P&L bruto da posição que acabámos de abrir em LocalStorageScope.Type.
1 2 3 4 5 | |
Armazenamento local em testes de verificação e otimização
O armazenamento local funciona de forma diferente nos testes de verificação em comparação com a negociação em tempo real.
Como mostrado anteriormente, o armazenamento local utiliza o sistema de ficheiros da sua máquina local quando esta funcionalidade é utilizada na negociação em tempo real. No entanto, utilizar o sistema de ficheiros nos testes de verificação levaria a vários problemas, nomeadamente guardar grandes quantidades de dados que não tinham relação com os movimentos de mercado e operações de negociação atuais.
Para evitar estes problemas, todas as operações com o armazenamento local são conduzidas apenas na memória ao realizar testes de verificação ou otimizar os seus cBots. Como resultado, pode ter a certeza de que todos os dados guardados no seu sistema de ficheiros dizem respeito apenas à negociação em tempo real.
Em resumo, o armazenamento local é uma funcionalidade altamente benéfica da API Algo que permite persistir dados entre várias paragens e inícios de vários cBots e indicadores. Ao utilizar o armazenamento local de forma eficaz, pode criar estratégias de negociação automatizadas complexas baseadas em dados personalizados guardados no seu sistema de ficheiros.