Аллокация это что: поясняем простыми словами для чайников

Вместо заключения.

Как вы видите все эти распределения так или иначе работают. Даже 60/40 с которым мы работаем, как с бенчмарком – показывает очень серьезную доходность

Но всегда важно обращать внимание не только на параметр доходности, но и на риски, которые вы берете на себя выбирая ту или иную аллокацию активов

Все тесты с представленными здесь портфелями я проводил используя инструмент (бесплатный) – www.portfoliovisualizer.com – в котором можно проверить различные варианты аллокации активов.

После прочтения статьи, глядя на варианты аллокации известных инвесторов, задавая себе вопросы, чем один вариант лучше чем другой – можно продолжить самостоятельно развивать их идеи. Например, если вы, как я, не любите золото, то почему не заменить золото в Перманентном портфолио на что-нибудь другое, например на недвижимость? Зная что делает каждый ингредиент, вы как повар – можете комбинировать их так, как вам нравится – для достижения своей инвестиционной цели. Соль и перец по вкусу!

Когда в блоге появляется что-то интересное или в моей жизни происходит очередной поворот — я держу вас в курсе через свою рассылку. Никакой рекламы и никаких предложений, только годный контент.

Аллокация в C1

С размерами TLAB’ов разобрались. Чтоб далеко не ходить, поковыряем исходники дальше и посмотрим, как именно выделяются TLAB’ы, когда это быстро, когда медленно, а когда очень медленно.

Тут уже одним классом не обойдешься и надо смотреть, во что оператор компилируется. Во избежание черепно-мозговых травм смотреть будем код клиентского компилятора (C1): он гораздо проще и понятнее, чем серверный компилятор, хорошо описывает общую картину мира, а так как штука в Java довольно популярная, то и интересных нам оптимизаций в нем хватает.

Нас интересует два метода: , в котором описано аллоцирование объекта в TLAB’е и инициализация и , который исполняется, когда быстро выделить память не удалось.

Интересно посмотреть, всегда ли объект может быть создан быстро, и цепочка «find usages» приводит нас к такому вот комментарию в :

Из него становится понятно, что очень большие объекты (больше 128 килобайт по умолчанию) и finalizeable-классы всегда идут через медленный вызов в JVM. (Загадка — причем тут абстрактные классы?)
Возьмем это на заметку и вернемся обратно к процессу аллокации:

  1. tlab_allocate — попытка быстро аллоцировать объект, ровно тот код, что мы уже видели, когда смотрели на PrintAssembly. Если получилось, то на этом заканчиваем аллокацию и переходим к инициализации объекта.

  2. tlab_refill — попытка выделить новый TLAB. С помощью интересной проверки метод решает, выделять ли новый TLAB (выкинув старый) или аллоцировать объект прямо в eden’е, оставив старый TLAB:

    как раз отвечает за размер TLAB’а, которым мы не готовы пожертвовать ради аллокации одного объекта. По умолчанию имеет значение в от текущего размера TLAB (для этого конечно же есть параметр — , который внезапно имеет значение 64, а само значение считается как текущий размер TLAB’а, деленный на значение этого параметр). Этот лимит поднимается при каждой медленной аллокации, чтобы избежать деградации в неудачных случаях, и сбрасывается в конце каждого цикла GC. Еще одним вопросом меньше.

  3. eden_allocate — попытка выделить память (объект или TLAB) в eden’е. Это место очень похоже на аллокацию в TLAB’е: проверяем, есть ли место, и если да, то атомарно, используя инструкцию , забираем себе память, а если нет, то уходим в slow path. Выделение в eden’е не является wait-free: если два потока попробуют аллоцировать что-то в eden’е одновременно, то с некоторой вероятностью у одного из них ничего не выйдет и придется повторять все заново.

JVM upcall

