ХОЛОДНЫЙ РАСЧЕТ ∅
11.3K subscribers
2.74K photos
29 videos
38 files
1.97K links
Download Telegram
Forwarded from Helicopter Macro
Исторический момент: впервые бОльшая часть населения считает, что за стабильность цен в стране отвечает ЦБ РФ, а не правительство (27% vs 26% опрошенных, по данным инФОМ).

Меры по повышению финансовой грамотности дают свои плоды 💪 Глядишь, такими темпами и призывы к более низкой ставке будут все меньше возбуждать общество.

Но на этом хорошие новости заканчиваются. Даже из тех, кто считает, что за цены отвечает Банк России, лишь ~60% слышали о том, что ЦБ стремится удерживать инфляцию на определенном уровне.

А из тех, кто что-то слышал о таргете, правильный ответ о том, что цель по инфляции – 4%, дают менее 1/5 опрошенных.

@helicoptermacro
Forwarded from Truevalue
О рынке акций в моменте и на длинном горизонте.

С пятницы произошло много экстремальных событий: новые минимумы на рынке акций на высоких оборотах, максимальный спред курсов валют на Мосбирже и межбанке (9% по кросс-курсу юаня), падал и рынок ОФЗ (средняя доходность 16,4% близка к максимумам), и корпоративные облигации (средняя доходность 18,9% на максимуме), новые санкции от США и возможность навеса от расконвертации депозитарных расписок, арест Павла Дурова…

Но самое важное для рынка акций случилось в выходные - ЦБ признал проблему навеса акций от нерезидентов и выпустил специальное предписание депозитариям, чтобы закрыть лазейку по ДУ.

О проблеме намекало закрытие информации в "Обзоре рисков финансовых рынков" о продавцах акций в июле. ЦБ сообщил только о том, что основными покупателями выступили СЗКО (20,2 млрд руб.), физлица (14,2 млрд) и прочие банки (8,8 млрд). Но не сказал, кто продал акций в сумме на 43 млрд.

Нерезиденты до этого напрямую продавали стабильно и понемногу (144 млрд за 1,5 года или по ~9 млрд руб. в месяц). Но были две категории участников, где за покупками одних могли скрываться большие продажи тех, кто покупал у нерезидентов, – брокеры-НФО и доверительное управление.

В общем, если в этом была основная причина обвала на рынке акций, то теперь появилась возможность для разворота.

📉 С максимумов в апреле рынок акций упал на 24% по индексу Мосбиржи 3500->2660. Капитализация широкого рынка MOEXBMI никогда не была так низко относительно ВВП (22%, или 42 от 191 трлн), если сравнивать со среднегодовыми значениями. По 100 ликвидным акциям снижение ещё больше ~32% по медиане от максимума за 100 дней.

Впрочем, на длинном горизонте потенциал все так же велик, если принять на веру достижение цели по капитализации в 2/3 ВВП к 2030. Среднегодовой рост CAGR в апреле оценивался в ~22%, а сейчас ~28%. Длинные ОФЗ тогда были 13%, а сейчас 16%. Если не до 2030, то на горизонте 1-2 лет при снижении ставок и ОФЗ, и акции покажут рост ещё больше.

💡Но долгосрочно нужно решать проблему владения нерезидентами до 20% всех российских акций - по текущей цене до 10 трлн руб. Это оценка по верхнему уровню. В реальности должно быть меньше и в доле, и тем более по возможной цене выкупа.

Общий Free Float рынка по индексу MOEXBMI ~33%, из них до 20% недоступно для торговли на Мосбирже и принадлежит нерезидентам (или частично резидентам во внешнем контуре). Более 14% капитализации на ~7 трлн свободно обращается на Мосбирже и принадлежит миноритарным акционерам-резидентам.

Free Float (FF) по отдельным акциям Мосбиржа оценивает ежеквартально при пересмотре структуры индексов. Доля доступных акций (w_factor) изменяется редко. В Газпроме 0,4, Сбере 0,3, Роснефти 0,2 и многих других не было изменений больше года (добавил крупным по +0,1 в расчётах). В Т-банке в июне пересмотрели с 0,1 до 0,6, в Новатеке в марте с 0,2 до 0,3. Следующий пересмотр будет в сентябре.

Ниже список акций, где возможен ЛИБО наибольший навес, ЛИБО дополнительный потенциал роста, если общество сможет выкупить акции с дисконтом у нерезидентов на свой баланс и погасить. В порядке убывания отношения доли нерезидентов к доле резидентов во FF (в скобках % FF):

~4,0 - FIVE (41% FF), Мосбиржа (65%), Фосагро (26%), Headhunter (62%)

~2,3 - Роснефть (11% FF), OZON (33%), Магнит (37%), МТС (41%), Глобалтранс (56%).

