środa, 18 lutego 2026

Jak bardzo AI przyspieszy wzrost zysków w kolejnych latach?

To co się obecnie dzieje w świecie AI, szczególnie LLM (Large Language Model), przyprawia o zawrót głowy. Tempo rozwoju tej technologii jest oszałamiające, zarówno wertykalnie jak i horyzontalnie. To znaczy serwisy branżowe co chwilę donoszą o nowych funkcjach lub poprawionej efektywności jakiegoś modelu, a jednocześnie można korzystać z coraz większej ilości narzędzi do różnych celów. Dla gigantów z S&P 500 rozwój ich własnych AI to priorytet. Dla inwestorów oczywiście najważniejsze to pytanie o ich zyskowność, a więc czy zwrot będzie odpowiedni w stosunku do kosztów. Technologia ta pozwala zarówno zmniejszać koszty (zastępować ludzi) jak i zwiększać przychody (firmy kupują AI zamiast zatrudniać), jednak jej utrzymanie kosztuje bardzo dużo. Sprzęt to jedno, ale istnieje też ryzyko niepowodzenia. Nie chodzi tu nawet o realne możliwości danego modelu, ale o to, że konkurencja może przejąć klientów. Np. Microsoft i Google (czy Alphabet - choć ta nazwa jest taka jakaś...) wydadzą miliardy dolarów na AI (w 2025 jest to odpowiednio 65 i 60 mld dol - źródło), a w tym samym czasie ktoś trzeci "niszczy system", przejmuje klientów, a giganci przepalają fortunę.

Pytanie więc brzmi: jak może wyglądać wzrost EPS S&P 500 w kolejnych 5-10 latach? I teraz ciekawa sprawa: wydawałoby się, że będzie to powyżej średniej; ale okazuje się, że średni wzrost od 1981 do 2022 r. wynosi 15%. Dopiero mediana daje bardziej umiarkowany, choć nadal bardzo wysoki, bo 10%. A takie są mniej więcej oczekiwania co do kolejnych lat. J.P. Morgan szacuje wzrost 13-15% na lata 2026-2027 (źródło), a Goldman Sachs 12% w 2026 i 10% w kolejnym (źródło). 

Sam Standard and Poor's szacuje jednak ogromny wzrost ok. 20% na 2026 (źródło). Biorąc pod uwagę, że mamy do czynienia ciągle z hossą, przyjmę ten optymistyczny scenariusz, natomiast na 2027 średnią z wyżej wymienionych instytucji 14 i 10%, czyli 12%. 

Skłania to do pytania o lokalny szczyt samego impetu zysków. Coraz wolniejsze zmiany, a w końcu spadek zysku oznaczałoby występowanie cykliczności. Aby to sprawdzić najlepiej użyć periodogramu lub analizy spektralnej. 

W R najłatwiejszą funkcją (w sensie najmniejszej liczby ustawień) jest spectrum():

spectrum(x, method = c("pgram", "ar"))

Z metod mamy do wyboru periodogram lub spektrum dla modelu autoregresyjnego. Zaletą tego pierwszego jest to, że stanowi metodę nieparametryczną - nie nakłada specjalnych warunków na sygnał (chociaż musi być stacjonarny). Jego wadą jest jednak duża wrażliwość na wielkość próby, wykres jest poszarpany (duża wariancja) i piki mogą się układać przypadkowo niezależnie od wielkości próby (estymator jest niezgodny). Zaletą tego drugiego jest gładkość i stabilność (estymator zgodny), ale posiada dużą wadę: sygnał musi być liniowym procesem autoregresyjnym.

Pomimo prostoty to spectrum() jest tylko nakładką (wrapper) na odpowiednio spec.pgram() i spec.ar(). Lepiej ich używać, bo od razu widać jakie są dodatkowe argumenty i można nimi manipulować. Tak więc dla periodogramu najlepiej użyć:

spec.pgram(x, spans = NULL, kernel, taper = 0.1,

           pad = 0, fast = TRUE, demean = FALSE, detrend = TRUE,

           plot = TRUE, na.action = na.fail, ...)

  