Если не получилось выделить память в eden’е, то происходит вызов в JVM, который приводит нас к методу . Перед самим вызовом проводится много вспомогательной работы — выставляются специальные структуры для GC и создаются нужные фреймы, чтобы соответствовать calling conventions, так что операция это небыстрая.
Кода там много и одним поверхностным описанием не обойдешься, поэтому чтобы никого не утомлять, приведу лишь примерную схему работы:

  1. Сначала JVM пытается выделить память через специфичный для текущего сборщика мусора интерфейс. Там происходит та же цепочка вызовов, что и была выше: сначала попытка аллоцировать из TLAB’а, потом попытка аллоцировать TLAB из кучи и создание объекта.
  2. В случае неудачи вызывается сборка мусора. Там же где-то замешана ошибка GC overhead limit exceeded, всевозможные нотификации о GC, логи и другие проверки, не имеющие отношения к аллокации.
  3. Если не помогла сборка мусора, то происходит попытка аллокации прямо в Old Generation (здесь поведение зависит от выбранного алгоритма GC), а в случае неудачи происходит еще одна сборка и попытка создания объекта, и, если не получилось и тут, то в конце концов кидается .
  4. Когда объект успешно создался, проверяется, не является ли он, часом, finalizable и если да, то происходит его регистрация, которая заключается в вызове метода (вас ведь тоже всегда интересовало, почему этот класс есть в стандартной библиотеке, но никогда никем не используется явно?). Сам метод явно написан очень давно: создается объект Finalizer и под глобальным (sic!) локом добавляется в связный список (с помощью которого объекты потом будут финализироваться и собираться). Это вполне себе оправдывает безусловный вызов в JVM и (частично) совет «не пользуйтесь методом finalize, даже если очень хочется».

В итоге мы теперь знаем про аллокации почти всё: объекты аллоцируются быстро, TLAB’ы заполняются быстро, объекты в некоторых случаях выделяются сразу в eden’е, а в некоторых идут через неспешные вызовы в JVM.

Что значит аллокация при IPO

Возникновение аллокации в IPO обусловлено тем, что число участников процедуры превышает количество выпущенных компанией акций.

Из-за этого брокер уменьшает сумму заявок для частичного удовлетворения запросов всех инвесторов.

Скажем, компанией выпущено ценных бумаг на 25 млн долларов. А сумма, которую инвесторы готовы вложить в акции организации, составляет 100 млн долларов.

Понятно, что спрос будет удовлетворен только на 25%. Неиспользованные средства будут возращены брокером на счета инвестора.

К примеру, инвестор принял решение участвовать в IPO и вложить 100 тыс. долларов.

Однако ценные бумаги организации хочет купить большое количество инвесторов.

В итоге брокерская компания не может купить акций на всю сумму инвестора, а только на 10 % этой суммы, то есть на 10 тыс. долларов. В результате 10% и составляют аллокацию.

Рассмотрим второй пример. Ту же сумму (100 тыс. долларов) инвестор решил вложить в покупку акций менее известной и популярной компании.

Брокерская компания удовлетворяет аллокацию инвестора, скажем, на 85%. Сумма акций в этом случае составить 85 тыс. долларов.

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

Выбор компании для участия в IPO должен быть тщательным. По мнению экспертов, начинающим инвесторам не стоит в этом участвовать.

Если участие в IPO интересно, следует инвестировать в него не более 10% капитала.

У разных брокеров – различная аллокация. Она зависит от активности инвестора, средств и инвестиционных инструментов в портфеле.

Крупнейшим брокером, предоставляющим доступ к IPO, является Freedom Finance. Его аллокация делится на две части:

  • базовую, определяемую отдельно для каждого IPO;
  • бонусной, зависящей от активности клиента, структуры его портфеля, объема маржинального обеспечения и т.п.

У брокера разработана схема повышения размера аллокации:

  1. Наличие максимально диверсифицированного портфеля – акций российских и американских компаний, облигаций, биржевых фондов и других инвестиционных инструментов.
  2. Участие во всех IPO, рекомендуемых Freedom Finance.
  3. Постоянная активность на бирже – проведение регулярных операций, использование маржинальной торговли, приобретение производных финансовых инструментов.
  4. Использование услуг Freedom Finance – наличие счета в банке Freedom Finance, страхование, владение акциями Freedom Holding Corp не менее 90 дней.

На примере показаны счета двух инвесторов – активного и пассивного. У первого – высокая аллокация, у второго – низкая:

Все об аллокации расходов компании. Выпуск №6 ‘Способы аллокации расходов Центров затрат’

