Stockage local
Dans ce guide, nous expliquons comment vous pouvez travailler avec le stockage local lors du développement d'algos cTrader. Ci-dessous, nous fournissons un résumé d'une minute sur le fonctionnement de l'accès au stockage local.
Le stockage local en une minute !
- Le stockage local vous permet de sauvegarder des informations dans votre système de fichiers local. Utilisez-le pour conserver des données entre deux ou plusieurs déploiements de vos cBots et indicateurs.
- Pour sauvegarder des données, utilisez les méthodes
SetString(string key, string value)etSetObject(string key, object obj). Pour les récupérer, invoquez les méthodesGetString(string key)etT GetObject<T>(string key). - Spécifiez votre portée de stockage local préférée en utilisant l'énumération
LocalStorageScope. Par exemple, la surchargeSetString(string key, string value, LocalStorageScope.Device)sauvegardera les données dans votre répertoireDocuments/cAlgo/LocalStorage/. - Bien que les informations soient sauvegardées automatiquement toutes les minutes, vous pouvez utiliser la méthode
Flush(LocalStorageScope localStorageScope)pour stocker des données sans délai. - Pendant le backtesting et l'optimisation, le stockage local ne stocke les données qu'en mémoire.
Utilisation du stockage local
Considérez le stockage local comme un moyen de stocker des informations entre un ou plusieurs arrêts et démarrages de vos cBots et indicateurs. Cette fonctionnalité permet de sauvegarder les données des cBots et des indicateurs, puis d'accéder à ces informations de plusieurs manières en fonction de vos besoins. Le stockage local fonctionne indépendamment des droits d'accès accordés à un algo.
L'interface LocalStorage contient toutes les méthodes que vous pouvez utiliser pour stocker et accéder aux données vers et depuis le stockage local. Voici quelques exemples de ces méthodes :
SetString(string key, string value)- sauvegarde une valeur de chaîne en la faisant correspondre à la clé spécifiée.SetObject(string key, object obj)- sauvegarde un objet en le faisant correspondre à la clé spécifiée.GetString(string key)- récupère une valeur de chaîne sauvegardée en la trouvant sous la clé spécifiée.T GetObject<T>(string key)- récupère un objet sauvegardé de typeTdepuis le stockage local en le trouvant sous la clé spécifiée.
Avertissement
Les méthodes SetObject(string key, object obj) et GetObject<T>(string key) ne fonctionnent qu'avec des types de données qui peuvent être sérialisés (convertis en octets).
Considérez l'exemple suivant dans lequel nous demandons à une instance de cBot de sauvegarder un exemple de message au démarrage. Lors des démarrages suivants, la même instance affichera une boîte de message contenant notre message.
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 | |
Après le lancement d'une instance du cBot ci-dessus pour la première fois, elle sauvegarde notre exemple de message dans le stockage local. Après avoir arrêté l'instance et l'avoir redémarrée, la boîte de message suivante s'affiche.

