Lokalne przechowywanie danych
W tym przewodniku wyjaśniamy, jak możesz pracować z lokalnym przechowywaniem danych podczas tworzenia algorytmów cTrader. Poniżej przedstawiamy jednominutowe podsumowanie działania dostępu do pamięci lokalnej.
Pamięć lokalna w jedną minutę!
- Pamięć lokalna umożliwia zapisywanie informacji w lokalnym systemie plików. Używaj jej do utrwalania danych między dwoma lub więcej wdrożeniami Twoich cBotów i wskaźników.
- Aby zapisać dane, użyj metod
SetString(string key, string value)iSetObject(string key, object obj). Aby je pobrać, wywołaj metodyGetString(string key)iT GetObject<T>(string key). - Określ preferowany zakres pamięci lokalnej, używając wyliczenia
LocalStorageScope. Na przykład przeciążenieSetString(string key, string value, LocalStorageScope.Device)zapisze dane w kataloguDocuments/cAlgo/LocalStorage/. - Chociaż informacje są zapisywane automatycznie co minutę, możesz użyć metody
Flush(LocalStorageScope localStorageScope), aby przechowywać dane bez opóźnień. - Podczas backtestingu i optymalizacji pamięć lokalna przechowuje dane tylko w pamięci.
Korzystanie z pamięci lokalnej
Pomyśl o pamięci lokalnej jako o sposobie przechowywania informacji między jednym lub kilkoma zatrzymaniami i uruchomieniami Twoich cBotów i wskaźników. Ta funkcja umożliwia zapisywanie danych cBotów i wskaźników, a następnie dostęp do tych informacji na kilka sposobów w zależności od Twoich potrzeb. Pamięć lokalna działa niezależnie od praw dostępu przyznanych algorytmowi.
Interfejs LocalStorage zawiera wszystkie metody, których możesz użyć do przechowywania i uzyskiwania dostępu do danych z pamięci lokalnej. Niektóre przykłady tych metod obejmują następujące:
SetString(string key, string value)- zapisuje wartość ciągu znaków, dopasowując ją do określonego klucza.SetObject(string key, object obj)- zapisuje obiekt, dopasowując go do określonego klucza.GetString(string key)- pobiera zapisaną wartość ciągu znaków, znajdując ją pod określonym kluczem.T GetObject<T>(string key)- pobiera zapisany obiekt typuTz pamięci lokalnej, znajdując go pod określonym kluczem.
Ostrzeżenie
Metody SetObject(string key, object obj) i GetObject<T>(string key) działają tylko z typami danych, które można serializować (przekonwertować na bajty).
Rozważ następujący przykład, w którym prosimy wystąpienie cBota o zapisanie przykładowej wiadomości przy uruchomieniu. Przy kolejnych uruchomieniach to samo wystąpienie wyświetli okno komunikatu zawierające naszą wiadomość.
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 | |
Po pierwszym uruchomieniu wystąpienia powyższego cBota zapisuje on naszą przykładową wiadomość w pamięci lokalnej. Po zatrzymaniu wystąpienia i ponownym uruchomieniu wyświetlane jest następujące okno komunikatu.

