Jak obliczany jest Kama?
Bezpośrednia odpowiedź
Kama jest zwykle obliczany jako zmienna, samodostosowująca się średnia ruchoma. W najczęstszym ujęciu każda nowa wartość Kama wykorzystuje (1) poprzednią wartość Kama, (2) współczynnik wygładzania, który zmienia się w czasie, oraz (3) bieżącą cenę. Ten współczynnik wygładzania zależy od tego, jak „efektywnie” cena poruszała się w ostatnim oknie wstecznym — często mierzonej jako stosunek zmiany netto ceny do całkowitej zmiany bezwzględnej.
Ponieważ w praktyce istnieją różne nazwy i warianty, najbezpieczniejszym sposobem weryfikacji tego, czego używasz, jest sprawdzenie dokładnej definicji w ustawieniach wskaźnika, który posiadasz (na przykład długości okna wstecznego i stałych wygładzania). Poniższe obliczenie pokazuje jedną powszechnie stosowaną, stabilną strukturę; jeśli Kama na Twojej platformie używa innych nazw parametrów lub nieco innego wzoru na efektywność, kroki mechaniczne są podobne, ale stałe mogą się różnić.
Mechanizm i definicja
Praktycznym sposobem opisania mechaniki jest potraktowanie jej jako rekurencyjnego procesu wygładzania.
- Wybór szeregu cen wejściowych Kama jest obliczany na podstawie szeregu czasowego cen. „Cena” może być zdefiniowana na różne sposoby (na przykład cena zamknięcia, cena typowa lub inny szereg pochodny). Twój wybór ceny wejściowej musi odpowiadać implementacji, którą chcesz odtworzyć.
Niech P[t] będzie wybraną ceną w czasie t.
- Ustawienie okna wstecznego i granic wygładzania Typowy Kama używa:
- Długość okna wstecznego: N (ile okresów jest używanych do oceny efektywności)
- Ustawienie szybkiego wygładzania: zwykle reprezentowane przez mały „szybki” okres lub stałą
- Ustawienie wolnego wygładzania: zwykle reprezentowane przez większy „wolny” okres lub stałą
W wielu implementacjach granice wygładzania są konwertowane na dwie stałe:
- SC_fast i SC_slow wyprowadzone z okresów szybkiego i wolnego
Dokładne odwzorowanie zależy od implementacji. Częste podejście wykorzystuje stałe w stylu wygładzania wykładniczego postaci:
- SC_fast = 2 / (fastPeriod + 1)
- SC_slow = 2 / (slowPeriod + 1)
- Obliczenie wskaźnika efektywności (ER) za ostatnie N okresów W oknie wstecznym porównywane są dwie wielkości:
- Zmiana netto: |P[t] − P[t−N]|
- Suma bezwzględnych ruchów: sum_{i=0..N−1} |P[t−i] − P[t−i−1]|
Następnie obliczany jest wskaźnik efektywności ER:
- ER = netChange / sumAbsMoves
Ten ER jest zaprojektowany tak, aby był wyższy, gdy cena porusza się silnie od punktu początkowego do końcowego w stosunku do ilości ruchu „tam i z powrotem” wewnątrz okna. Gdy ER jest bliskie 0, cena porusza się bocznie; gdy ER jest bliższe 1, cena porusza się bardziej bezpośrednio.
Szczegół, który implementacje traktują jawnie: jeśli sumAbsMoves wynosi zero (na przykład, gdy cena jest niezmieniona w całym oknie), ER może być ustawione na 0 lub obsłużone w celu uniknięcia dzielenia przez zero. Należy odwzorować tę samą regułę, która jest używana w Twoim źródle.
- Konwersja ER na dynamiczną stałą wygładzania Zmienna stała wygładzania SC[t] jest następnie obliczana przy użyciu ER i granic wygładzania. Typowa struktura to:
- SC[t] = (ER × (SC_fast − SC_slow) + SC_slow)^2
Wykładnik (często 2) jest częścią powszechnie stosowanego wzoru; jeśli Twoja implementacja używa innego wykładnika, musisz użyć tego samego.
- Aktualizacja Kama rekurencyjnie Na koniec Kama jest aktualizowany jako:
- Kama[t] = Kama[t−1] + SC[t] × (P[t] − Kama[t−1])
Ta forma sprawia, że Kama „przyciąga się” do bieżącej ceny o wielkość zależną od SC[t]. Większe SC oznacza szybsze dostosowanie; mniejsze SC oznacza wolniejsze dostosowanie.
- Inicjalizacja Kama wymaga początkowej wartości startowej Kama[0] (lub Kama[N−1], w zależności od indeksowania). Wiele implementacji inicjalizuje Kama ceną z pierwszego dostępnego punktu lub prostą średnią ruchomą. Jeśli chcesz niezależnie zweryfikować obliczenia, potwierdź dokładną regułę inicjalizacji z definicji wskaźnika, który testujesz.
Dowód lub przykład (z jawnymi założeniami)
Poniżej znajduje się mały przykład liczbowy z podanymi założeniami. To nie są dane z rynku na żywo; pokazuje strukturę obliczeń, którą możesz powtórzyć na własnym szeregu.
Założenia dla przykładu:
- Cena wejściowa P to cena zamknięcia.
- Długość okna wstecznego N = 3.
- fastPeriod = 2, slowPeriod = 30, więc:
- SC_fast = 2/(2+1) = 0.666666…
- SC_slow = 2/(30+1) = 0.064516…
- Wykładnik wynosi 2 we wzorze na SC[t].
- Poprzednia wartość Kama to Kama[t−1] = 100.
Załóżmy, że w czasie t masz:
- P[t−2] = 99
- P[t−1] = 101
- P[t] = 100
Krok A: netChange
- netChange = |P[t] − P[t−N]| = |100 − 99| = 1
Krok B: sumAbsMoves Dla N = 3 potrzebujemy |P[t]−P[t−1]| + |P[t−1]−P[t−2]| + |P[t−2]−P[t−3]|. Ale nasz mini-szereg pokazuje tylko dwie poprzednie ceny. Aby zachować spójność demonstracji, rozszerz okno o P[t−3].
Niech P[t−3] = 98. Teraz oblicz:
- |P[t] − P[t−1]| = |100 − 101| = 1
- |P[t−1] − P[t−2]| = |101 − 99| = 2
- |P[t−2] − P[t−3]| = |99 − 98| = 1
- sumAbsMoves = 1 + 2 + 1 = 4
Krok C: ER
- ER = netChange / sumAbsMoves = 1 / 4 = 0.25
Krok D: dynamiczna stała wygładzania
- SC[t] = (ER × (SC_fast − SC_slow) + SC_slow)^2 Najpierw oblicz (SC_fast − SC_slow):
- 0.666666… − 0.064516… = 0.602150… Następnie człon liniowy:
- ER × (SC_fast − SC_slow) + SC_slow = 0.25 × 0.602150… + 0.064516… = 0.150537… + 0.064516… = 0.215053… Podnieś do kwadratu:
- SC[t] ≈ (0.215053…)^2 ≈ 0.0463
Krok E: aktualizacja Kama
- Kama[t] = Kama[t−1] + SC[t] × (P[t] − Kama[t−1]) = 100 + 0.0463 × (100 − 100) = 100
W tym skonstruowanym przykładzie bieżąca cena równa się poprzedniej wartości Kama, więc aktualizacja wynosi zero. Gdyby P[t] różniło się od Kama[t−1], zobaczylibyś niezerowe dostosowanie skalowane przez SC[t].
Dlaczego to ilustruje ideę: jeśli ER wzrasta (cena staje się bardziej bezpośrednia w ciągu N okresów), SC[t] ma tendencję do przesuwania się w kierunku SC_fast, co sprawia, że Kama reaguje szybciej. Jeśli ER maleje (ruch bardziej boczny), SC[t] ma tendencję do SC_slow, co czyni Kama gładszym.
Ograniczenia i ryzyka
-
Niedopasowanie parametrów Kama zależy od N, ustawień szybkiego/wolnego, wykładnika oraz reguł obsługi przypadków brzegowych (takich jak dzielenie przez zero). Jeśli skopiujesz wzór, ale nie dokładne odwzorowanie parametrów ze swojego wskaźnika, otrzymasz inne wartości.
-
Definicja ceny wejściowej Różne platformy definiują „cenę” inaczej. Jeśli jedna używa ceny zamknięcia, a inna ceny pochodnej (na przykład średniej z wysokiej/niskiej/zamknięcia), cały szereg wyjściowy się zmienia.