Zmienne i własne obliczenia
Z danych świec obliczysz zakres i cenę środkową, a potem wyświetlisz wynik.
Jeśli maksimum świecy wynosi 108, a minimum 101, różnica jest równa 7. Ten zakres cen obliczymy i narysujemy dla każdej świecy.
Drugi program oblicza środek między cenami. W obu przykładach używamy zmiennych i prostych działań arytmetycznych.
Co oznacza świeca?
Świeca podsumowuje dane pewnego okresu. Jego długość wyznacza interwał. Na przykład w danych godzinowych jedna świeca odpowiada godzinie.
Poznasz pięć podstawowych wartości:
open: cena otwarcia okresu;high: najwyższa cena okresu;low: najniższa cena okresu;close: cena zamknięcia okresu;volume: wolumen okresu w jednostce przyjętej przez źródło.
Ich angielskie inicjały tworzą skrót OHLCV. Pierwsze przykłady książki używają danych już zamkniętych świec.
close zawsze oznacza zamknięcie świecy aktualnie przetwarzanej. Na kolejnej świecy oznacza już jej zamknięcie. Pozostałe dane działają tak samo.
Trochę historii: skąd pochodzą świece japońskie?
Korzenie wykresów świecowych sięgają japońskich rynków ryżu XVIII wieku. Z powstałych tam metod analizy cen w XIX wieku rozwinęły się wykresy świecowe. Steve Nison przybliżył je szerszej zachodniej publiczności książką Japanese Candlestick Charting Techniques z 1991 roku.
Grubszy „korpus” pokazuje odcinek między otwarciem a zamknięciem, a cienkie „knoty” oznaczają maksimum i minimum okresu.
Tło historyczne i ilustracje: AAII Journal (po angielsku).
Oblicz zakres
Jeśli maksimum wynosi 108, a minimum 101, cena poruszała się w zakresie 7 jednostek:
108 − 101 = 7
W kodzie zapisujemy to tak:
candle_range = high - lowhigh - low jest wyrażeniem: program je oblicza i otrzymuje wynik. - oznacza odejmowanie.
candle_range to nazwa zmiennej. = przypisuje jej wynik wyrażenia z prawej strony. Tę operację nazywamy przypisaniem.
Czytaj wiersz jako: „Oblicz różnicę high i low, a wynik nazwij candle_range”. W dalszych wierszach możesz używać tej wartości pod podaną nazwą.
Wybierz zrozumiałą nazwę
candle_range mówi, że wartość oznacza zakres świecy. Nazwa taka jak x mniej pomaga czytać kod.
W książce używamy angielskich nazw małymi literami, rozdzielając słowa podkreśleniem. Nazwa nie może zaczynać się cyfrą ani zawierać spacji. candle_range i Candle_range byłyby różnymi nazwami.
Dlaczego angielskie nazwy bez znaków diakrytycznych?
Słowa kluczowe języka i nazwy biblioteki Pyne też opierają się na angielskim: na przykład def, close i plot. Angielskie zmienne pasują do nich, a kod łatwiej zrozumieją osoby nieznające polskiego. Przydaje się to przy udostępnianiu programu i wspólnej pracy.
Pyne code dopuszcza w nazwach także litery ze znakami diakrytycznymi i inne litery spoza alfabetu angielskiego. Angielskie nazwy bez takich znaków są więc zaleceniem. Łatwiej wpisuje się je na obcojęzycznych klawiaturach i udostępnia kod międzynarodowo. Dlatego stosujemy je konsekwentnie.
Utwórz wskaźnik w osobnym panelu
W folderze scripts utwórz candle_range.py i wpisz:
"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script
@script.indicator("Candle Range", overlay=False)
def main():
candle_range = high - low
plot(candle_range, "Range", color=color.orange, linewidth=2)Pierwszy wiersz main() oblicza wartość, drugi przekazuje ją jako candle_range do plot. Przypisanie musi poprzedzać użycie wartości.
overlay=False wybiera osobny panel. Zakres widać wtedy na własnej skali: na przykład zakres 7 jednostek i cena około 100 są wartościami innego rzędu wielkości.
Zapisz i uruchom na tych samych danych demonstracyjnych.