Zauważ, że pamięć lokalna działa nawet wtedy, gdy określono AccessRights.None.
Definiowanie zakresu pamięci lokalnej
Zakres pamięci lokalnej (zdefiniowany za pomocą typu LocalStorageScope) określa, gdzie dokładnie informacje są przechowywane i jak można uzyskać do nich dostęp. To wyliczenie enum zawiera następujące stałe:
LocalStorageScope.Instance- zapisane dane są przechowywane i mogą być dostępne tylko dla określonego działającego wystąpienia cBota lub wskaźnika. Informacje są zapisywane w kataloguDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. W tej ścieżce „AlgoType" oznacza typ rozszerzenia cTrader pracującego z pamięcią lokalną (cBotslubIndicators), podczas gdyAlgoNameto nazwa konkretnego cBota/wskaźnika.InstanceUniqueIdentifierto unikalny identyfikator konkretnego wystąpienia danego cBota lub wskaźnika.LocalStorageScope.Type- zapisane dane są przechowywane i mogą być dostępne dla wszystkich działających wystąpień danego cBota lub wskaźnika. Informacje są zapisywane w kataloguDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.LocalStorageScope.Device- zapisane dane są przechowywane i mogą być dostępne dla wszystkich działających wystąpień cBotów i wskaźników na bieżącym urządzeniu. Informacje są zapisywane w katalogu „Documents/cAlgo/LocalStorage/".
Z kolei metody takie jak SetString() i SetObject() mają dodatkowe przeciążenia umożliwiające określenie niestandardowego zakresu pamięci lokalnej. Na przykład poniższy kod zapisze ciąg znaków do LocalStorageScope.Type; ten ciąg znaków będzie następnie dostępny dla wszystkich rozszerzeń danego typu.
1 | |
Jeśli LocalStorageScope nie jest określony jako parametr, domyślnie używany jest LocalStorageScope.Instance.
Zauważ, że to zachowanie jest inne dla metod GetString(string key) i T GetObject<T>(string key). Gdy te metody są wywoływane bez określenia zakresu pamięci lokalnej, będą szukać określonego klucza we wszystkich zakresach zgodnie z poniższą hierarchią:
- Instancja
- Typ
- Urządzenie
Dodatkowo każdy inny zakres pamięci lokalnej ma własny limit miejsca na dysku:
LocalStorageScope.Instancejest ograniczony do 10 MB.LocalStorageScope.Typejest ograniczony do 100 MB.LocalStorageScope.Devicejest ograniczony do 500 MB.
Limity zdefiniowane powyżej nie są kumulatywne. Na przykład, jeśli wykorzystałeś już wszystkie 500 MB pamięci na poziomie urządzenia, nadal będziesz mógł przechowywać informacje przy użyciu pamięci na poziomie wystąpienia, aż do osiągnięcia jej limitu wynoszącego 10 MB.
Jak działa zapisywanie i ładowanie informacji
Podczas przechowywania informacji w pamięci lokalnej (na przykład poprzez wywołanie metody SetString()), cTrader automatycznie zapisuje dane co minutę. Dane są również zapisywane przy zatrzymaniu wystąpienia.
Możesz jednak dostosować to zachowanie, używając następujących metod:
Flush(LocalStorageScope localStorageScope)- zapisuje wszystkie dane do określonego zakresu.Reload(LocalStorageScope localStorageScope)- ponownie ładuje wszystkie wartości z określonego zakresu.
Pamiętaj, że podczas wywoływania metody Reload(LocalStorageScope localStorageScope wszelkie oczekujące zmiany mogą zostać utracone. Aby tego uniknąć, upewnij się, że wcześniej wywołałeś Flush(LocalStorageScope localStorageScope).
W poniższym przykładzie prosimy cBota o wykonanie zlecenia rynkowego. Po zakończeniu tej czynności natychmiast zapisujemy zysk/stratę brutto z pozycji, którą właśnie otworzyliśmy, w LocalStorageScope.Type.
1 2 3 4 5 | |
Pamięć lokalna w backtestingu i optymalizacji
Pamięć lokalna działa inaczej w backtestingu w porównaniu z handlem w czasie rzeczywistym.
Jak pokazano wcześniej, pamięć lokalna wykorzystuje system plików Twojego lokalnego komputera, gdy ta funkcja jest używana w handlu w czasie rzeczywistym. Jednak użycie systemu plików w backtestingu prowadziłoby do kilku problemów, w szczególności do zapisywania dużych ilości danych, które nie mają związku z bieżącymi ruchami rynkowymi i operacjami handlowymi.
Aby uniknąć tych problemów, wszystkie operacje z pamięcią lokalną są przeprowadzane tylko w pamięci podczas wykonywania backtestów lub optymalizacji Twoich cBotów. W rezultacie możesz mieć pewność, że wszystkie dane zapisane w Twoim systemie plików dotyczą tylko handlu w czasie rzeczywistym.
Podsumowując, pamięć lokalna to bardzo korzystna funkcja Algo API, która umożliwia utrwalanie danych między wieloma zatrzymaniami i uruchomieniami różnych cBotów i wskaźników. Dzięki efektywnemu wykorzystaniu pamięci lokalnej możesz tworzyć złożone zautomatyzowane strategie handlowe oparte na niestandardowych danych zapisanych w Twoim systemie plików.