Работа одного из моих коллег в последнее время была тесно связана с темой аллокации расходов обеспечивающих подразделений (Центров затрат). По результатам он предложил осветить эту тему в очередном выпуске рассылки. Поэтому данный выпуск – плод наших совместных усилий. К слову, я был бы очень рад получить какие-то идеи, темы, предложения и пр. также и от вас, уважаемые
подписчики.

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

Модель прямых аллокаций

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

Применение данной модели имеет два основных преимущества. Во-первых, это простота реализации и поддержки. Создать такую модель достаточно легко с использованием Excel. Во-вторых, это высокая прозрачность логики расчета, позволяющая практически сразу ответить на следующие вопросы:

1. Каков вклад каждого из Центров затрат в формирование итоговых косвенных расходов того или иного Центра прибыли?

2. Какой объем затрат распределяется по каждому из используемых в модели драйверов?

Каскадное распределение затрат

Основным недостатком вышеописанной модели, позволяющим зачастую использовать ее лишь в качестве наиболее грубого приближения,
является то, что такая модель описывает исключительно распределение расходов Центров затрат на Центры прибыли, не подразумевая при этом возможности перераспределения расходов c одних Центров затрат на другие для отражения направления оказания услуг. Например, HR-специалисты осуществляют подбор и сопровождение персонала не только для Центров прибыли, но и для других Центров затрат (например, ИТ-отдела). Учет подобного рода
взаимосвязей между Центрами затрат может внести весьма существенные корректировки в общую картину распределения. Для учета таких взаимосвязей модель аллокаций может быть построена в виде каскадной последовательности шагов распределения, которая имеет следующие особенности:

1. На разных шагах распределения один и тот же ЦФО выступает либо в роли «приемника», либо в роли «источника» затрат.

2. Каждый шаг модели,
организованной в виде каскада, полностью «снимает» затраты с части ЦФО, исключая их тем самым из дальнейшего расчета.

Повышая степень приближенности модели аллокаций к реально существующим внутри компании бизнес-процессам (за счет учета потребления одними ЦЗ услуг других), применение каскадной архитектуры одновременно усложняет расчет и его анализ.

Однако,
в подавляющем большинстве ситуаций реальная картина взаимосвязей между ЦФО сложнее и каскадной модели. Дело в том, что, как правило, обеспечивающие подразделения оказывают взаимные услуги друг другу, что не может быть смоделировано в виде однонаправленного «каскада» распределения. Например, HR-отдел осуществляет подбор ИТ-специалистов, а ИТ-специалисты, в свою очередь, могут участвовать в проекте по внедрению системы автоматизации расчета заработной платы
сотрудников.

Для учета подобных «встречных» взаимосвязей между ЦФО используется еще одна разновидность архитектуры модели аллокаций – Модель циклического распределения затрат. Однако вопрос о том, как правильно построить такую модель, избежав «зацикливаний» при распределении, а главное как правильно проинтерпретировать и проанализировать полученные результаты заслуживает отдельного обсуждения.

Краткий экскурс в историю аллокаторов

Аллокатор на основе блоков переменного размера использовался Керниганом и Ричи в их варианте стандартной библиотеки для нового языка программирования С. Код аллокатора умещался в 200 строк и оперировал над односвязным замкнутым списком свободных блоков памяти, но при необходимости обращался к операционной системе для расширения диапазона доступных адресов. Код этого аллокатора приведен в их книге «The C Programming Language» и настоятельно рекомендован для ознакомления всем начинающим программистам.