Dzięki kalibracji spans, kernel i taper możemy zminimalizować przytoczone wyżej wady surowego periodogramu. 

Na ten moment zwrócę tylko uwagę na demean i detrend. Już samo detrend = TRUE oznacza usunięcie zarówno średniej jak i (liniowego) trendu, dlatego demean (usunięcie średniej) jest zbędne. Jeśli używamy czystego EPS, to jednak detrend nie wystarczy, bo usuwa tylko zwykły trend liniowy, a EPS rośnie przecież nieliniowo, powiedzmy wykładniczo (link do danych):


Po zlogarytmowaniu:


W tym miejscu kłania się problem skrajnego minimalizmu dokumentacji R, bo okazuje się, że nie wystarczą argumenty z funkcji spec.pgram, ale trzeba uwzględnić argumenty funkcji plot.spec, którą tamta funkcja wykorzystuje. Niestety domyślnie funkcja zamienia dane na logarytmy i dlatego trzeba dodać specjalny argument log = "no". 

W sumie tworzymy surowy periodogram z dwoma niezbędnymi argumentami (zmienną oznaczamy jako pg):
pg <- spec.pgram(x = log_eps, log = "no")




Powyższy wykres periodogramu w zasadzie udowadnia dużą przydatność tego narzędzia. Maksimum wyróżnia się od całej reszty, a jego położenie względem osi X wskazuje długość cyklu. Aby ją wyciągnąć używamy dwóch zmiennych obiektu pg:
pg$freq oraz pg$spec. 

freq_values <- pg$freq
spec_values <- pg$spec

Oznaczamy dalej:

freq_values <- pg$freq
spec_values <- pg$spec
idx_max <- which.max(spec_values)

Szukaną częstotliwości odpowiadającą maksimum oznaczymy fr_max i będzie to:
> fr_max <-freq_values[which.max(spec_values)]
> fr_max
[1] 0.125

Długość cyklu jest odwrotnością częstotliwości. Najprostsze wyjaśnienie może być na takim przykładzie. Powiedzmy, że mamy tylko 3 punkty w czasie, a każdy punkt to koniec roku. Mamy więc tylko 2 pełne lata. Pierwszy rok wzrost, a drugi rok spadek. To oznacza, że okres lub cykl trwa 2 lata.  lata i rok to jednostka czasu. Czyli w jednym roku mieści się pół cyklu, tj. 1/2 - odwrotność okresu.  (bo ta ostatnia mówi jak dużo cykli mieści się średnio w jednym roku, a więc odwrotność pokazuje ile lat mieści się w jednym średnim cyklu), oznaczmy cyc:
> cyc <- 1/fr_max
> cyc
[1] 8

A więc dostaliśmy "magiczną" liczbę 8 lat - tyle wynosi pełen cykl EPS: wzrost + spadek. 

Kolejnym krokiem jest użycie wykrytej cykliczności do budowy filtra Butterwortha (FB). Dotychczas używałem go w gretlu, ale teraz zrobię to w R, w bardziej zaawansowany sposób. Użyję pakietu gsignal, w którym potrzebujemy dwóch funkcji: butter() oraz filtfilt(). Pierwsza oblicza współczynniki filtra, a druga podstawia je bezpośrednio do filtra. 

Najważniejsze argumenty w funkcji butter() to rząd filtra oraz graniczna częstotliwość (znormalizowana częstotliwość odcięcia). Pozostałe argumenty dotyczą typu FB (w większości przypadków interesuje nas dolnoprzepustowy, to jest domyślne ustawienie), rodzaju płaszczyzny (wybór między filtrem cyfrowym a analogowym, interesuje nas zawsze cyfrowy - domyślne ustawienie) oraz czysto techniczne ustawienie formatu wyniku (tu zawsze wybieramy "Sos", skrót od Second-order sections). 