Jak czytać wynik?
Wyższym punktom odpowiada większa różnica cen, niższym mniejszy zakres. Obliczenie uwzględnia pełne maksimum i minimum świecy, razem z knotami.
Świeca wzrostowa i spadkowa mogą mieć identyczny zakres. Nie poznasz więc z niego kierunku ruchu. high jest co najmniej równe low, dlatego poprawne dane nie dadzą wyniku ujemnego.
Co zmienna robi na następnej świecy?
Na każdej przetwarzanej świecy program powtarza dwa kroki:
- Oblicza
candle_rangez jej wartościhighilow. plotwyświetla tę wartość w miejscu świecy.
Na przykład:
- Pierwsza świeca:
high= 108,low= 101, więccandle_range= 7. - Druga:
high= 110,low= 106, więccandle_range= 4. - Trzecia:
high= 109,low= 103, więccandle_range= 6.
Powstaną trzy punkty dla wartości 7, 4 i 6. Zmienna na każdej świecy otrzymuje wynik bieżącego obliczenia.
Dostęp do poprzednich wartości i zachowywany stan omówimy później.
Dodawanie, mnożenie i dzielenie
Proste obliczenia zapisujemy znakami:
+: dodawanie;-: odejmowanie;*: mnożenie;/: dzielenie.
Mnożenie i dzielenie następują przed dodawaniem i odejmowaniem. Nawias określa, co obliczyć najpierw.
Środek zakresu cen:
midpoint = (high + low) / 2Najpierw dodajemy ceny, potem dzielimy wynik przez dwa. Dla high = 108 i low = 101 środek wynosi 104,5.
Zwróć uwagę na kropkę dziesiętną: w kodzie piszemy 104.5, chociaż w polskim tekście byłoby 104,5. Przecinek ma w kodzie inne zadania, na przykład rozdziela parametry funkcji.
Narysuj cenę środkową
Utwórz candle_midpoint.py:
"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script
@script.indicator("Candle Midpoint", overlay=True)
def main():
midpoint = (high + low) / 2
plot(midpoint, "Midpoint", color=color.purple, linewidth=2)Wracamy do overlay=True, bo chcemy pokazać cenę środkową na wspólnej skali ze świecami.

Po uruchomieniu wybierz świecę i sprawdź punkt linii w jej miejscu. Leży w środku pełnego zakresu wraz z knotami. Może różnić się od środka korpusu, który wyznaczają otwarcie i zamknięcie.
Dlaczego nawias jest ważny?
Te wyrażenia opisują różne obliczenia:
(high + low) / 2
high + low / 2Drugi wiersz dzieli przez dwa tylko low, a potem dodaje high. Dla 108 i 101 otrzymałbyś 158,5. To nie jest środek między cenami.
Oba zapisy są poprawne składniowo, ale wyniki są inne. Przykład możliwy do policzenia ręcznie pozwala szybko sprawdzić, czy kod opisuje zamierzoną operację.
Spróbuj samodzielnie
Narysuj zmianę korpusu z uwzględnieniem kierunku: odejmij otwarcie od zamknięcia.
- Nazwij plik
candle_change.py. - Tytuł wskaźnika to
"Candle Change", wyświetlanie w osobnym panelu. - Wynik nazwij
candle_change. - Rysunek nazwij
"Change".
Przed uruchomieniem policz wyniki dla:
open= 100,close= 104;open= 100,close= 97;open= 100,close= 100.
Rozwiązanie zadania
Wyniki to 4, −3 i 0. Dodatnia wartość oznacza wyższe zamknięcie, ujemna niższe, a zero identyczne otwarcie i zamknięcie.
"""
@pyne edge
"""
from pynecore.lib import close, color, open, plot, script
@script.indicator("Candle Change", overlay=False)
def main():
candle_change = close - open
plot(candle_change, "Change", color=color.blue, linewidth=2)Porównanie trzech programów
Otwórz kolejno programy obliczające zakres, środek i zmianę. Każdy oblicza zmienną z danych OHLC, a potem ją rysuje. Dane są przetwarzane świeca po świecy. Różnice wynikają z obliczenia i ustawienia overlay.
W następnym rozdziale porównamy już wartości dwóch świec i nauczymy się odczytywać poprzednią świecę.