Аллокатор Кернигана и Ричи был написан в те незапамятные времена, когда память делилась на сегменты, и механизм своппинга сбрасывал на диск весь сегмент данных, в случае, если приложение находилось в неактивном состоянии. Но время шло, на смену сегментам пришла страничная организация памяти, а с ней и возможность использовать механизм своппинга для отдельных страниц памяти, а не для целых сегментов. В те времена все активно использовавшиеся аллокаторы строились на основе одно- или двусвязного списка свободных блоков памяти перемнного размера. Проблема заключалась в том, что обращение к заголовку свободного блока зачастую инициировало подгрузку страниц памяти с диска, даже если этот блок потом не использовался. Это пагубно сказывалось на производительности программ. Один из методов оптимизации предложил Пол Хеннинг Камп . Его вариант аллокатора, более известный как pkmalloc опирался на идею хранения данных о страницах памяти аналогично тому как аллокатор хранит данные о блоках памяти. Для этого он предложил ввести своеобразный каталог страниц, и использовать его для учета свободных страниц памяти (таких страниц, внутри которых нет аллоцированных блоков памяти). Идея себя оправдала и аллокатор появился в составе стандартной библиотеки языка С в новой версии ОС FreeBSD 2.2.

Параллельно с Полом, свою версию аллокатора предложил Даг Ли. В его версии аллокатора (dlmalloc) вводились классы блоков, с фиксированными размерами от 16 до 4096 байт. Каждый класс был представлен двусвязным списком блоков соответствующего размера. Для аллоцирования участков размером более 4096 байт использовался подход на основе блоков переменного размера, как у Кернигана и Ричи. При поиске блока необходимого размера алгоритм не просматривал все блоки в списке, вынуждая операционную систему подгружать соответствующие страницы памяти с диска, а выбирал блок из соответствующего класса. Обращение к списку свободных блоков происходило только в случае, если объем запрошенной памяти превышал размер страницы.

Время шло, на смену однозадачным вычислительным машинам пришли быстрые многопроцессорные системы с большими объемами доступной оперативной памяти

Джейсон Эванс предложил версию аллокатора , известную как jemalloc, в котором особое внимание уделялось сокращению временных затрат на взаимную блокировку и учету NUMA в алгоритме (аллоцирование тех адресов памяти, время доступа к которым для данного процессора минимально). Сам Джейсон утверждает, что ему удалось добиться значительного сокращения времени работы алгоритма на многопроцессорных системах, не увеличив притом время работы функций malloc/free на системах с одним процессором.

В то же время в Google предложили свою версию аллокатора, оптимизированного для работы в многопоточном окружении: tcmalloc. В аллокаторе от Google вспомогательные структуры данных аллокатора хранятся в Thread Cache — локальном хранилище потока. Благодаря такому подходу им удалось реализовать lockless алгоритмы для аллоцирования и освобождения памяти. Исходный код tcmalloc доступен в .

Зачем инвестору участвовать в IPO

Для инвестора участие в первичном размещении ценных бумаг – это возможность получить прибыль в несколько десятков и сотен процентов. Такие IPO называют успешными. Примеры прибыльных размещений: Facebook, Tesla, Uber или Alibaba.

В 2019 году инвесторы получили доходность:

  • 596 % от IPO Beyond Meat Inc (крупнейшего производителя заменителей мяса на растительной основе);
  • 282 % – Shockwave Medical Inc (разработка и производство медицинских препаратов для лечения сердечно-сосудистых заболеваний);
  • 262 % – RAPT Therapeutics Inc (биофармацевтическая компания);
  • 221 % – InMode Ltd (разработчик устройств для эстетического и медицинского лечения);
  • 188 % – IGM Biosciences Inc (исследования и разработки для лечения рака).

Но не все так радужно, как кажется на первый взгляд. Есть и убыточные размещения акций. Например, в 2019 году биржа NASDAQ провела 151 IPO и только 57 было прибыльных. Это значит, что инвесторы в остальных случаях либо ничего не зарабатывали, либо теряли деньги.

Несмотря на высокий риск участия в IPO, соблазн заработать огромные прибыли слишком велик, поэтому число желающих поучаствовать в первичном размещении только растет.

Подводный камень для инвестора

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