~1,5 - Сбер (48% FF), Лукойл (55%), Новатэк (21%), ГМК (32%), Полюс (22%), Северсталь (23%), НЛМК (21%), Алроса (34%), Транснефть (37%)

~1,0 - Газпром (50% FF), Сургут пр. (73%), ВТБ (17%), БСПБ (30%)

Лучшим решением для акций госкомпаний был бы выкуп всех нерезидентов на баланс ЦБ или Правительства. А после – внесение акций в капитал ПАО по цене выкупа для погашения. Государство немного увеличит свою долю, но выгоду от выкупа нерезидентов с дисконтом справедливо получат все акционеры, а не избранные (цена акций вырастет для всех).

@truevalue
Forwarded from TruEcon
#рубль #юань #доллар #fx #БанкРоссии

Очередной рекорд ...

В понедельник курсы разъехались еще дальше, все же сделали новый рекорд, если в мире доллар падал, то у нас внебиржевой курс еще немного подрос, а биржевой курс юаня снизился:

🟢CNY/RUB – 11.6863 (-0.8%)
🟢USD/RUB – 91.7745 (0.2%)

Кросс-курс USD/CNY по официальным данным составил 7.85 юаня за доллар при внешнем курсе около 7.12 юаня за доллар.

❗️ Расхождение USD/CNY между кросс-курсом у нас и офшором ними составило рекордные 10.3% - едем дальше.


Хотя поле налогов, вероятно, давление на биржевой юань все же снизится, но очевидно, что эта ситуация потребует каких-то решений ... хотя бы косметически, например, переноса зеркалирования операций ФНБ с биржи на внебиржевой рынок, или их дифференциации по объемам (в зависимости от расхождения курсов и периода) и т.п.

@truecon
Forwarded from Truevalue
Тут разные варианты могут быть. Важно не допустить избыточный отток капитала и убрать схемы, которые создают навес на рынке и несправедливо распределяют прибыль от выкупа активов с дисконтом (априори все сделки с нерезидентами ничтожны, но если успел продать на бирже, то никто уже не развернет сделку)

1. Выкуп добровольный требует использования валютных резервов или золота. Фактически государство меняет часть избыточных резервов на долю в госкомпании.

2. Выкуп принудительный (когда-то в будущем, как зеркальная мера на экспроприацию ЗВР). Акции меняются на рубли, но рубли идут на счетах типа С в АСВ, то есть обратно государству.

В каждом случае вырастает стоимость акций для всех за счет уменьшения числа акций.
Правительство России поддержало переименование Ростова в Ростов Великий. Это очередной большой шаг в вопросе восстановления исторической справедливости, а сама инициатива уже в финальной стадии реализации.

От федерального Правительства получено положительное заключение. Его подписал вице-премьер – руководитель аппарата Правительства РФ Дмитрий Григоренко. Документ уже направлен в Государственную Думу. Надеемся на завершение всех юридических процедур в этом году.
Forwarded from Alex Gerasimenko
1y 19.97/20.12 :)
Forwarded from ВЕДОМОСТИ
ЦБ аннулировал лицензию на осуществление брокерской деятельности ООО «Голдман Сакс Банк», следует из материалов регулятора.

Лицензия была аннулирована на основании заявления самой кредитной организации.

➡️ Goldman Sachs работает в России с конца 1990-х. Изначально в России был создан брокер-дилер, а через несколько лет – банк, который также получил брокерскую и дилерскую лицензии.

📰 Подпишитесь на «Ведомости»
Please open Telegram to view this post
VIEW IN TELEGRAM
Пешим ходом

Попался интересный источник данных по доступности инфраструктуры для пешеходов в городах мира (учитываются супермаркеты, места отдыха, кафе и рестораны, школы, больницы и т.д.). Справочно для всех городов приведены координаты, площадь и население (последние два показателя не совпадают с официальными данными, а рассчитаны для «функциональных городских территорий»). Файл в формате geojson можно скачать по ссылке.

Попробуем исследовать эти данные с двух сторон. В главке (1) посмотрим, какова доступность инфраструктуры в городах ЦФО — кто чемпион и кто аутсайдер, и связано ли это с плотностью населения? В главке (2) сравним Россию с некоторыми другими странами — пусть это будут Германия, США, Япония, Великобритания и Китай
Пешим ходом (1)

Цветом отобразил доступность городской инфраструктуры — от высокого зеленого (Москва) до низкого красного (Кинешма). Размер кружочков — площадь в расчете на человека: чем больше «ареал обитания» среднего жителя, тем сложнее добраться до инфраструктуры. В принципе, здесь видна взаимосвязь, если сравнить, опять же, Кинешму с Москвой, но более четко эту взаимосвязь увидим позже.

