MFI i RSI miniatura

Ulepszony Indeks Przepływu Środków Pieniężnych (MFI) i Siły Względnej (RSI)

Witam we wpisie, w którym prezentuje ulepszone przeze mnie wskaźniki MFI i RSI napisane w najnowszej piątej wersji Pine Script do wykresów na Trading View. Dodałem do nich kilka ulepszeń przy okazji zachowując domyślny kod liczenia wyników, aby był on na pewno poprawny. Prezentuję listę ulepszeń (taka sama dla obydwu skryptów):

  • Dwa rodzaje oscylatorów na jednym wykresie. Domyślnie 9 okresowy (przyśpieszony) i 14 okresowy (zwykły). Daje to nam możliwość klastrowania się oscylatorów w celu mocniejszego sygnału, a dodatkowo przyśpieszony jest bardziej wrażliwy na zmiany zwłaszcza w MFI;
  • Podświetlanie tła na zielono, gdy indeks wchodzi w stan wyprzedania i na czerwono jeśli mamy wykupienie. Jeśli obydwie wartości (domyślnie 9 i 14) wejdą w dany obszar to mamy na nim mocniejszą zieleń, bądź czerwień;
  • Dodatkowa linia pozioma 90 (anty FOMO 😉 ) i dodana środkowa 50 dla MFI;
  • Ulepszona kolorystyka wykresów;
  • Spolszczona konfiguracja wartości oscylatorów.

Oczywiście w dalszym ciągu mamy pełną konfigurację wyświetlania danych jak:

  • Rodzaj linii, jej grubość, bądź wyświetlanie za pomocą obszaru, krzyżyków itd.,
  • Pełny dobór kolorystyki w tym stopnia przeźroczystości,
  • Wyświetlania i liczenia bądź nie danego oscylatora, tła, linii.
7COn1aQQ
Przykładowe działanie na świecach 4 godzinnych Bitcoina.

Indeks Przepływu Środków Pieniężnych (MFI)

MFI to po prostu ulepszony RSI biorący dodatkowo w obliczeniach wpływ wolumenu na swoje wartości. Również podaje wartości od 0 do 100. Spadek poniżej 20 generuje wyprzedanie, a wzrost powyżej 80 wykupienie.

Indeks przepływów pieniężnych (Money Flow Index, MFI) jest zasadniczo wskaźnikiem momentum, który oscyluje od zera do stu. Istnieje jednak zasadnicza różnica między nim, a niektórymi innymi popularnymi oscylatorami. W przeciwieństwie do średniego ruchu kierunkowego (ADX) lub wskaźnika siły względnej (RSI), model matematyczny wskaźnika MFI uwzględnia dane dotyczące wolumenu. Dlatego też, traderzy często nazywają go ważonym wolumenem wskaźnikiem RSI.

Twórcy wskaźnika, Gene Quong i Avrum Soudack, wymyślili pomysłowe rozwiązanie, które pozwoliło w kilku prostych krokach włączyć do wskaźnika dane dotyczące wolumenu.

Indeks przepływów pieniężnych jest przede wszystkim wizualną reprezentacją tak zwanego „współczynnika pieniądza”. Aby jednak uzyskać ten współczynnik, musimy najpierw obliczyć kilka innych rzeczy. Mianowicie, typową cena i przepływ pieniężny.

Identyfikacja wykupienia i wyprzedania z indeksem przepływów pieniężnych (MFI)

Podczas gdy wskaźnik siły względnej (RSI) lub inne oscylatory mogą również identyfikować wykupienie i wyprzedanie rynku, Money Flow Index jest w tym wyjątkowo dobry. Dodatkowe informacje o wolumenie pomagają indeksowi przepływów pieniężnych wyeliminować fałszywe sygnały wykupienia i wyprzedania, dzięki czemu jest on całkiem niezawodny, jeśli chcesz handlować wbrew panującej tendencji.

https://comparic.pl/money-flow-index-mfi-jak-wykorzystuja-go-profesjonalisci/
MFI wzor
Dokładny wzór z książki: K. Borowski, Analiza Techniczna Średnie Ruchome wskaźniki i oscylatory, Wyd. Difin
MFI konfiguracja
Konfiguracja oscylatora MFI

MFI równe 9 jest cieńszą linią domyślnie, a MFI równe 14 grubszą linią. Zauważcie dużo wyższą wrażliwość na zmiany MFI 9 w stosunku do RSI 9.

Kod skryptu MFI

Cały kod skryptu do modyfikacji i ulepszania:

//@version=5

indicator('MFI+')