Chociaż pakiet ma ciekawe funkcje optymalizujące zarówno rząd filtra jak i częstość odcięcia, to dla naszych potrzeb wystarczy dotychczasowa wiedza, że ustawiamy rząd filtra = 2, natomiast znormalizowana częstotliwość odcięcia jest to 2*f_cut / fs, gdzie f_cut - częstotliwość odcięcia odpowiadająca maksimum periodogramu plus pewna nadwyżka (która bywa potrzebna, żeby uwzględnić niestabilność cyklu), fs to częstotliwość próbkowania (por. z opisem funkcji SciPy, który jest pierwowzorem). W naszym przypadku dane są roczne, więc pobieramy 1 na rok, tj. fs = 1, tak że zostaje 2*f_cut. To mnożenie przez 2 wydaje się być związane z twierdzeniem Nyquista o próbkowaniu. Zgodnie z tym twierdzeniem, aby sygnał został odtworzony bez zniekształceń, częstotliwość próbkowania musi być co najmniej dwa razy większa od częstotliwości odcięcia. Filtrowanie jest podobną operacją do próbkowania, dlatego można traktować taką częstość jako odpowiednią do zachowania sygnału. Od razu jednak dodam, że trochę zgaduję, bo może być tak, że to tylko przyjęta konwencja konstrukcji tej funkcji.

Żeby to zilustrować, pokażę jak wygląda FB z częstością odcięcia bez normalizacji, a jak wygląda po normalizacji. Przykład dla sinus z szumem:

# --- Parametry sygnału ---

fs <- 100                  # częstotliwość próbkowania w Hz

t <- seq(0, 5, by=1/fs)

f_sin <- 5                 # częstotliwość sinusa w Hz


# --- Sygnał sinusoidalny + biały szum ---

set.seed(123)

x <- sin(2*pi*f_sin*t) + rnorm(length(t), sd=0.5)


# --- Widmo sygnału ---

pg <- spec.pgram(x, log="no", plot=FALSE)

freq_values <- pg$freq        # jednostki Nyquista [0,0.5]

spec_values <- pg$spec

idx_max <- which.max(spec_values)

fr_max <- freq_values[idx_max] # główny pik


# --- Dwie wersje częstotliwości odcięcia ---

fr_cut1 <- fr_max         # zwykłe

fr_cut2 <- fr_cut1*2  # "podwójne" dla efektu wizualnego


# --- Filtry Butterwortha z gsignal ---

order_filtr <- 2

coef1 <- butter(order_filtr, fr_cut1, type="low", output="Sos")

coef2 <- butter(order_filtr, fr_cut2, type="low", output="Sos")


x_filt1 <- filtfilt(coef1, x)

x_filt2 <- filtfilt(coef2, x)


# --- Porównanie na wykresie ---

plot(t, x, type='l', col='gray', main='Sygnał sinus + szum')

lines(t, x_filt1, col='blue', lwd=2)

lines(t, x_filt2, col='red', lwd=2)

legend("topright", legend=c("Oryginalny", "fr_cut", "fr_cut*2"),

       col=c("gray","blue","red"), lwd=2)




Widzimy, że czerwony filtr (z normalizacją) dużo lepiej odzwierciedla przebieg faktycznych cykli. Nawet jednak ten filtr nie dostosowuje się idealnie do głównego sygnału - tak jak pisałem tutaj ważny jest kierunek, a nie wartość. Chociaż niebieska linia też wskazuje ten sam kierunek, to spójrzmy na końcówkę po prawej stronie - czerwona linia prawidłowa już zakręca, a niebieska dalej spada, wprowadzając w błąd. Przy większej zmienności także może zmylić badacza/inwestora/trejdera. Dlatego wybór częstości ma duże znaczenie. 

Wspomniałem wyżej, że samo podwojenie częstości może nie wystarczyć i przy niestabilności cykli trzeba dodać nadwyżkę. Pytanie ile dodać? Intuicyjnym sposobem jest dodanie takiej nadwyżki, która koresponduje z rozpoczęciem się piku spektralnego lub jego otoczeniem. Przy dużej zmienności piki nie będą bowiem linią pionową, ale zawsze będą miec kształt trójkąta albo paraboli. Aby wykonać to zadanie wykorzystamy funkcję findpeaks() w tym samym pakiecie, która służy do szukania lokalnych ekstremów. Kod:

