Cykl życia wskaźnika niestandardowego
Przykładowa struktura kodu
Ten artykuł poprowadzi Cię przez strukturę kodu i wyjaśni logikę stojącą za zdarzeniami i cyklem życia wskaźnika cTrader. Aby uzyskać dostęp do wskaźników niestandardowych, otwórz zakładkę Lokalne w aplikacji Algo.

Jako przykład możesz utworzyć nowy wskaźnik o nazwie „LifeCycle Test" z następującym przykładowym kodem dostępnym w oknie edytora kodu.

Aby zresetować do wersji szablonowej, skopiuj poniższy kod.
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 | |
Na pierwszy rzut oka struktura kodu zawiera tylko dwie metody: metodę Initialize() i metodę Calculate(). Kliknij Kompiluj, aby kontynuować testowanie tego wskaźnika. Dodamy dodatkową metodę o nazwie OnDestroy() i wyjaśnimy jej przeznaczenie później.
Zdarzenie inicjalizacji
Gdy wskaźnik cTrader jest po raz pierwszy dołączany do wykresu lub gdy użytkownik zmienia którekolwiek z ustawień parametrów, instancja wskaźnika jest odtwarzana i wywoływana jest metoda Initialize(). Służy ona do inicjalizacji wszelkich zmiennych, które planujesz wykorzystać w swoim wskaźniku. Możesz również definiować i odwoływać się do dodatkowych wskaźników, aby utworzyć pojedynczy wskaźnik wykorzystujący formuły z innych wskaźników.
Domyślnie nowy szablon kodu zawiera ustawienie parametru o nazwie Message z wartością „Hello world!".
1 2 | |
W metodzie Initialize() znajduje się wiersz kodu, który drukuje tę wiadomość do dziennika.
1 | |
Aby zademonstrować metodę Initialize(), dodaj instancję wskaźnika, klikając ikonę Plus obok ikony Kompiluj i wybierając symbol. Jeśli klikniesz Więcej w wierszu wskaźnika i wybierzesz Dodaj instancję, symbol EURUSD z ramami czasowymi h1 zostanie dodany automatycznie.

Uwaga
Dodawanie instancji w cTrader Algo jest tym samym co dołączanie wskaźnika do wykresu w aplikacji Trade.
Teraz otwórz zakładkę Dziennik w panelu Trade Watch pod wykresem. Jak widać, wiadomość „Hello world" została wydrukowana.

Za każdym razem, gdy wskaźnik jest po raz pierwszy dodawany do wykresu lub gdy parametr jest zmieniany, wykres jest odświeżany i metoda Initialize() jest wywoływana ponownie. Wpisz inną wiadomość w sekcji Parametry, aby zobaczyć odpowiednią aktualizację wpisu dziennika.

Obliczanie wyniku wskaźnika
Metoda Calculate() jest wywoływana dla każdego indeksu danych historycznych i przy każdym przychodzącym ticku. Na przykład, jeśli bieżący wykres ma 1000 słupków, metoda Calculate() zostanie wywołana dla indeksu 0, 1, 2 i tak dalej, aż do maksymalnie 999.
1 | |
Metoda Calculate() może być wywoływana wiele razy na sekundę w okresach wysokiej zmienności lub rzadziej, gdy rynek jest płaski. Aby przetestować, jak to działa, możesz dodać linię kodu do treści metody Calculate(), aby wyświetlić wartość indeksu przekazywaną do metody dla każdego nowego ticka danych. Nie zapomnij kliknąć Build za każdym razem po dodaniu zmian w oknie edytora kodu.
1 | |
Aby przełączyć się z okna edytora kodu na wykres, kliknij dodaną instancję wskaźnika. Jeśli otworzysz kartę Log w panelu Trade Watch, zobaczysz wartości wyświetlone dla każdego indeksu przekazanego do metody.

Metoda OnDestroy()
Metoda OnDestroy() jest wywoływana, gdy wskaźnik zostanie usunięty z wykresu i nie jest już potrzebny. Musisz zaimplementować tę metodę, ponieważ nie jest ona domyślnie dodawana podczas tworzenia nowego wskaźnika.
1 2 3 4 | |
Ta metoda jest przydatna dla programistów, ponieważ pozwala im zwolnić niezarządzane zasoby i wykonać zadania finalizacyjne. Pomaga zapobiegać wyciekom pamięci i zapewnia, że wskaźnik nie zatrzymuje zasobów po usunięciu. Przykłady obejmują zamykanie połączeń z zewnętrznymi źródłami danych, zwalnianie dużych obiektów danych i inne operacje zwalniające pamięć.
Podsumowanie
Podsumowując, metody Initialize(), Calculate() i OnDestroy() ilustrują różne etapy cyklu życia wskaźnika niestandardowego. Dostosowując przykładowy kod w aplikacji Algo, możesz swobodnie decydować, jak inicjować zmienne wskaźnika, obliczać wynik wskaźnika i uruchamiać zadania finalizacyjne.
