Średnie kroczące
Utworzysz linie SMA i EMA oraz zobaczysz, jak przesuwa się okno obliczeń.
Linia zamknięcia śledzi ruch ceny każdej świecy. Średnia z kilku kolejnych zamknięć daje mniej poszarpaną linię. W tym rozdziale utworzysz dwie średnie z dziesięciu świec.
Obliczanie średniej
Prosta średnia trzech wartości to ich suma podzielona przez trzy. Dla 100, 103 i 101:
(100 + 103 + 101) / 3 = 101.333...Rozmiar okna średniej jest stały, ale okno przesuwa się ze świecami. W oknie trzyświecowym przy kolejnej świecy pojawia się nowe zamknięcie, a najstarsze wypada.
Jeśli nowa cena wynosi 105, następna średnia to już (103 + 101 + 105) / 3, czyli 103. Pierwszego zamknięcia 100 nie ma w tym oknie.
Do prostej średniej dziesięcioświecowej potrzebujesz bieżącego i dziewięciu poprzednich zamknięć. Nie bieżącego i dziesięciu wcześniejszych: dziesięć to łączna liczba wartości.
Funkcje ta
Przestrzeń nazw ta zawiera gotowe obliczenia. ta.sma(close, 10) zwraca prostą średnią kroczącą dziesięciu zamknięć. SMA oznacza „simple moving average”.
Dwa argumenty wywołania:
close: źródło, z którego liczymy średnią;10: rozmiar okna w świecach.
Na pierwszych dziewięciu świecach nie ma jeszcze dziesięciu zamknięć. SMA wynosi wtedy na, a pierwsza prawidłowa wartość pojawia się na dziesiątej. Ten początkowy etap nazywa się rozgrzewką.
Rozmiar okna nie jest czasem w sekundach. Dziesięć świec dziennych i dziesięć godzinowych obejmuje różne okresy.
SMA i EMA obok siebie
EMA, wykładnicza średnia krocząca, nadaje większą wagę nowszym wartościom. ta.ema(close, 10) też używa parametru dziesięciu świec, ale innego wzoru.
EMA zaczyna od prostej średniej pierwszego pełnego okna. Przy długości dziesięć obie linie pojawiają się więc na dziesiątej świecy. Później EMA dodaje do poprzedniej wartości część różnicy między nową ceną a poprzednią EMA. Udział wynosi 2 / (10 + 1).
Utwórz moving_averages.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, plot, script, ta
@script.indicator("Two Moving Averages", overlay=True)
def main():
simple_average = ta.sma(close, 10)
exponential_average = ta.ema(close, 10)
plot(simple_average, "SMA 10", color=color.blue, linewidth=2)
plot(exponential_average, "EMA 10", color=color.orange, linewidth=2)Uruchom na danych demonstracyjnych. Niebieska SMA i pomarańczowa EMA pojawią się przy świecach. Przesuwając wykres, obejrzyj nagłe zwroty ceny. Średnie nie muszą reagować w tym samym tempie.

Średnia jest linią obliczoną z przeszłych wartości. Sam gładszy kształt nie mówi, w którą stronę ruszy cena.
Dlaczego liczymy na każdej świecy?
ta.sma i ta.ema korzystają ze stanu zachowywanego między wykonaniami. W przykładzie oba wywołania działają na każdej świecy.
Później napiszemy też kod wykonujący operację tylko w pewnych sytuacjach, na przykład rysujący oznaczenie, gdy zamknięcie jest powyżej średniej. Poznasz to w Warunkach i oznaczeniach.
Także wtedy licz średnią na każdej świecy i dopiero potem decyduj, jak jej użyć. Jeśli wywołasz ta.sma tylko na świecach wzrostowych, pozostałe zostaną pominięte w obliczeniu. Wynik może różnić się od średniej całego szeregu. Teraz pilnuj, by oba obliczenia wykonały się na każdej świecy.
Dla tych linii własne zmienne nie wymagają Series: rysujemy bieżące wartości i nie używamy simple_average[1]. Jeśli później chcesz bezpośrednio indeksować historię zmiennej, dodaj Series[float].
Dłuższe i krótsze okno
Większa długość oznacza wpływ większej liczby wcześniejszych cen. Linia zwykle jest gładsza i reaguje później. Przy krótszej nowe ruchy są wyraźniejsze.
Spróbuj na tych samych danych:
- Uruchom obie średnie dziesięcioświecowe i znajdź wyraźny zwrot ceny.
- Zmień długość w obu wywołaniach na 30.
- Zmień tytuły na
SMA 30iEMA 30. - Uruchom ponownie i znajdź ten sam moment.
Zmieniamy też tytuł, bo "SMA 10" jest tylko napisem. Liczba w nim nie zmienia obliczenia. Okno reguluje drugi argument funkcji.
Spróbuj samodzielnie
Utwórz dwie proste średnie: z pięciu i dwudziestu świec. Krótka ma być niebieska, długa pomarańczowa. Dodaj odpowiednie tytuły.
Rozwiązanie zadania
W ciele main() zastąp obliczenia i rysowanie:
fast_average = ta.sma(close, 5)
slow_average = ta.sma(close, 20)
plot(fast_average, "SMA 5", color=color.blue, linewidth=2)
plot(slow_average, "SMA 20", color=color.orange, linewidth=2)Dla piątki brakuje pierwszych czterech wartości, dla dwudziestki dziewiętnastu. Po rozgrzewce obie linie używają tego samego szeregu zamknięć z innym oknem.
Sprawdź okno
Trzyświecową SMA możesz sprawdzić ręcznie. Ustaw długość trzy, wybierz kolejne trzy zamknięcia i oblicz średnią. Na trzeciej świecy wykres pokaże ten sam wynik. Pierwsze dwie nie mają pełnego okna.