# 1. Wyszukiwanie lokalnego ekstremum i dopasowanie paraboli do struktury piku
peak <- findpeaks(pg$spec, MinPeakHeight = max(pg$spec)*0.99)

# 2. Pobranie precyzyjnego, ułamkowego indeksu prawego punktu przecięcia z podstawą (a1)
idx_a1 <- peak$roots$a1

# 3. Zaokrąglenie wyniku do najbliższego całkowitego indeksu istniejącego binu w periodogramie
idx_s <- round(peak$roots$a1)

# 4. Odczytanie dyskretnej częstotliwości (cykle/rok) odpowiadającej wybranemu binowi szumu
fr_s <- pg$freq[idx_s]

# 5. Obliczenie statystycznej odległości (pasma przejścia) między sygnałem a poziomem tła [8]
d_peak <- abs(fr_max - fr_s)

# 6. Wyznaczenie finalnej częstotliwości granicznej pasma zaporowego dla projektu filtra [9, 10]
fr_cut <- fr_max + d_peak


Użycie progu 99% wysokości maksymalnej jako MinPeakHeight jest celowym zabiegiem. Choć mogłoby się wydawać, że szukamy po prostu max(pg$spec), to funkcja findpeaks robi coś znacznie ważniejszego: wykonuje interpolację (dopasowanie paraboli) do struktury piku (stąd potrzebne przybliżenie). Dzięki temu nie otrzymujemy tylko surowego, najwyższego binu z widma, ale cały obiekt (peak) zawierający precyzyjne parametry, takie jak ułamkowe indeksy podstawy piku (roots). To właśnie te dodatkowe dane, a nie tylko samo maksimum, są kluczowe do poprawnego wyznaczenia marginesu filtra.

Otrzymane fr_cut wyniosło 0.208. Zobaczmy jak to wygląda na periodogramie:



W końcu dochodzimy do funkcji butter(). tworzymy dolnoprzepustowy filtr Butterwortha:

order_filtr <- 2
fr_norm <- fr_max*2
#fr_norm <- fr_cut*2
coef_butter <- butter(order_filtr, fr_norm, type = "low", output = "Sos")
sygnal_filtr <- filtfilt(coef_butter, log_eps)
rysuj_wykres(x=lata, y1=log_eps, y2=sygnal_filtr, y1_nazwa="EPS S&P 500")


Trzeba sobie teraz zadać pytanie czy przewidywania przedstawione na początku nie są przesadzone biorąc pod uwagę, że przez 10 ostatnich lat filtr rośnie w linii prostej, nie mówiąc o spadku. Oczywiście można twierdzić, że era AI wszystko zmienia, że game changer" itd., ale era Internetu na początku 2000 r. też miała wszystko zmienić. 

Teraz zostaje nam prognoza naszego filtra. Standardem jest rozpoczęcie od ARIMA. Znajdźmy optymalny model -  możemy użyć pakietu forecast albo rugarch. Ponieważ jednak bardziej nas interesuje długoterminowa prognoza, to użyjemy tego pierwszego, bo ma on opcję użycia warunkowej metody największej wiarygodności, która jest lepsza dla takich celów (zob. np. tu).

Warto dodać, że dzięki zastosowaniu filtracji Butterwortha w dziedzinie logarytmów, uzyskujemy sygnał o ustabilizowanej wariancji i wyeliminowanych ekstremach, jak to w 2008. W takim układzie dodatkowa transformacja Box-Coxa w modelu ARIMA staje się zupełnie zbędna.

Stosujemy kod:
arima_model <- auto.arima(sygnal_filtr, ic = "aic", max.p = 10, max.q = 10, method = "CSS", stepwise = FALSE, approximation = FALSE)
summary(arima_model)
dopas <- arima_model$fitted
prognoza <- forecast(arima_model, h=6)$mean
rysuj_wykres(x=lata, y1=log_eps, y2=dopas, y_prognoza=prognoza, y1_nazwa="EPS S&P 500")

Otrzymałem model ARIMA(3,1,2) 

Coefficients:
        ar1     ar2    ar3    ma1    ma2
      2.106  -2.001  0.770  1.857  0.926