Сейчас же хочется отметить, что во многих областях ЦФО второй крупный город (Кинешма, Елец, Мичуринск, Обнинск) не дотягивает до региональной столицы (Иваново, Липецк, Тамбов, Калуга). Вероятно, это следствие перетока части населения в локальные центры экономической активности или в Москву. Хотя есть и исключения – например, в паре Орел / Ливны второй город, наоборот, выделяется высокой доступностью инфраструктуры
Сравнение цен Росстата и Магнолии: никаких сенсаций 2.

Продолжаем сверять цены Росстата (июль) и Магнолии (август), а также среднюю инфляцию за последние 12 месяцев по корзине Росстата и медианное изменение цены товаров.

Тезис 1.
Поскольку весь каталог анализировать лень, то вот самые полезные десять товаров:

1) апельсины руб. за кг (Росстат 154, Магнолия 170 но это какие-то премиальные)

2) молоко стерилизованное руб. за литр (Росстат 108, Магнолия 105)

3) картофель руб. за кг (Росстат 61, Магнолия 50)

4) сметана руб. за кг (Росстат 340, Магнолия 366)

5) зубная паста руб. за 100 г (Росстат 208, Магнолия 150)

6) мёд пчелиный руб. за кг (Росстат 633, Магнолия 680)

7) сыр плавленый руб. за кг (Росстат 736, Магнолия 750)

8) стиральный порошок руб. за кг (Росстат 213, Магнолия 217)

и этого нет в Магнолии но:

9) сотовая связь руб. в мес. (Росстат 727)

10) интернет руб. в мес. (Росстат 629)

11) кофе в орг. быстрого обслуживания за 400 мл. (у меня 190, у Росстата 194)


Тезис 2.
Проверяем медианное изменение цен на товары и услуги в Москве за август 2023 - июль 2024 по файлу Росстата. У меня получилось вот так. Медианное значение изменения цены среди всех = 10,06%, а накопленная инфляция = 9,99%.

Выводы:
1) в августе 2024 у Росстата разумные цены на отдельные товары и услуги;
2) ИПЦ согласуется с ценами отдельных товаров и услуг. Это важно, потому что "корзину Росстата" часто ругают за непонятные веса, но медиана примерно как общий индекс. Росстат молодец!

#Russia #Inflation #Rosstat
ХОЛОДНЫЙ РАСЧЕТ ∅
Сравнение цен Росстата и Магнолии: никаких сенсаций 2. Продолжаем сверять цены Росстата (июль) и Магнолии (август), а также среднюю инфляцию за последние 12 месяцев по корзине Росстата и медианное изменение цены товаров. Тезис 1. Поскольку весь каталог анализировать…
Признаемся, что каждому из нас нужен предлог, чтобы зайти в любимый магаз за углом

Вместе с тем, приобретение сырка Б.Ю. Александрова, и защита чести и достоинства российской статистики вряд ли стоит совмещать в один поход

Заинтересованный исследователь может получать десятки тысяч цен с уровнем написания кода в Python "тят-тяп и готово"

Вот шаблон кода, который пару лет назад давал возможность скрейпить один из крупнейших розничных магазинов - осталось запустить, собрать цифры и разметить позиции в справочник Росстата

Шаг 1. Введение

import urllib.parse
import datetime
import json
import os
import random
import sys
import time
import pickle
import re

from bs4 import BeautifulSoup
from utilities.BaseParser import open_url_engine


def getPricePages(VPROKURL):
# global rs
# rs.get(VPROKURL)
# time.sleep(6)
# htmlSource = rs.driver.page_source
# rs.driver.close()
with open_url_engine(engine_type='selenium', headless=True) as url_engine:
# soup = BeautifulSoup(htmlSource, "html.parser")
soup = url_engine.get_soup(VPROKURL)
time.sleep(4)
soup = BeautifulSoup(url_engine.browser.get_page_source())
mmenu = soup.select("a.xf-catalog-categories__link")
sections = []
for m in mmenu:
sections.append(urllib.parse.urljoin(VPROKURL, m['href']))
print(m['href'])
return sections


