Dotąd testowanie długości średniej wymagało zmiany liczby w źródle. Teraz uczynisz z niej ustawienie wskaźnika, by uruchamiać ten sam program z różnymi długościami.

Czym jest input?

Input to nazwane wejście programu, które można zmieniać z zewnątrz. Kod określa jego typ, wartość domyślną i dopuszczalny zakres. Użytkownik wybiera wartość w tych granicach.

Obecne wejście to length, domyślnie 20. Zmienna length określa długość średniej. Potrzebujemy też przestrzeni input z pynecore.lib.

length: int = input.int(20, title="Average length", minval=1, maxval=200)

Wiersz należy do parametrów main(). int oznacza liczbę całkowitą: można użyć na przykład 1, 20 lub 200, ale nie 2,5. input.int opisuje wejście całkowitoliczbowe.

20 to wartość domyślna, Average length tytuł w interfejsie. minval i maxval określają najmniejszą i największą dozwoloną wartość. Zerowa długość okna nie ma sensu, więc ją wykluczamy.

Pełny program

Utwórz adjustable_average.py:

"""
@pyne edge
"""
from pynecore.lib import close, color, input, plot, script, ta


@script.indicator("Adjustable Average", overlay=True)
def main(
    length: int = input.int(20, title="Average length", minval=1, maxval=200),
):
    average = ta.sma(close, length)
    plot(average, "Average", color=color.blue, linewidth=2)

Po nawiasie otwierającym main rozpisaliśmy parametry na kilka wierszy. ): kończy listę i zaczyna ciało. Obliczenia i rysowanie pod nim mają cztery spacje wcięcia.

Przecinek na końcu wejścia pozwala dopisywać następne parametry. Jest dozwolony również przy jednym. Dwie wcięte części mają inne role: w nawiasach podajemy wejścia, po nich wykonywane instrukcje.

Uruchom na demonstracji. Pierwszy przebieg narysuje niebieską średnią z dwudziestu świec.

Otwórz Inputs

  1. Uaktywnij adjustable_average.py.
  2. Kliknij koło zębate w prawym górnym rogu edytora, na pasku obok karty pliku. Po najechaniu pojawi się Edit Inputs….
  3. Znajdź pole Average length.
  4. Zmień na 5 i kliknij Save.

Ten sam interfejs otworzysz z grupy Scripts w lewym widoku Pyne: kliknij prawym przyciskiem adjustable_average.py i wybierz Edit Inputs…. Jest też w menu prawego przycisku otwartego kodu.

Obok adjustable_average.py otwarty jest Inputs z polem Average length i przyciskiem Save.
Average length zmienia się w interfejsie Inputs PyneIDE.

Po Save PyneIDE automatycznie przelicza otwarty wykres z zapisanym ustawieniem. Poczekaj na odświeżenie: niebieska linia pokaże już średnią pięcioświecową.

W źródle nadal domyślnie stoi 20. Zapisana w Inputs piątka zastępuje ją w tym projekcie.

Ustaw teraz 50 i zapisz ponownie. W tym samym okresie porównaj reakcję linii na cenę. Samo przesunięcie widocznego okresu wykresu nie zmienia wejścia programu.

Gdzie ustawienie jest zapisywane?

Obok programu plik o tej samej nazwie z rozszerzeniem .toml przechowuje ustawienia. Tutaj to adjustable_average.toml.

TOML to tekstowy format konfiguracji. Zarządza nim PyneIDE, więc w ćwiczeniu wystarczy Inputs. Po otwarciu pliku sekcja długości wygląda tak:

[inputs.length]
value = 5

Nawiasy kwadratowe oznaczają tu grupę ustawień. Nie jest to historia świec z rozdziału o wcześniejszych wartościach: inny plik używa reguł innego języka.

Nazwa parametru w kodzie i tytuł interfejsu też są różne. Plik zawiera length, interfejs Average length. Dla programu liczy się nazwa kodowa.

Po zmianie nazwy wejścia w źródle wartość zapisana pod starą nazwą nie jest ustawieniem nowego wejścia. Otwórz wtedy Inputs i sprawdź wartość. Kopiując program, kopiuj jego .toml tylko wtedy, gdy chcesz zachować też ustawienia.

Wartość domyślna i rzeczywista

Jeśli zmienisz domyślną długość z 20 na 30, ale wcześniej zapisałeś pięć, program nadal może używać pięciu. Zapisane nadpisanie ma pierwszeństwo.

Opisując wynik, zapisuj więc faktyczne wejście. Sama wartość domyślna w źródle nie opisuje wszystkich ustawień przebiegu.

Spróbuj samodzielnie

Dodaj drugi parametr długości. Krótka średnia ma domyślnie pięć, długa dwadzieścia. Obie dopuszczają od 1 do 200. Narysuj je z różnymi tytułami.

Rozwiązanie zadania

Lista parametrów main():

fast_length: int = input.int(5, title="Fast length", minval=1, maxval=200),
slow_length: int = input.int(20, title="Slow length", minval=1, maxval=200),

Ciało:

fast_average = ta.sma(close, fast_length)
slow_average = ta.sma(close, slow_length)
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)

Wejścia zmienia się niezależnie. Granice nie wymagają jeszcze, by szybka długość była mniejsza od wolnej. Ten związek wymaga osobnej kontroli; zajmiemy się nim w projekcie końcowym.

Sprawdź zapis

Ustaw długość jeden. Jednoświecowa SMA jest zamknięciem danej świecy, więc linia ma przechodzić przez zamknięcia. Potem wróć do dwudziestu. Po ponownym otwarciu pliku sprawdź zapisaną dwudziestkę w interfejsie.