Aller au contenu

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) et SetObject(string key, object obj). Pour les récupérer, invoquez les méthodes GetString(string key) et T 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 surcharge SetString(string key, string value, LocalStorageScope.Device) sauvegardera les données dans votre répertoire Documents/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 type T depuis 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
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;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleLocalStorageTest : Robot

    {

        protected override void OnStart()
        {

            string messageLocalStorage = LocalStorage.GetString("Example Message");

            if (messageLocalStorage is not null)

            {

                MessageBox.Show(messageLocalStorage);

            }

            LocalStorage.SetString("Example Message", "This is just an example message");
        }
    }
}

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épertoire Documents/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. Dans ce chemin, "AlgoType" désigne le type d'extension cTrader travaillant avec le stockage local (cBots ou Indicators) tandis que AlgoName est le nom d'un cBot/indicateur spécifique. InstanceUniqueIdentifier est 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épertoire Documents/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
SetString(“Example String”, “Just an example string”, LocalStorageScope.Type);

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.Instance est limité à 10 Mo.
  • LocalStorageScope.Type est limité à 100 Mo.
  • LocalStorageScope.Device est 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
ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000, “Custom label”);
var positionOne = Positions.Find("Custom label");        
string positionOneGrossProfit = positionOne.GrossProfit.ToString();
LocalStorage.SetString("Position 1", positionOneGrossProfit, LocalStorageScope.Device); 
LocalStorage.Flush(LocalStorageScope.Device);

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.