s.e.  0.111   0.175  0.107  0.101  0.082


To samo dostałem dla kryterium "bic", więc to nie przypadek.



Wg modelu prognoza na 2026 r. wynosi  5.63 i na 2027 5.72. Żeby porównać ze wskazanymi na początku 20% i 10%, musielibyśmy retrasformować uzyskane liczby exp(5.63) = 279 i exp(5.72) = 305. W 2025 mamy 244.5, stąd 279 / 244.5 - 1 = 14%. W 2026 305 / 279 = 9,3%. Czyli dostajemy tutaj nieco mniejsze prognozy, ale należy uwzględnić fakt, że retrasformacja z postaci liniowej do nieliniowej powoduje pewien błąd w sytuacji, gdy wartość oczekiwana parametrów jest nieznana. Ta dodatkowa zmienność może jeszcze podnieść wartość. Stąd uzyskany model dobrze odpowiada początkowym prognozom. Taki wynik zwiększa jego wiarygodność, a to z kolei uwiarygadnia prognozy na późniejsze lata - po 2027. Na dziś możemy więc spodziewać się spowolnienia od roku 2029. Byłby to okres trochę podobny do roku 2000. 

środa, 3 grudnia 2025

Poziom WIG20 bardziej racjonalny niż sądziłem

Dopóki nie miałem dość motywacji, by wnikliwie przeanalizować parametry wyceny WIG20 byłem absolutnie pewien, że mamy do czynienia z przewartościowaniem. Wychodzi jednak na to, że sprawa jest dużo bardziej złożona. Od razu mówię, że obecna wycena może nie być ostateczna, bo możliwe, że pewne (mniejsze lub większe) drobiazgi będę jeszcze poprawiał. Wycena jest na dzień 01.12.2025, kurs = 3007.41 pkt. Wartość wewnętrzna wychodzi w przedziale 2440-3010, tzn. indeks osiągnął górny pułap racjonalnej wyceny.

Przyczyny poprawy wyceny

Przyczyną tej zmiany jest, najkrócej mówiąc, zrozumienie, że należy przyjąć niższą oczekiwaną stopę zwrotu. Sprawę tę wyjaśniłem w poprzednim artykule, więc nie będę się tu o tym rozwodził. Jednocześnie myślę, że później trzeba będzie głębiej przyjrzeć się związkowi między oczekiwaną stopą zwrotu a oczekiwanym wzrostem dywidendy, bo dotychczas traktowałem je raczej jako niezależne od siebie. W każdym razie WIG20 ma niższy koszt kapitału od WIG o ok. 2 pkt proc. I te 2 procenciki wszystko zmieniają...

No dobra, może nie wszystko. Pisałem, że sprawa jest bardziej skomplikowana. Stopa dyskontowa to jedno, ale założenia ROE i EPS to drugie. To po kolei. Szczegółowa analiza wszystkich spółek WIG20 pozwala nie tylko sprawdzić, na ile obliczenia wskaźników przez GPW pokrywają się z moimi, ale też zobaczyć, które spółki są problematyczne (mają straty) i co się stanie, jeśli usuniemy te straty. Wyjaśniałem już, że w długim terminie spółki WIG20 nie mogą ponosić strat, bo zostałyby wyrzucone z indeksu i zastąpione zyskownymi. A nawet jeśli nie zostaną wyrzucone, to ich udział spadnie z powodu niskiej kapitalizacji i nie będą mieć większego wpływu na indeks. Z drugiej strony całkowite wyzerowanie strat też się mija z celem. Ktoś może argumentować, że jeśli straty są jednorazowe, to nie powinniśmy ich uwzględniać, bo wycenę tworzą jedynie przyszłe zyski. Ale przecież te przyszłe zyski są generowane przez kapitał własny, a ten został właśnie obniżony o te straty. Jeśli teraz wyzerujemy straty, to zawyżymy ROE, bo spadek KW będzie większy niż spadek sumarycznego EPS.  Mój pomysł polegał na utworzeniu tych oddzielnych wariantów wyceny, a następnie uśrednieniu założeń obu, uzyskując w ten sposób unikalny wariant. Nazywam go pierwszym, bo jest ustawiony w pierwszej kolejności i jest najważniejszy. Pozostałe dwa służą głównie do porównań. 