def scrapePrices(VPROKURL, secURL, url_engine):
# collector for prices
# rs = RobustSelenium(7)
products = {}
page = 1
psoup = url_engine.get_soup(urllib.parse.urljoin(secURL, f'?page={page}&sort=rate_desc'))
time.sleep(8)
while True:
# rs.get(urllib.parse.urljoin(secURL, f'?page={page}&sort=rate_desc'))
# htmlp = rs.driver.page_source
# psoup = BeautifulSoup(htmlp, "html.parser")
psoup = url_engine.get_soup(urllib.parse.urljoin(secURL, f'?page={page}&sort=rate_desc'))
time.sleep(1)
psoup = BeautifulSoup(url_engine.browser.get_page_source())
cards = psoup.select('.js-catalog-product')
newcards = {}
if cards:
for c in cards:
url = c.select_one('.xf-product-title > a')['href']
url = urllib.parse.urljoin(VPROKURL, url[1:])
pattern = '(https://www.vprok.ru/product/)(.+)(--)([0-9]+)'
res = list(re.findall(pattern, url)[0])
url = res[0] + 'product--' + res[-1]
if url not in products.keys():
try: # 44211
newcards[url] = parseCard(c, url)
except ValueError as e:
with open('44211_psoup.pkl', 'w') as wrong_price_file: # 44211
pickle.dump(psoup, wrong_price_file) # 44211
with open('wrong_url', 'w') as wrong_url_file: # 44211
wrong_url_file.write(url) # 44211
print(f'44211 found in {url}', file=sys.stderr) # 44211
if newcards:
products.update(newcards)
page += 1
print(f'page {page} ' + secURL)
else:
break
else:
break
# rs.driver.close()
return products
ХОЛОДНЫЙ РАСЧЕТ ∅
Сравнение цен Росстата и Магнолии: никаких сенсаций 2. Продолжаем сверять цены Росстата (июль) и Магнолии (август), а также среднюю инфляцию за последние 12 месяцев по корзине Росстата и медианное изменение цены товаров. Тезис 1. Поскольку весь каталог анализировать…
Шаг 2. Парсинг карточки отдельного товара



def parseCard(card, url):
parsed = {}
parsed['DateTimeObserved'] = str(datetime.datetime.now())
parsed['URL'] = url
# Check for out of stock status
stockStatus = card.select_one('.xf-product__out')
if stockStatus:
parsed['Status'] = 'OutOfStock'
parsed['CurrentPrice'] = None
parsed['CrossedPrice'] = None
else:
parsed['Status'] = 'InStock'
currentprice = card.select_one('.xf-product-cost__current')
parsed['CurrentPrice'] = float(currentprice['data-cost'])
crossedprice = card.select_one('.xf-product-cost__prev')
try:
if crossedprice and float(crossedprice['data-cost']) > 0.0:
parsed['CrossedPrice'] = float(crossedprice['data-cost'])
except:
parsed['CrossedPrice'] = None
try:
parsed['ProductName'] = card.select_one('.xf-product-title > a')['title']
except:
print('some error was occurred during obtaining productName, url is:\n', url, file=sys.stderr)
pass

if parsed['CurrentPrice'] == 44211: # 44211
raise ValueError('Odd value in CurrentPrice, 44211') # 44211
return parsed
ХОЛОДНЫЙ РАСЧЕТ ∅
Шаг 2. Парсинг карточки отдельного товара def parseCard(card, url): parsed = {} parsed['DateTimeObserved'] = str(datetime.datetime.now()) parsed['URL'] = url # Check for out of stock status stockStatus = card.select_one('.xf-product__out')…
Шаг 3. Главный цикл и дамп собранных данных

def main():
"""
Main function.
"""
# walk original subset of link and find price lists
# but not every time, but say 5% of the time

timeexec = datetime.datetime.now().strftime('%Y%m%d%H')
print(timeexec)

PRICEDIR = os.path.join(os.path.dirname(__file__), 'json', os.path.basename(__file__).replace('.py', ''))
PRICEDIR = os.path.join(PRICEDIR, timeexec)
os.makedirs(PRICEDIR, exist_ok=True)

DATAFILE = os.path.join(os.path.dirname(__file__), os.path.basename(__file__).replace('.py', '.data'))

VPROKURL = 'https://www.vprok.ru/catalog'

r = random.uniform(0, 1)
if r > 0.2 or not os.path.exists(DATAFILE):
pricePages = getPricePages(VPROKURL)
with open(DATAFILE, 'wb') as f:
pickle.dump(pricePages, f)
# load price pages
with open(DATAFILE, 'rb') as f:
pricePages = pickle.load(f)
# scrape price lists
pricePages = [*set(pricePages)]
random.shuffle(pricePages)
url_engine_options = {
# 'type': 'requests'
'type': 'selenium'
, 'max_attempts': 5
, 'sleep_time_sec': 3
}
with open_url_engine(url_engine_options, headless=True) as url_engine:
for sectionNumber, page in enumerate(pricePages):
pricePack = scrapePrices(VPROKURL, page, url_engine)
# and save data
with open(os.path.join(PRICEDIR, 'sec' + str(sectionNumber) + '.json'), 'w', encoding='utf8') as f:
json.dump(pricePack, f, indent=1, ensure_ascii=False)


if __name__ == '__main__':
main()
Forwarded from Unexpected Value
простите v2 final FIN