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.
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 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
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
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?
Tak. Moim zdaniem jest to pułapka, a teraz na Dino trwa dystrybucja.
Zauważ, że od początku spółki na giełdzie w kwietniu 2014 dopiero w październiku 2021 zaczęła się pierwsza poważniejsza korekta. Teraz już kurs przeszedł w ruch boczny. Podbitkę zrobili teraz na fali wzrostów w USA.
Od razu mi się rzuca formacja harmoniczna. Czyli finalna podbitka lekko nad 400 zł, a potem mocne spadki. Jak miałbym to kupować to dopiero w okolicach 319 zł na szybkie odreagowanie.
https://www.tradingview.com/x/2fWcyraX
Taki ogólny podgląd. Jak chcesz to kupować to daj znać wymierzę dokładnie jak się już zbliży do określonych stref plus zobaczę po świecach zachowanie kursu.
Spójrz jak masz nabite parametry. Dodatkowo nastroje konsumenckie coraz gorsze.
Jeśli masz dodatkowe pytania to pisz.
Pozdrawiam 🙂
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.
Używam obu wskaźników od dłuższego czasu ale zastąpienie dwóch w jednym jest naprawdę fajną sprawą, polecam.
[wpd-tenor full=’bEBxkuyFiucAAAAM/yes-nice.gif’ preview=’bEBxkuyFiucAAAAe/yes-nice.png’ width=’320′ height=’240′]
Dzięki, wyglądają ciekawie – zaczynam testować 🙂