Porównując wskaźniki z mojej analizy do tych oficjalnych, zauważymy, że C/WK są bardzo zbliżone (u mnie 1.55, oficjalne - 1.61), natomiast C/Z już trochę oddalone (14.93 vs. 15,67). Różnica w ROE jest zaniedbywalna (10.4 vs. 10.3). Do tego momentu wszystko się zgadza. Ale co się stanie, jeśli stworzymy czwarty wariant polegający na użyciu bieżącego EPS z tych oficjalnych danych, ale użyciu pozostałych parametrów? Otóż dostaniemy wartość wewnętrzną 2538 pkt. Natomiast pierwszy wariant wskazał 3013. 

Różnica między pierwszym a czwartym wariantem jest taka, że pierwszy mówi coś w rodzaju: "biorę EPS ze wszystkich spółek, następnie biorę EPS tylko spółek bez strat, i uśredniam oba", a czwarty mówi: "biorę EPS taki, jaki wychodzi z oficjalnego wskaźnika C/Z". Potem oba warianty biorą już te same uśrednione parametry. 

2 techniki czy 2 metody?

Fakt, że C/Z jest mocniej odchylone w mojej analizie od GPW oznacza, że poszczególne spółki mają wpisane inne zyski. Aby się upewnić, że poprawnie konstruuję indeks oraz jego wskaźniki, analizę (a właściwie syntezę) wykonałem dwiema różnymi technikami. W pierwszej wyłuskałem z portalu bankier.pl liczbę akcji, księgową kapitalizację (kapitał własny) i zysk z ostatnich 4-ch kwartałów. W drugiej technice wykorzystałem wskaźniki podane przez stooq.pl. Najpierw spójrzmy sumarycznie: C/WK jest identyczne u obu, ale C/Z "bankierowe" jest znacznie niższe od "stooqowego" (14.9 vs. 17).

Głównym winowajacą tej różnicy jest Orlen. Otóż wg Stooq oraz GPW C/Z Orlenu wynosi 17, a u mnie 7.7. Ewidentnie coś tu jest nie tak. Zacząłem więc drążyć. Przejrzałem rzeczywiste sprawozdania. Okazało się, że zarówno Bankier, jak i Stooq mają rację. Bo tu wchodzimy w temat kreatywnej księgowości. Czwarty kwartał 2024 w sprawozdaniu faktycznie pokazuje duży zysk netto 4 664 000 tys. zł. Ale gdybyśmy dodali do niego pozostałe kwartały, dostalibyśmy więcej niż zysk za cały rok 2024! Ten paradoks powstaje w wyniku ogromnych odpisów ujawnionych dopiero na etapie rocznego sprawozdania (6,2 mld zł). 

Jak porównamy sobie np. kwartalne wyniki w Biznesradar, to zobaczymy, że zyski za 1-3 kw 2024  są takie same jak w Bankierze, ale za 4-ty kw jest strata 1,55 mld zł, a w Bankierze wspomniane 4,7 mld zysku. Bankier pokazuje oryginalne dane z raportu kwartalnego, a Biznesradar wrzuca odpis do ostatniego kwartału, aby wyrównać z danymi rocznymi. 

Z księgowego punktu widzenia to Bankier prezentuje poprawne wyniki. Ale to Biznesradar oddaje pełny obraz sytuacji. Czyli fajnie tu widać różnicę między księgowym a inwestorskim punktem widzenia. Stooq oraz GPW podają więc C/Z dla Orlenu taki, jaki wynika inwestorskiej perspektywy.

I teraz pozornie wydaje się, że skoro podejście Stooq jest lepsze dla inwestora, to powinniśmy porzucić bankierową technikę. Ale znowu - zastanówmy się czy rzeczywiście te odpisy są tak ważne, by je umieszczać w EPS. To są jednorazowe zdarzenia, które nie mogą być traktowane na równi ze zwykłymi kosztami. Zresztą kurs Orlenu dowodzi, że inwestorzy już dawno "przetrawili" te straty. Jeśli mamy prognozować przyszłe C/Z, to prędzej to bankierowe (7,7) będzie przybliżać jego wartość. 

