Lokaler Speicher
In diesem Leitfaden erklären wir, wie Sie mit lokalem Speicher arbeiten können, wenn Sie cTrader-Algorithmen entwickeln. Im Folgenden geben wir eine einminütige Zusammenfassung, wie der Zugriff auf lokalen Speicher funktioniert.
Lokaler Speicher in einer Minute!
- Der lokale Speicher ermöglicht es Ihnen, Informationen in Ihrem lokalen Dateisystem zu speichern. Verwenden Sie ihn, um Daten zwischen zwei oder mehr Bereitstellungen Ihrer cBots und Indikatoren zu erhalten.
- Um Daten zu speichern, verwenden Sie die Methoden
SetString(string key, string value)undSetObject(string key, object obj). Um sie abzurufen, rufen Sie die MethodenGetString(string key)undT GetObject<T>(string key)auf. - Geben Sie Ihren bevorzugten lokalen Speicherbereich an, indem Sie das
LocalStorageScope-Enum verwenden. Beispielsweise speichert die ÜberladungSetString(string key, string value, LocalStorageScope.Device)Daten in Ihrem VerzeichnisDocuments/cAlgo/LocalStorage/. - Während Informationen automatisch jede Minute gespeichert werden, können Sie die Methode
Flush(LocalStorageScope localStorageScope)verwenden, um Daten ohne Verzögerungen zu speichern. - Während des Backtestings und der Optimierung speichert der lokale Speicher Daten nur im Arbeitsspeicher.
Verwendung des lokalen Speichers
Betrachten Sie den lokalen Speicher als eine Möglichkeit, Informationen zwischen einem oder mehreren Stopps und Starts Ihrer cBots und Indikatoren zu speichern. Diese Funktion ermöglicht das Speichern von cBot- und Indikatordaten und den anschließenden Zugriff auf diese Informationen auf verschiedene Weise, je nach Ihren Anforderungen. Der lokale Speicher funktioniert unabhängig von den Zugriffsrechten, die einem Algorithmus gewährt werden.
Die LocalStorage-Schnittstelle enthält alle Methoden, die Sie zum Speichern von und Zugreifen auf Daten im und aus dem lokalen Speicher verwenden können. Einige Beispiele für diese Methoden sind die folgenden:
SetString(string key, string value)– speichert einen String-Wert, indem er mit dem angegebenen Schlüssel abgeglichen wird.SetObject(string key, object obj)– speichert ein Objekt, indem es mit dem angegebenen Schlüssel abgeglichen wird.GetString(string key)– ruft einen gespeicherten String-Wert ab, indem er unter dem angegebenen Schlüssel gefunden wird.T GetObject<T>(string key)– ruft ein gespeichertes Objekt vom TypTaus dem lokalen Speicher ab, indem es unter dem angegebenen Schlüssel gefunden wird.
Warnung
Die Methoden SetObject(string key, object obj) und GetObject<T>(string key) funktionieren nur mit Datentypen, die serialisiert werden können (in Bytes umgewandelt werden können).
Betrachten Sie das folgende Beispiel, in dem wir eine cBot-Instanz bitten, beim Start eine Beispielnachricht zu speichern. Bei nachfolgenden Starts zeigt dieselbe Instanz ein Meldungsfeld mit unserer Nachricht an.
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 | |
Nachdem eine Instanz des obigen cBot zum ersten Mal gestartet wurde, speichert sie unsere Beispielnachricht im lokalen Speicher. Nach dem Stoppen der Instanz und dem erneuten Starten wird das folgende Meldungsfeld angezeigt.