Notez que le stockage local fonctionne même lorsque AccessRights.None est spécifié.
Définir la portée du stockage local
La portée du stockage local (définie via le type LocalStorageScope) détermine où exactement les informations sont stockées et comment elles peuvent être consultées. Cette énumération enum contient les constantes suivantes :
LocalStorageScope.Instance- les données sauvegardées sont stockées et ne peuvent être consultées que par une instance spécifique en cours d'exécution d'un cBot ou d'un indicateur. Les informations sont sauvegardées dans le répertoireDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. Dans ce chemin, "AlgoType" désigne le type d'extension cTrader travaillant avec le stockage local (cBotsouIndicators) tandis queAlgoNameest le nom d'un cBot/indicateur spécifique.InstanceUniqueIdentifierest l'ID unique d'une instance spécifique d'un cBot ou d'un indicateur particulier.LocalStorageScope.Type- les données sauvegardées sont stockées et peuvent être consultées par toutes les instances en cours d'exécution d'un cBot ou d'un indicateur particulier. Les informations sont sauvegardées dans le répertoireDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.LocalStorageScope.Device- les données sauvegardées sont stockées et peuvent être consultées par toutes les instances en cours d'exécution de cBots et d'indicateurs sur l'appareil actuel. Les informations sont sauvegardées dans le répertoire "Documents/cAlgo/LocalStorage/".
À leur tour, les méthodes telles que SetString() et SetObject() ont des surcharges supplémentaires permettant de spécifier une portée de stockage local personnalisée. Par exemple, le code suivant sauvegardera une chaîne dans LocalStorageScope.Type ; cette chaîne sera ensuite accessible à toutes les extensions d'un type particulier.
1 | |
Si LocalStorageScope n'est pas spécifié comme paramètre, LocalStorageScope.Instance est utilisé par défaut.
Notez que ce comportement est différent pour les méthodes GetString(string key) et T GetObject<T>(string key). Lorsque ces méthodes sont invoquées sans spécifier la portée du stockage local, elles rechercheront la clé spécifiée dans toutes les portées en suivant la hiérarchie ci-dessous :
- Instance
- Type
- Appareil
De plus, chaque portée de stockage local différente a son propre quota d'espace disque :
LocalStorageScope.Instanceest limité à 10 Mo.LocalStorageScope.Typeest limité à 100 Mo.LocalStorageScope.Deviceest limité à 500 Mo.
Les limites définies ci-dessus ne sont pas cumulatives. Par exemple, si vous avez déjà utilisé les 500 Mo de stockage au niveau de l'appareil, vous pourrez toujours stocker des informations en utilisant le stockage au niveau de l'instance jusqu'à atteindre sa limite de 10 Mo.
Comment fonctionne la sauvegarde et le chargement des informations
Lors du stockage d'informations dans le stockage local (par exemple, en invoquant la méthode SetString()), cTrader sauvegarde automatiquement les données toutes les minutes. Les données sont également sauvegardées à l'arrêt de l'instance.
Cependant, vous pouvez personnaliser ce comportement en utilisant les méthodes suivantes :
Flush(LocalStorageScope localStorageScope)- sauvegarde toutes les données dans la portée spécifiée.Reload(LocalStorageScope localStorageScope)- recharge toutes les valeurs de la portée spécifiée.
Gardez à l'esprit que, lors de l'appel de la méthode Reload(LocalStorageScope localStorageScope, toutes les modifications en attente peuvent être perdues. Pour éviter cela, assurez-vous d'invoquer Flush(LocalStorageScope localStorageScope) au préalable.
Dans l'exemple ci-dessous, nous demandons à un cBot d'exécuter un ordre de marché. Une fois cette action terminée, nous sauvegardons immédiatement le P&P brut de la position que nous venons d'ouvrir dans LocalStorageScope.Type.
1 2 3 4 5 | |
Stockage local dans le backtesting et l'optimisation
Le stockage local fonctionne différemment dans le backtesting par rapport au trading en temps réel.
Comme montré précédemment, le stockage local utilise le système de fichiers de votre machine locale lorsque cette fonctionnalité est utilisée dans le trading en temps réel. Cependant, l'utilisation du système de fichiers dans le backtesting entraînerait plusieurs problèmes, notamment la sauvegarde de grandes quantités de données qui n'ont aucun rapport avec les mouvements actuels du marché et les opérations de trading.
Pour éviter ces problèmes, toutes les opérations avec le stockage local sont effectuées en mémoire uniquement lors de l'exécution de backtests ou de l'optimisation de vos cBots. Par conséquent, vous pouvez être sûr que toutes les données sauvegardées dans votre système de fichiers ne concernent que le trading en temps réel.
En résumé, le stockage local est une fonctionnalité très avantageuse de l'API Algo qui permet de conserver des données entre plusieurs arrêts et démarrages de divers cBots et indicateurs. En utilisant efficacement le stockage local, vous pouvez créer des stratégies de trading automatisées complexes basées sur des données personnalisées sauvegardées dans votre système de fichiers.