Ale, tak jak pisałem, nie można zupełnie pomijać jednorazowych strat, które mają negatywny wpływ na wartość poprzez niższy KW - niezależnie od tego czy ta strata jest czysto księgowa (papierowa / memoriałowa) czy kasowa. Zanim te odpisy nastąpiły, kupiono aktywa za pieniądze. Te pieniądze ktoś dał w dobrej wierze. Jeśli aktywa nie ma, to i zwrotu pieniędzy (z inwestycji) nie ma. Przecież cały kapitał własny opiera się na dobrej wierze inwestorów, że spółka zwróci w przyszłości im pieniądze i jeszcze wypłaci nadwyżkę - w postaci dywidend. Skoro tej przyszłości nie ma, to znaczy, że te pieniądze przepadły. Stąd papierowe zyski mają znaczenie dla wyceny.

Podsumowując tę część, zrobiłem dwa arkusze z wyceną na ten sam dzień liczone inną techniką... czy może metodą? Żeby było jasne - technika to nie metoda. Przez technikę rozumiem sposób zdobywania danych, a przez metodę sposób obliczania wyników i wyceny, którego rdzeń stanowi jakaś filozofia podejścia. Metoda będzie się różnić w sensie założeń, a technika w sensie źródła danych. Przykładowo, bankierową techniką obliczałem C/Z mnożąc cenę zamknięcia przez liczbę akcji, i dzieląc to przez sumę zysków z 4-ch ostatnich kwartałów (dane z bankiera). Stooqowa technika pozwala od razu wpisać C/Z wprost z portalu. Natomiast metoda jest tu inna tylko w tym sensie, że zysk TTM (Trailing Twelve Months, tj. z 12-tu ostatnich miesięcy) uwzględnia (Stooq) lub nie uwzględnia (Bankier) różnic między raportem rocznym a kwartalnym.

Uśrednienie prognoz

Po głębszym przeanalizowaniu tej sprawy myślę, że jest sensowne wyciągnięcie średniej z tych dwóch arkuszy. Tego już tam nie pokazuję, więc tutaj o tym napiszę. W każdym arkuszu za najważniejszy uważam wariant 1 i 4. W technice bankierowej są to odpowiednio wartości 3013 oraz 2538. W technice stooqowej 2585 oraz 2443. Najpierw uśredniłbym 3013 z 2585, czyli dostajemy:

(3013 + 2585)/2 = 2800.

Następnie wyciągnę średnią 2538 i 2443:

(2538 + 2443)/2 = 2490.

Czy jest sens wyciąganie jeszcze średnich z tych liczb? Wydaje mi się to już trochę sztuczne, bo pierwsza wartość koncentruje się bardziej na przyszłości, natomiast druga (czyli oparta o oficjalne wskaźniki GPW) bardziej na teraźniejszości. Ta pierwsza jest jakby bardziej nastawiona na to co będzie za jakiś czas, a ta druga bardziej na wycenę bieżącą (chociaż to taka luźna interpretacja).

Przedział prognozy

Uzyskany przedział 2490-2800 jest bardzo umowny i należy go prędzej traktować jak średnią z przedziałów. Bo taki najbardziej konserwatywny wynik byłby na poziomie tego 2440, a najbardziej optymistyczny 3310.

Rzecz jasna nie oznacza to, że WIG20 nie pójdzie jeszcze w górę, a jedynie, że każdy ruch powyżej obecnego poziomu rodzi coraz wyższe ryzyko (dla inwestora przesadnie duże). Przypomnę może wycenę vs. indeks w listopadzie roku 2017 (przy okazji - jakieś deja vu - znowu rok po rządach Trumpa):

Jest to jeden z możliwych scenariuszy.

Link do wycen - ten sam co poprzednio. Po prostu dorzuciłem dwa nowe arkusze z wycenami.