Рассмотрим его на конкретном примере:

  1. Инвестор участвует в двух IPO на 5 000 $. На компанию А отправляет заявку на 2 500 $ и на компанию Б также 2 500 $.
  2. Первый эмитент оказался популярным среди инвесторов, и брокер удовлетворяет только 15 % заявки, т. е. на 375 $. Второй эмитент не пользуется спросом, брокер дарит целых 70 % одобрения, т. е. на 1 750 $.
  3. Через 3 месяца после выхода на фондовый рынок акции первой компании выстреливают и дают 110 % доходности. Вложения нашего инвестора увеличиваются до 787,5 $ (+ 412,5 $).
  4. Второе IPO оказалось убыточным. Акции просели на 30 %. Инвестор на свои вложенные 1 750 $ получил убыток – минус 525 $.
  5. Итог двух сделок для инвестора – минус 112,5 $ на счете. Участие в IPO оказалось в целом убыточным, потому что вторая заявка получила больший процент одобрения. И даже такая успешная сделка, которая принесла инвестору 110 % доходности, не помогла увеличить деньги на счете.

Во многом такая ситуация складывается потому, что инвестор не знает заранее, какой процент ему одобрит брокер. Помимо того, что есть базовый процент, который не зависит от конкретного брокера, есть еще и бонусная часть, находящаяся полностью на совести посредника. Одним он дает больше, другим – меньше. Контроль этого процесса со стороны инвестора полностью отсутствует, потому что система распределения абсолютно непрозрачная.

Иницализация

С выделением памяти все прояснилось, осталось только узнать, из чего состоит инициализация объекта до вызова конструктора. Смотреть будем все в тот же C1-компилятор, но в этот раз на ARM — там более простой код, и есть интересные моменты.

  1. Сначала объекту устанавливается заголовок. Заголовок состоит из двух частей — ,
    который содержит в себе информацию о блокировках, identity hashcode (или biased locking) и сборке мусора, и klass pointer, который указывает на класс объекта — на то самое нативное представление класса, которое находится в metaspace, и из которого можно получить .

    Указатель на класс обычно сжат и занимает 32 бита вместо 64. Получается, что минимально возможный размер объекта это 12 байт (плюс существует обязательное выравнивание, которое увеличивает это число до 16).

  2. Обнуляется вся память, если не включен флаг . По умолчанию он всегда выключен:
    зануление большого региона памяти приводит к вымыванию кэшей, более эффективно занулять память маленькими частями, которые вскоре будут перезаписаны. К тому же хитрый C2-компилятор может не делать ненужную работу и не занулять память, в которую тут же запишутся аругменты конструктора. Вот и еще один ответ.

  3. В конце ставится StoreStore барьер (подробнее про барьеры можно прочитать в статье gvsmirnov), запрещающий (ну, почти) процессору дальнейшие записи, пока не закончатся текущие.

    Это необходимо для небезопасной публикации объекта: если в коде есть ошибка, и где-то объекты публикуются через гонку, то вы все еще ожидаете увидеть (и спецификация языка вам это гарантирует) в его полях либо значения по умолчанию, либо то, что проставил конструктор, но никак не случайные (out of thin air) значения, а виртуальная машина ожидает увидеть корректный заголовок. На x86 более сильная модель памяти, и эта инструкция там не нужна, поэтому мы и смотрели на ARM.

Проверяем на практике

на самом деле

Проверим это вернувшись к и полностью посмотрев на сгенерированный код для вызова :

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

  1. Происходит попытка аллокации объекта в TLAB’е.
  2. Если места в TLAB’е нет, то либо из eden’а выделяется новый TLAB, либо объект создается прямо в eden’е, в этот раз используя атомарные инструкции.
  3. Если и в eden’е нету места, то происходит сборка мусора.
  4. Если и после этого недостаточно места, то происходит попытка аллокации в старом поколении.
  5. Если не получилось, то кидается OOM.
  6. Объекту устанавливается заголовок и вызывается конструктор.

На этом теоретическую часть можно закончить и перейти к практике: сильно ли становится быстрее, нужен ли prefetch и влияет ли размер TLAB’а на что-нибудь.

Характеристики аллокации

Для удобства расчета определим что системы суммарно имеют 1 объема, и удельный вес каждой системы имеет 0,6 Si и 0,4 Ri. Потому что Si более устойчив. Затем расчет числа контрактов в отношении заданной суммы и максимальной просадки системы. От объединения двух систем на 1к имеем просадку 12500р за весь период, берем коэффициент запаса 3 по просадке (так как в будущем она вероятно обновится и составит 12500*3=37500). Это учитывая 0,4 и 0,6 коэффициенты. Допустим возьмем сумму 1000000р с допустимым максимальным риском 10% (100000р). 100000/37500=3к. 3*0,4=1к Ri и 3*0,6=2к Si. Таким образом получается для максимальной просадки в 100000р объем 1к Ri и 2*6=12к Si.