Beachten Sie, dass der lokale Speicher auch dann funktioniert, wenn AccessRights.None angegeben ist.
Lokalen Speicherbereich definieren
Der lokale Speicherbereich (definiert über den Typ LocalStorageScope) bestimmt, wo genau Informationen gespeichert werden und wie darauf zugegriffen werden kann. Dieses enum enthält die folgenden Konstanten:
LocalStorageScope.Instance– gespeicherte Daten werden gespeichert und können nur von einer bestimmten laufenden Instanz eines cBot oder Indikators aufgerufen werden. Informationen werden im VerzeichnisDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/gespeichert. In diesem Pfad bezeichnet „AlgoType" den Typ der cTrader-Erweiterung, die mit dem lokalen Speicher arbeitet (cBotsoderIndicators), währendAlgoNameder Name eines bestimmten cBot/Indikators ist.InstanceUniqueIdentifierist die eindeutige ID einer bestimmten Instanz eines bestimmten cBot oder Indikators.LocalStorageScope.Type– gespeicherte Daten werden gespeichert und können von allen laufenden Instanzen eines bestimmten cBot oder Indikators aufgerufen werden. Informationen werden im VerzeichnisDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/gespeichert.LocalStorageScope.Device– gespeicherte Daten werden gespeichert und können von allen laufenden Instanzen von cBots und Indikatoren auf dem aktuellen Gerät aufgerufen werden. Informationen werden im Verzeichnis „Documents/cAlgo/LocalStorage/" gespeichert.
Wiederum verfügen Methoden wie SetString() und SetObject() über zusätzliche Überladungen, die die Angabe eines benutzerdefinierten lokalen Speicherbereichs ermöglichen. Beispielsweise speichert der folgende Code einen String in LocalStorageScope.Type; dieser String ist anschließend für alle Erweiterungen eines bestimmten Typs zugänglich.
1 | |
Wenn LocalStorageScope nicht als Parameter angegeben wird, wird standardmäßig LocalStorageScope.Instance verwendet.
Beachten Sie, dass sich dieses Verhalten bei den Methoden GetString(string key) und T GetObject<T>(string key) unterscheidet. Wenn diese Methoden aufgerufen werden, ohne den lokalen Speicherbereich anzugeben, suchen sie in allen Bereichen nach dem angegebenen Schlüssel, und zwar gemäß der folgenden Hierarchie:
- Instanz
- Typ
- Gerät
Zusätzlich hat jeder unterschiedliche lokale Speicherbereich sein eigenes Festplattenspeicherkontingent:
LocalStorageScope.Instanceist auf 10 MB begrenzt.LocalStorageScope.Typeist auf 100 MB begrenzt.LocalStorageScope.Deviceist auf 500 MB begrenzt.
Die oben definierten Limits sind nicht kumulativ. Wenn Sie beispielsweise bereits alle 500 MB des Speichers auf Geräteebene verwendet haben, können Sie weiterhin Informationen mit dem Speicher auf Instanzebene speichern, bis dessen Limit von 10 MB erreicht ist.
Wie das Speichern und Laden von Informationen funktioniert
Beim Speichern von Informationen im lokalen Speicher (z. B. durch Aufrufen der Methode SetString()) speichert cTrader automatisch jede Minute Daten. Daten werden auch beim Stoppen der Instanz gespeichert.
Sie können dieses Verhalten jedoch anpassen, indem Sie die folgenden Methoden verwenden:
Flush(LocalStorageScope localStorageScope)– speichert alle Daten im angegebenen Bereich.Reload(LocalStorageScope localStorageScope)– lädt alle Werte aus dem angegebenen Bereich neu.
Beachten Sie, dass beim Aufrufen der Methode Reload(LocalStorageScope localStorageScope alle ausstehenden Änderungen verloren gehen können. Um dies zu vermeiden, stellen Sie sicher, dass Sie vorher Flush(LocalStorageScope localStorageScope) aufrufen.
Im folgenden Beispiel bitten wir einen cBot, eine Markt-Order auszuführen. Nachdem diese Aktion abgeschlossen ist, speichern wir sofort die Brutto-GuV der Position, die wir gerade eröffnet haben, in LocalStorageScope.Type.
1 2 3 4 5 | |
Lokaler Speicher beim Backtesting und bei der Optimierung
Der lokale Speicher funktioniert beim Backtesting anders als beim Echtzeit-Handel.
Wie zuvor gezeigt, verwendet der lokale Speicher das Dateisystem Ihres lokalen Rechners, wenn diese Funktion beim Echtzeit-Handel verwendet wird. Die Verwendung des Dateisystems beim Backtesting würde jedoch zu mehreren Problemen führen, insbesondere zum Speichern großer Datenmengen, die keinen Bezug zu aktuellen Marktbewegungen und Handelsoperationen haben.
Um diese Probleme zu vermeiden, werden alle Operationen mit dem lokalen Speicher nur im Arbeitsspeicher durchgeführt, wenn Sie Backtests durchführen oder Ihre cBots optimieren. Dadurch können Sie sicher sein, dass alle in Ihrem Dateisystem gespeicherten Daten nur den Echtzeit-Handel betreffen.
Zusammenfassend ist der lokale Speicher eine äußerst nützliche Funktion der Algo-API, die das Beibehalten von Daten zwischen mehreren Stopps und Starts verschiedener cBots und Indikatoren ermöglicht. Durch die effektive Nutzung des lokalen Speichers können Sie komplexe automatisierte Handelsstrategien erstellen, die auf benutzerdefinierten Daten basieren, die in Ihrem Dateisystem gespeichert sind.