Almacenamiento local
En esta guía, explicamos cómo puede trabajar con el almacenamiento local al desarrollar algoritmos de cTrader. A continuación, proporcionamos un resumen de un minuto sobre cómo funciona el acceso al almacenamiento local.
¡Almacenamiento local en un minuto!
- El almacenamiento local le permite guardar información en su sistema de archivos local. Úselo para persistir datos entre dos o más implementaciones de sus cBots e indicadores.
- Para guardar datos, use los métodos
SetString(string key, string value)ySetObject(string key, object obj). Para recuperarlos, invoque los métodosGetString(string key)yT GetObject<T>(string key). - Especifique su ámbito de almacenamiento local preferido utilizando la enumeración
LocalStorageScope. Por ejemplo, la sobrecargaSetString(string key, string value, LocalStorageScope.Device)guardará datos en su directorioDocuments/cAlgo/LocalStorage/. - Aunque la información se guarda automáticamente cada minuto, puede usar el método
Flush(LocalStorageScope localStorageScope)para almacenar datos sin demoras. - Durante el backtesting y la optimización, el almacenamiento local almacena datos solo en memoria.
Uso del almacenamiento local
Piense en el almacenamiento local como una forma de almacenar información entre una o varias paradas e inicios de sus cBots e indicadores. Esta característica permite guardar datos de cBot e indicadores y luego acceder a esta información de varias maneras según sus necesidades. El almacenamiento local funciona independientemente de los derechos de acceso otorgados a un algoritmo.
La interfaz LocalStorage contiene todos los métodos que puede usar para almacenar y acceder a datos desde y hacia el almacenamiento local. Algunos ejemplos de estos métodos incluyen los siguientes:
SetString(string key, string value)- guarda un valor de cadena emparejándolo con la clave especificada.SetObject(string key, object obj)- guarda un objeto emparejándolo con la clave especificada.GetString(string key)- recupera un valor de cadena guardado encontrándolo bajo la clave especificada.T GetObject<T>(string key)- recupera un objeto guardado de tipoTdel almacenamiento local encontrándolo bajo la clave especificada.
Advertencia
Los métodos SetObject(string key, object obj) y GetObject<T>(string key) solo funcionan con tipos de datos que pueden ser serializados (convertidos en bytes).
Considere el siguiente ejemplo en el que pedimos a una instancia de cBot que guarde un mensaje de ejemplo al inicio. En inicios posteriores, la misma instancia mostrará un cuadro de mensaje que contiene nuestro mensaje.
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 | |
Después de que se lance una instancia del cBot anterior por primera vez, guarda nuestro mensaje de ejemplo en el almacenamiento local. Después de detener la instancia e iniciarla nuevamente, se muestra el siguiente cuadro de mensaje.

Tenga en cuenta que el almacenamiento local funciona incluso cuando se especifica AccessRights.None.
Definir el ámbito del almacenamiento local
El ámbito del almacenamiento local (definido a través del tipo LocalStorageScope) determina exactamente dónde se almacena la información y cómo se puede acceder a ella. Esta enum contiene las siguientes constantes:
LocalStorageScope.Instance- los datos guardados se almacenan y solo pueden ser accedidos por una instancia específica en ejecución de un cBot o indicador. La información se guarda en el directorioDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. En esta ruta, "AlgoType" denota el tipo de extensión de cTrader que trabaja con el almacenamiento local (cBotsoIndicators) mientras queAlgoNamees el nombre de un cBot/indicador específico.InstanceUniqueIdentifieres el ID único de una instancia específica de un cBot o indicador particular.LocalStorageScope.Type- los datos guardados se almacenan y pueden ser accedidos por todas las instancias en ejecución de un cBot o indicador particular. La información se guarda en el directorioDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.LocalStorageScope.Device- los datos guardados se almacenan y pueden ser accedidos por todas las instancias en ejecución de cBots e indicadores en el dispositivo actual. La información se guarda en el directorio "Documents/cAlgo/LocalStorage/".
A su vez, métodos como SetString() y SetObject() tienen sobrecargas adicionales que permiten especificar un ámbito de almacenamiento local personalizado. Por ejemplo, el siguiente código guardará una cadena en LocalStorageScope.Type; esta cadena, posteriormente, será accesible para todas las extensiones de un tipo particular.
1 | |
Si LocalStorageScope no se especifica como parámetro, se usa LocalStorageScope.Instance por defecto.
Tenga en cuenta que este comportamiento es diferente para los métodos GetString(string key) y T GetObject<T>(string key). Cuando estos métodos se invocan sin especificar el ámbito del almacenamiento local, buscarán la clave especificada en todos los ámbitos siguiendo la siguiente jerarquía:
- Instancia
- Tipo
- Dispositivo
Además, cada ámbito de almacenamiento local diferente tiene su propia cuota de espacio en disco:
LocalStorageScope.Instanceestá limitado a 10 MB.LocalStorageScope.Typeestá limitado a 100 MB.LocalStorageScope.Deviceestá limitado a 500 MB.
Los límites definidos anteriormente no son acumulativos. Por ejemplo, si ya ha utilizado los 500 MB de almacenamiento a nivel de dispositivo, aún podrá almacenar información utilizando el almacenamiento a nivel de instancia hasta alcanzar su límite de 10 MB.
Cómo funciona el guardado y la carga de información
Al almacenar información en el almacenamiento local (por ejemplo, al invocar el método SetString()), cTrader guarda automáticamente los datos cada minuto. Los datos también se guardan al detener la instancia.
Sin embargo, puede personalizar este comportamiento utilizando los siguientes métodos:
Flush(LocalStorageScope localStorageScope)- guarda todos los datos en el ámbito especificado.Reload(LocalStorageScope localStorageScope)- recarga todos los valores del ámbito especificado.
Tenga en cuenta que, al llamar al método Reload(LocalStorageScope localStorageScope, se pueden perder los cambios pendientes. Para evitar esto, asegúrese de invocar Flush(LocalStorageScope localStorageScope) antes.
En el ejemplo siguiente, pedimos a un cBot que ejecute una orden de mercado. Una vez completada esta acción, guardamos inmediatamente las P&L brutas de la posición que acabamos de abrir en LocalStorageScope.Type.
1 2 3 4 5 | |
Almacenamiento local en backtesting y optimización
El almacenamiento local funciona de manera diferente en el backtesting en comparación con las operaciones en tiempo real.
Como se mostró anteriormente, el almacenamiento local utiliza el sistema de archivos de su máquina local cuando esta función se utiliza en operaciones en tiempo real. Sin embargo, utilizar el sistema de archivos en el backtesting conllevaría varios problemas, principalmente el almacenamiento de grandes cantidades de datos que no tenían relación con los movimientos actuales del mercado y las operaciones de trading.
Para evitar estos problemas, todas las operaciones con el almacenamiento local se realizan solo en memoria al realizar backtests u optimizar sus cBots. Como resultado, puede estar seguro de que todos los datos guardados en su sistema de archivos solo se refieren a operaciones en tiempo real.
En resumen, el almacenamiento local es una característica muy beneficiosa de la API de Algo que permite persistir datos entre múltiples paradas e inicios de varios cBots e indicadores. Al utilizar el almacenamiento local de manera efectiva, puede crear estrategias de trading automatizadas complejas basadas en datos personalizados guardados en su sistema de archivos.