Характеристики от объединения низкокоррелированных систем намного больше.

За 3 года доходность составила 800000р, 80%, при максимальной заданной просадке 100000р. Фактическая была намного меньше. За 12 лет (период рыночной торговли, без изменения параметров) была 200000р. Это весьма не плохой результат, главное стабильный. Для более эффективного применения капитала будем применять гарантийное обеспечение плюс тройной запас по просадке.

То есть ГО=3*10000=30000р, Запас по просадке 3*12500=37500, для торговли достаточно 30000+37500=67500р.

Получается, что за 12 лет доходность была 296%. Другие средства возможно разместить в облигации или на банковский депозит. Эта статья указывает как с помощью качественных алгоритмов, имеющих низкую корреляцию возможно добиваться стабильных результатов. Главная сложность — создание качественных алгоритмов, которые в фазы рынка, которые не благоприятны для нее не будут больше критичных уровней просадки.

Мы постарались дать наиболее полное определение и понятие термина аллокация, раскрыть его алгоритмы. Оставляйте свои комментарии или дополнения к материалу.

Почему важен размер и на что влияет аллокация IPO

От количества приобретенных акций или облигаций в ходе сделки IPO напрямую зависит конечная прибыль и суммарная доходность, именно поэтому это значение является важным для каждого инвестора активно участвующего в IPO. В случае когда IPO проходит удачно, каждый инвестор желает иметь наиболее высокую аллокацию IPO.
Практически никогда этот процент не достигает 100% из-за высокого спроса. Исторически среднее значение аллокация на наиболее востребованные бумаги находится в пределах от 5% до 15%. Однако, иногда процент удовлетворения заявки при IPO может достигать 50% и выше.
Как я уже говорил, аллокация напрямую влияет на доходность. То есть если доходность по бумагам в ходе IPO составит 200%, а аллокация будет всего 5%, то конечная доходность инвестора от участия составит всего 10%. Однако, в случае неудачного IPO низкая аллокация может спасти инвестора от существенных потерь. Для наглядности можете ознакомится с соотношением процента аллокации и доходности в таблице ниже:

Prefetch

Пока мы ходили по коду, там периодически всплывали какие-то выравнивания и дополнительные проверки для prefetch’а, которые я коварно игнорировал.

У prefetch’а есть несколько режимов, которые контролируются флагом : можно делать prefetch после каждой аллокации, можно иногда, можно после каждой аллокации, да еще и несколько раз. Вдобавок флагом можно менять инструкцию, которой этот prefetch осуществляется: можно загружать данные только в L1-кэш (например, когда вы что-то аллоцируете и сразу выбрасываете), только в L3 или во все сразу: список вариантов зависит от архитектуры процессора, а соответствие значений флага и инструкций можно посмотреть в для нужной архитектуры.

Почти всегда эти флаги в вашем продакшне трогать не рекомендуется, разве что вы вдруг JVM-инженер, который пытается обогнать конкурентов на SPECjbb-бенчмарке пишете на Java что-то крайне высокопроизводительное, и все ваши изменения подтверждены воспроизводимыми замерами (тогда вы, наверное, не дочитали до этого места, потому что и так всё знаете).

Влияние размера TLAB на происходящее

Каким должен быть размер TLAB’а? В первом приближении разумно предположить, что чем меньше размер буфера, тем чаще выделение памяти будет проходить через медленную ветку, а, значит, и TLAB нужно делать побольше: реже ходим в относительно медленную общую кучу за памятью и быстрее создаем новые объекты.

Но существует и другая проблема: внутренняя фрагментация.
Рассмотрим ситуацию, когда TLAB имеет размер 2 мегабайта, eden регион (из которого и выделяются TLAB’ы) занимает 500 мегабайт, а у приложения 50 потоков. Как только место под новые TLAB’ы в куче закончится, первый же поток, у которого кончится свой TLAB, спровоцирует сборку мусора. Если предположить, что TLAB’ы заполняются ± равномерно (в реальных приложениях это может быть не так), то в среднем оставшиеся TLAB’ы будут заполнены примерно наполовину. То есть, при наличии еще мегабайт незанятой памяти (аж 10%), начинается сборка мусора. Получается не очень хорошо: существенная часть памяти еще свободна, а GC все равно вызывается.

