Избранное трейдера sergik99
Кривая опускается вниз
Кривая доходности продолжает опускаться вниз, отыгрывая благоприятную статистику инфляции в РФ. Длинные бонды остаются не очень интересными для спекулянтов, так как подвержены риску введения новых санкций, однако сегмент среднесрочных ОФЗ ощущает повышенный спрос. Определённую поддержку котировкам госбумаг в ближайшее время должно оказать сегодняшнее решение ЕЦБ сохранить ставку на прежнем уровне.
Большой спрос на аукционах в среду
Один из показателей успеха ОФЗ в последнее время – повышенный спрос на ОФЗ на аукционах Минфина. 5-летняя 26220 (20 млрд руб.) и 15,5-летняя 26221 (тоже 20 млрд руб.) разместились не то чтобы без премии, а даже с дисконтом по доходности: 4 бп для ОФЗ 26221 и 10 бп для ОФЗ 26220.
Риторика Набиуллиной в пятницу
Завтра внимательно следим за заявлениями Набиуллиной по поводу монетарной политики. Почва для снижения ставки на 50 бп подготовлена: инфляция находится в районе 3,2% г/г, инфляционные ожидания стремительно снижаются. Одна из целей ЦБ — проводить последовательную и предсказуемую для рынка монетарную политику, поэтому в случае снижения ставки до 8,5% регулятор должен подать сигналы о будущем ультрасмягчении. Если их не поступит, значит, Банк России оценивает дальнейшие риски как достаточно высокие и снизит ставку через неделю лишь на 25 бп.
Традиционная табличка промежуточных дивидендов
А теперь о том, что мне было интересно в последнее время.
29 августа ЦБ объявил о санации банковской группы «Открытие». Финансовое оздоровление группы планируется проводить по новой схеме — через Фонд консолидации банковского сектора. Предполагается, что после завершения процедуры санации основным владельцем «Открытия» станет ЦБ, а акционеры сохранят не более 25 процентов банка и то только в том случае, если в банке не будет выявлена «дыра».
ЦБ видел проблемы банка «Открытие» с осени 2016 г., заявил 29.08.2017г первый зампред ЦБ Дмитрий Тулин. По его словам, капитал банка был недостаточным для его масштабов операций и рисков, а в официальной отчетности — существенно завышен.
«Группа «Открытие» в последние годы очень бурно росла по всем показателям, в том числе путем слияний и поглощений, причем этот процесс финансировался за счет заемных средств и основные риски принимал на себя банк как флагман группы», — сказал Тулин.
Давайте посмотрим крупные финансовые операции, которые проводил банк Открытие в последние годы.
ЦБ решил санировать банк «Траст» в декабре 2014 года. Затраты на финансовое оздоровление этого банка тогда оценивались в 127 миллиардов рублей. Санатором «Траста» было выбрано «Открытие». В конце 2015 года «Открытие» обратилось в Агентство по страхованию вкладов с просьбой выделить еще 50 миллиардов рублей на санацию «Траста», так как «дыра» в балансе банка оказалась больше, чем предполагалось ранее. Санацию «Траста» в «Открытии» называли «тяжелейшим испытанием».
В 2016 году «Открытие» купило компанию «Росгосстрах» и одноименный банк. Убытки «Росгосстрах» по итогам 2016 года составляли более 33 миллиардов рублей. В 2017 году «Открытие» вложило в «Росгосстрах» не менее 40 миллиардов рублей.
Из «Открытия» с мая 2017 года происходил массовый отток средств вкладчиков. В июне, по данным «Ведомостей», госструктуры вывели из банка более 100 миллиардов рублей. С 3 июля по 24 августа, сообщал, директор департамента системно-значимых кредитных организаций Банка России Михаил Ковригин, со счетов в банке физические и юридические лица забрали более 500 миллиардов рублей.
Подробнее о расчёте финансового результата в предыдущих статьях
Вчера Минфин разместил весь объём предложенных ОФЗ 26221 (15,5 лет) и ОФЗ 26222 (7 лет) в 15 и 25 млрд руб. соответственно. Наиболее высокий спрос был на 7-летнюю бумагу, что ещё раз подтверждает текущий тренд вкладываться в среднесрочные ОФЗ. В течение всей недели доходности гособлигаций почти не менялись на фоне отсутствия важных новостей и низкой активности торгов. Заявления глав западных ЦБ сегодня-завтра могут расшевелить рынок ОФЗ.
Если же говорить про весть август, который традиционно считается неудачным месяцем для российского рынка, за него практически вся кривая доходности ушла вниз. Наибольшее падение наблюдалось у коротких и средних ОФЗ, которое вызвано отыгрыванием снижения ключевой ставки ЦБ. Весь август нерезиденты в основном просто сохраняли свои позиции в российских госбондах, поэтому длинный конец кривой доходности не претерпел таких значительных изменений.
Просадка доходности коротких ОФЗ была спровоцирована благоприятными условиями для снижения ключевой ставки на сентябрьском заседании, на которые среагировал рынок. В первую очередь, радуют данные по инфляции: в течение первой половины августа наблюдалась дезинфляция, а на прошлой неделе Росстат не зафиксировал изменения цен. Годовая оценка роста уровня цен теперь составляет 3,76% г/г, накопленная с начала года инфляция — 2,2%. Также благоприятно сказываются стабильно крепкий рубль, достаточно высокая цена нефти и снижение напряжённости между Россией и США. В дальнейшем, если ЦБ смягчит свою политику ещё сильнее, чем сейчас ждёт рынок, доходности коротких ОФЗ снизятся ещё больше. Расширение санкций может опять отпугнуть на время или навсегда нерезидентов, что вызовет рост доходностей длинных гособлигаций. Так что формируйте свой view и играйте на изменении доходностей.IsRun = true class_code="TQBR" function main() -- Получает доступный id для создания t_id = AllocTable() -- добавить столбцы AddColumn(t_id, 1, "Бумага", true, QTABLE_STRING_TYPE, 20) AddColumn(t_id, 2, "Кол-во", true, QTABLE_INT_TYPE, 7) AddColumn(t_id, 3, "Цена покупки", true, QTABLE_DOUBLE_TYPE, 14) AddColumn(t_id, 4, "Цена текущая", true, QTABLE_DOUBLE_TYPE, 14) AddColumn(t_id, 5, "Прибыль, р", true, QTABLE_DOUBLE_TYPE, 14) AddColumn(t_id, 6, "Прибыль, %", true, QTABLE_DOUBLE_TYPE, 14) t = CreateWindow(t_id) for iRow=1, getNumberOf("depo_limits")-1, 1 do rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам" qtyBoughtLots = tonumber(rowInPortfolioTable.currentbal) limitKind = rowInPortfolioTable.limit_kind if qtyBoughtLots>0 and limitKind<1 then InsertRow(t_id, iRow)-- добавить новую строку вниз таблицы end end local rows, columns = GetTableSize (t_id) InsertRow(t_id, rows+1) -- добавить новую строку вниз таблицы для "Итого" SetWindowCaption(t_id, "Портфель: прибыли и убытки © ramirzaev@mail.ru") -- исполнять цикл, пока пользователь не остановит скрипт или не закроет окно таблицы while IsRun do if IsWindowClosed(t_id)==true then IsRun=false end local currentPrice=0 local qtyBoughtLots=0 local profitAbs = 0 local profitPerc = 0 local currentSecCode= "" local fullNameOfInstrument = "" local limitKind = 0 local rowInPortfolioTable = {} -- строка из таблицы "Лимиты по бумагам" local tableInstrument = {} -- данные "Таблицы текущих торгов" local iRowInOutTable = 1 local totalInvest = 0 local totalPortfolio = 0 local totalProfit = 0 local totalPercent = 0 for iRow=0, getNumberOf("depo_limits")-1, 1 do rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам" qtyBoughtLots = tonumber(rowInPortfolioTable.currentbal) limitKind = rowInPortfolioTable.limit_kind if qtyBoughtLots>0 and limitKind<1 then -- если кол-во лотов >0 и тип лимита T0 currentSecCode = rowInPortfolioTable.sec_code fullNameOfInstrument = tostring(getParamEx(class_code, currentSecCode, "SHORTNAME").param_image or "0") --"LONGNAME" avgPrice = tonumber(rowInPortfolioTable.awg_position_price) currentPrice = GetAskPrice(currentSecCode) profitAbs = (currentPrice-avgPrice)*qtyBoughtLots profitPerc = 100*currentPrice/avgPrice - 100 totalInvest = totalInvest + avgPrice*qtyBoughtLots totalPortfolio = totalPortfolio + currentPrice*qtyBoughtLots SetCell(t_id, iRowInOutTable, 1, fullNameOfInstrument) -- "Бумага" SetCell(t_id, iRowInOutTable, 2, tostring(qtyBoughtLots)) -- "Кол-во"RemoveZero(tostring(qtyBoughtLots))) SetCell(t_id, iRowInOutTable, 3, tostring( math_round(avgPrice, 3) )) -- tostring(avgPrice)) -- "Цена покупки" SetCell(t_id, iRowInOutTable, 4, RemoveZero(tostring(currentPrice))) -- "Цена текущая" SetCell(t_id, iRowInOutTable, 5, tostring( math_round( profitAbs, 0)) ) -- "Прибыль, р" SetCell(t_id, iRowInOutTable, 6, tostring(math_round(profitPerc, 1)) .."%") -- "Прибыль, %" if profitPerc >5 then -- окрашиваем ColourRowInGreen(iRowInOutTable) elseif profitPerc<-5 then ColourRowInRed(iRowInOutTable) else ColourRowInYellow(iRowInOutTable) end iRowInOutTable = iRowInOutTable+1 end end totalProfit = totalPortfolio - totalInvest totalPercent = 100*totalProfit/totalInvest SetCell(t_id, iRowInOutTable, 1, "Итого") SetCell(t_id, iRowInOutTable, 3, tostring( math_round(totalInvest, 0) )) SetCell(t_id, iRowInOutTable, 4, tostring( math_round(totalPortfolio, 0))) SetCell(t_id, iRowInOutTable, 5, tostring( math_round( totalProfit, 0)) ) SetCell(t_id, iRowInOutTable, 6, tostring(math_round(totalPercent, 1)) .."%") if profitPerc >5 then -- окрашиваем ColourRowInGreen(iRowInOutTable) elseif profitPerc<-5 then ColourRowInRed(iRowInOutTable) else ColourRowInYellow(iRowInOutTable) end iRowInOutTable = iRowInOutTable+1 sleep(5000) -- пауза 5 сек. end --message("script table portfolio finished") end function ColourRowInRed(num_row) SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,150,150), RGB(0,0,0), RGB(255,150,150), RGB(0,0,0)) end function ColourRowInYellow(num_row) SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,255,200), RGB(0,0,0), RGB(255,255,200), RGB(0,0,0)) end function ColourRowInGreen(num_row) SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(150,255,150), RGB(0,0,0), RGB(150,255,150), RGB(0,0,0)) end function GetAskPrice(inp_Sec_Code ) local ask = tostring(getParamEx(class_code, inp_Sec_Code, "OFFER").param_value or 0) return ask end -- Округляет число до указанной точности function math_round (num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end -- удаление точки и нулей после нее function RemoveZero(str) while (string.sub(str,-1) == "0" and str ~= "0") do str = string.sub(str,1,-2) end if (string.sub(str,-1) == ".") then str = string.sub(str,1,-2) end return str end function OnStop() DestroyTable(t_id) IsRun = false end