//Wprowadzanie danych
length = input.int(title='Długość pierwszego MFI:', defval=9, minval=1, maxval=2000, group="Długości Indeksów Przepływu Pieniądza:")

wykupienie = input.int(title='Poziom wykupienia:', defval=80, minval=1, maxval=2000, group="Poziomy wykupienia i wprzedania:")
wyprzedanie = input.int(title='Poziom wyprzedania:', defval=20, minval=1, maxval=2000, group="Poziomy wykupienia i wprzedania:")

poziomdodatkowy = input.int(title='Poziom dodatkowy:', defval=90, minval=1, maxval=100, group="Dodatkowe linie poziome:")
poziomsrodkowy = input.int(title='Poziom dodatkowy (śr. lub inny):"', defval=50, minval=1, maxval=100, group="Dodatkowe linie poziome:")

//MFI pierwsze (przyśpieszone)
src = hlc3
upper = math.sum(volume * (ta.change(src) <= 0 ? 0 : src), length)
lower = math.sum(volume * (ta.change(src) >= 0 ? 0 : src), length)
_rsi(upper, lower) =>
    100.0 - 100.0 / (1.0 + upper / lower)
mf = _rsi(upper, lower)
plot(mf, 'MF', color=color.new(color.blue, 0), linewidth=1)
overbought = hline(wykupienie, title='Wykupione', color=#787B86)
oversold = hline(wyprzedanie, title='Wyprzedane', color=#787B86)
fill(overbought, oversold, color=color.new(color.blue, 90), title='Tło między wykupieniem i wyprzedaniem:')

bgcolor(mf > wykupienie ? color(color.red) : mf < wyprzedanie ? color(color.green) : na, transp=90)
hline(poziomdodatkowy, color=color.navy)
hline(poziomsrodkowy, color=color.new(#787B86, 50))

//MFI drugie (zwykłe)
length2 = input.int(title='Długość drugiego MFI: ', defval=14, minval=1, maxval=2000, group="Długości Indeksów Przepływu Pieniądza:")
src2 = hlc3
upper2 = math.sum(volume * (ta.change(src2) <= 0 ? 0 : src2), length2)
lower2 = math.sum(volume * (ta.change(src2) >= 0 ? 0 : src2), length2)
_rsi2(upper2, lower2) =>
    100.0 - 100.0 / (1.0 + upper2 / lower2)
mf2 = _rsi2(upper2, lower2)
plot(mf2, 'MF 2', color=color.new(color.purple, 0), linewidth=2)


bgcolor(mf2 > wykupienie ? color(color.red) : mf2 < wyprzedanie ? color(color.green) : na, transp=90)

Indeks Siły Względnej (RSI)

Klasyczny większości dobrze znany, chyba najpopularniejszy na świecie oscylator. Dokładny jego opis jest na Investopedii, ale po angielsku (https://www.investopedia.com/terms/r/rsi.asp).

RSI to wskaźnik siły względnej (z ang. relative strength index). Zaliczany jest do grupy oscylatorów, których głównym zadaniem jest znalezienie punktów zwrotnych na wykresie cenowym. Twórcą wskaźnika RSI jest Welles Wilder, a jego pierwsza prezentacja przypada na 1978 rok. Wtedy właśnie Wilder opublikował swoją książkę “New Concepts in Technical Trading Systems”. Wzmianka o wskaźniku pojawiła się również w  czasopiśmie Commodities. Wskaźnik siły względnej w swojej konstrukcji wykorzystuje m.in. mechanizm średniej ruchomej. RSI został również opisany w książce autorstwa Johna Murphiego “Analiza techniczna rynków finansowych”, nazywanej przez inwestorów Biblią Analizy Technicznej. Warto przed skorzystaniem z tego wskaźnika zapoznać się z książką Welles’a Wilder’a oraz Johna Murphiego. Wskaźnik siły względnej może stanowić istotne i skuteczne uzupełnienie strategii handlowej działającej na rynku walutowym Forex lub rynku akcyjnym.

https://www.fxmag.pl/edukacja/forex/rsi-wskaznik-sily-wzglednej-konstrukcja-oraz-wykorzystanie
RSI konfiguracja
Konfiguracja oscylatora RSI

Zauważcie, że w przypadku RSI zwykłe 14 zachowuje się tak jakby podążało za RSI równym 9. Dlatego tutaj domyślnie RSI równe 9 jest pogrubione i względem niego liczy się wybrana średnia. Jak ktoś chce by liczyło względem 14 to wystarczy zamienić liczby 🙂

Kod skryptu RSI

Również cały skrypt jak w przypadku MFI i Wolumenu pod VSA udostępniony na zasadzie otwartego kodu.

//@version=5
indicator(title="RSI+", shorttitle="RSI+", format=format.price, precision=2, timeframe="", timeframe_gaps=true)

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

//Wprowadzanie danych
rsiLengthInput = input.int(9, minval=1, title="Długość pierwszego RSI:", group="Ustawienia RSI:")
rsiSourceInput = input.source(close, "Source", group="Ustawienia RSI:")
rsiLengthInput2 = input.int(14, minval=1, title="Długość drugiegi RSI:", group="Ustawienia RSI:")
rsiSourceInput2 = input.source(close, "Source", group="Ustawienia RSI:")

maTypeInput = input.string("SMA", title="Typ średniej:", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Ustawienia średniej kroczącej:")
maLengthInput = input.int(14, title="Długość średniej:", group="Ustawienia średniej kroczącej:")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="Ustawienia średniej kroczącej:")


wykupienie = input.int(title='Poziom wykupienia:', defval=80, minval=1, maxval=2000, group="Poziomy wykupienia i wprzedania:")
wyprzedanie = input.int(title='Poziom wyprzedania:', defval=20, minval=1, maxval=2000, group="Poziomy wykupienia i wprzedania:")

poziomdodatkowy = input.int(title='Poziom dodatkowy:', defval=90, minval=1, maxval=100, group="Dodatkowe linie poziome:")
poziomsrodkowy = input.int(title='Poziom dodatkowy (śr. lub inny):', defval=50, minval=1, maxval=100, group="Dodatkowe linie poziome:")

// Pierwsze RSI
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

// Drugie RSI

up2 = ta.rma(math.max(ta.change(rsiSourceInput2), 0), rsiLengthInput2)
down2 = ta.rma(-math.min(ta.change(rsiSourceInput2), 0), rsiLengthInput2)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

// Rysowanie wyników
plot(rsi2, "RSI 2", color=color.purple, linewidth=1)
plot(rsi, "RSI", color=color.blue, linewidth=2)
plot(rsiMA, "RSI-based MA", color=color.orange)

rsiUpperBand = hline(wykupienie, "Górna linia RSI:", color=#787B86)
hline(poziomsrodkowy, "Środkowa linia RSI:", color=color.new(#787B86, 50))
rsiLowerBand = hline(wyprzedanie, "Dolna linia RSI:", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color.new(color.aqua, 90), title="Tło między wykupieniem i wyprzedaniem:")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Wyższa Wstęga Bollingera", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Niższa Wstęga Bollingera", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Wypełnienie tła Wstęgi Bollingera")

bgcolor(rsi > wykupienie ? color(color.red) : rsi < wyprzedanie ? color(color.green) : na, transp=90)
bgcolor(rsi2 > wykupienie ? color(color.red) : rsi2 < wyprzedanie ? color(color.green) : na, transp=90)
hline(poziomdodatkowy, title='Poziom dodatkowy:', color=color.navy)

Zaproszenia do używania skryptów

Indeks przepływu pieniądza (MFI):

Klastrowane MFI z dodatkami by Lukas_3000 on TradingView.com

Indeks siły względnej (RSI):

Klastrowane RSI z ulepszeniami by Lukas_3000 on TradingView.com

Owocnego testowania i ewentualnego użytkowania skryptów jak się spodobają. Oby jak najwięcej dały zarobić. Jeżeli macie jakieś pytania, sugestię to proszę o komentarz.
Pozdrawiam

4.9 8 votes
Article Rating
Subscribe
Powiadom o
guest
5 komentarzy
najnowszy
najstarszy oceniany
Inline Feedbacks
View all comments
Bartek
Gość
Bartek
1 miesiąc o temu

Czy autor może zerknąć na Dino. W tym tygodniu był nowy ATH. Dzisiaj niezły zjazd na sporych obrotach. Czy ten podjazd na ponad 380 złotych to nie tak zwana pułapka hossy?

Bartek
Gość
Bartek
1 miesiąc o temu
Reply to  Iluminata

Od kupna jestem właśnie daleki :). Myślałem bardziej o zajęciu S na FDNPH23 :). W raporcie dodatkowe 350 milionów długu.

Zilu
Admin
Zilu
1 miesiąc o temu

Używam obu wskaźników od dłuższego czasu ale zastąpienie dwóch w jednym jest naprawdę fajną sprawą, polecam.

looolzx
Admin
looolzx
1 miesiąc o temu

Dzięki, wyglądają ciekawie – zaczynam testować 🙂