Если продолжить увеличивать размер TLAB’а или количество потоков, то потери памяти будут расти линейно, и получится, что TLAB ускоряет аллокации, но замедляет приложение в целом, лишний раз напрягая сборщик мусора.

А если место в TLAB’е еще есть, но новый объект слишком большой? Если выбрасывать старый буфер и выделять новый, то фрагментация лишь увеличится, а если в таких ситуациях всегда создавать объект прямо в eden, то приложение начнет работать медленнее, чем могло бы?

В общем, что делать — не очень понятно. Можно захардкодить мистическую константу (как это сделано для эвристик инлайнинга), можно отдать размер на откуп разработчика и тюнить его для каждого приложения индивидуально (невероятно удобно), можно научить JVM как-то отгадывать правильный ответ.

Что такое аллокация при IPO

Среди частных инвесторов все более популярной становится тема инвестирования в IPO. Если с самим термином уже все более или менее понятно, то что такое аллокация при IPO еще предстоит разобраться. Хотя бы потому, что значение аббревиатуры IPO только предстоит выяснить. Она образовалась при сокращении трех английских слов Initial Public Offering и означает первоначальное публичное размещение акций. 

Данная процедура используется различными компаниями для привлечения средств в целях дальнейшего развития или иных корпоративных целях (например, сокращения долга).

Таким способом компании продают потенциальным инвесторам и вновь выпускаемые акции, и принадлежащие акционерам, желающим вывести средства из бизнеса. В данном случае аллокация — это процент удовлетворения заявки на покупку акции при ее первичном размещении. Обычноспрос превышает предложение, и процент достаточно не велик.

Аллокация при IPO

Аллокация в IPO возникает из-за того, что желающих поучаствовать в аттракционе невиданной щедрости больше, чем выпускаемых эмитентом акций. Поэтому брокеру приходится уменьшать сумму заявок, чтобы удовлетворить всех инвесторов, пусть и частично.

Допустим, компания решила выпустить акции на 20 млн $. Желающих их купить собралось на 100 млн $. Получается, что только 20 % заявок может быть удовлетворено. Неиспользованные деньги брокер вернет на счет своего клиента.

Например, вы решили поучаствовать в IPO на 50 000 $. Акции выбранной компании оказались интересны еще сотням и десяткам тысяч инвесторов. В результате брокер не сможет купить для вас ценные бумаги на всю сумму, а только на 5 % от нее, т. е. на 2 500 $. Аллокация – это и есть эти самые 5 %.

Другой пример. Те же 50 000 $ вы решаете вложить в компанию, которая не пользуется популярностью у других инвесторов. Желающих купить акции оказалось мало, брокер удовлетворит вам аллокацию на 80 % и купит ценных бумаг на 40 000 $.

И в том и в другом случае вы можете хорошо заработать или получить убыток. Но риск все потерять во втором случае значительно выше. Необходимо очень тщательно подходить к выбору компании для участия в IPO. Новичку в инвестициях там точно делать нечего. Эксперты советуют всего 5–10 % капитала отводить на участие в IPO, если оно вам интересно.

Брокеры дают инвесторам разные проценты распределения. Размер зависит от активности клиента, суммы участия и инструментов в портфеле клиента. Один из крупнейших брокеров, который предоставляет доступ к IPO, – это “Фридом Финанс”.

Его процент удовлетворения заявки состоит из двух частей:

  1. Базовая – определяется отдельно для каждого IPO.
  2. Бонусная – зависит от активности клиента, структуры его портфеля, объема маржинального обеспечения и пр.

Брокер разработал алгоритм повышения объема аллокации:

  • должен быть максимально диверсифицированный портфель – акции российских и американских эмитентов, облигации, биржевые фонды и другие инструменты;
  • участие во всех IPO, которые рекомендует “Фридом Финанс”;
  • активная торговля на бирже – регулярные операции, использование маржинальной торговли, покупка производных финансовых инструментов;
  • пользование услугами “Фридом Финанс” – счета в банке “Фридом Финанс”, услуги страхования, владение акциями Freedom Holding Corp. не менее 3 месяцев.

Брокер дает примерный расчет аллокации для двух разных клиентов. Один из них активный, другой – нет. Первый получит 15 %, второй – только 4,5 %. Алгоритмы расчета у разных брокеров будут отличаться, но подходы примерно одинаковые.

Варианты распределения

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

Второй вариант и самый вероятный ход развития сценария – частичное удовлетворение заявки. Средней величиной уровня аллокации по рынку считается около 30%.

Третий — заявка получила полный отказ. В таком случае причиной отказа может быть наличие ограничений при распределении заявок либо некорректность каких-либо действий, осуществленных со стороны инвестора.

Что собой представляет аллокация в айпио?

Многие новички на фондовом рынке хотят знать, что такое аллокация в IPO простыми словами. Это показатель доли заявок на приобретение бумаг, которая будет удовлетворена во время начала торгов. Рассчитывается данный показатель в процентах. С помощью аллокации определяется заинтересованность инвесторов в покупке акций того или иного эмитента.

Рисунок 2. Определить примерную аллокацию на IPO несложно – предоставляемые компанией-эмитентом данные позволяют рассчитать и посчитать ее с некоторой точностью.

Например, компания планирует выпустить бумаги на общую сумму в 30 миллионов долларов. Однако желающих приобрести ее бумаги набралось на 100 млн. Таким образом, показатель аллокации составляет 30 процентов. Посмотрим, как рассчитать аллокацию на IPO на примере условного инвертора.

· ETF на IPO – некоторые из котирующихся на ММВБ

· Стоит ли пользоваться рекомендациями на инвестиции в IPO с закрытого канала Кондрашова

· Когда будет АйПиО на Телеграм и целесообразно ли в него вкладываться

Предположим, что он желает вложить в акции эмитента 60 тысяч долларов. Однако кроме него купить бумаги хотят и тысячи других инвесторов. В результате брокер позволяет вам приобрести лишь на $3 000. Эта сумма составляет 5 процентов от предполагаемого вложения. Именно эта цифра в данном случае и является аллокацией (5%).

Arnott Portfolio.

Роб Арно (Rob Arnott) основатель и председатель Research Affiliates – исследовательская фирма, которая управляет 170 миллиардами долларов своих инвесторов, используя стратегии, которая сама разрабатывает. Сам господин Арно является автором более чем 100 статей для различных финансовых изданий, а так же работал редактором для Financial Analysts Journal. В своей книге The Fundamental Index: A Better Way to Invest он сосредотачивается на стратегии smart beta. Сама по себе стратегия подразумевает отступление от классического следования за индексом, потому что по мнению Роберта – индексы не являются хорошим инструментом для инвестирования, поскольку несут в своей структуре очень много недостатков, такие как включенные в стоимость пузыри, переоцененные компании с большой капитализацией и так далее. Вместо этого он предлагает использовать другие критерии для формирования индексов – такие факторы как value, momentum, размер дивидендов или равно-взвешенный подход.

Хоть у нас и нет задачи реплицировать подход господина Арно, но благо он высказывал свое мнение и по поводу аллокации активов для классического пассивного инвестирования. Выглядело его портфолио следующим образом:

  • 10% US Stocks
  • 10% Foreign Stocks
  • 10% Emerging Market Bonds
  • 10% TIPS
  • 10% High Yeild Bonds
  • 10% US Gov Long Bonds
  • 10% Unhedged Foreign Bonds
  • 10% US Corporate Bonds
  • 10% Commodities
  • 10% REITs

Посмотрим как портфолио Арно (красное) работало против 60/40 (синее).

Как мы видим, портфолио Арно гораздо сильнее диверсифицировано. Всего в портфолио 10 инструментов. В результате данное портфолио превосходит 60/40 по всем сравниваемым характеристикам. Мы получаем и более высокую доходность и более высокий коэффициент Шарпа и более низкую волатильность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector