Предметом доработки является реализация

advertisement
Доработка TRANSAQ по "новому маржинальному постановлению"
Предметом доработки является реализация следующих функциональных возможностей TRANSAQ,
соответствующих положениям "Единых требований к правилам осуществления брокерской деятельности
…", утверждённых Приказом 13-71 ФСФР России от 08.08.2013
1) Асимметричность ставок риска по направлению позиций.
Обеспечивается возможность одновременного применения различных по величине ставок риска для
длинных и коротких позиций:

ставки риска уменьшения стоимости бумаги (ставки риска для длинных позиций)

ставки риска увеличения стоимости бумаги (ставки риска для коротких позиций)
(До сих пор в системе могла использоваться только единая действующая для клиента ставка риска в
инструменте, - как для длинных позиций, так и для коротких.)
2) Расчёт и показ клиенту в режиме реального времени показателя текущей фактической обеспеченности
клиентского портфеля, рассчитанной по "минимальным ставкам риска".
(Предлагается ввести в практику использования понятие "критическая обеспеченность". Клиент будет
видеть этот показатель в заголовке портфеля и понимать: пока этот показатель выше ста процентов – всё
хорошо, как только он снизится ниже ста процентов – Брокер "пришлёт доктора".)
В целях обеспечения этой функции необходимыми для расчётов данными реализуется возможность
определять в системе "минимальные ставки риска" в дополнение к базовым, "начальным ставкам риска".
Минимальные ставки могут быть указаны Брокером в явном виде, в противном случае обеспечивается
автоматическое вычисление минимальных ставок из начальных с применением стандартного
квадратичного преобразования (см. п. 19 Приложения 1 к "Единым требованиям").
3) Система маржинальных категорий и шаблонов ставок риска, а также средств управления ими.
управления рисками клиентов различных категорий.
3.1. В основе системы управления рисками клиентов лежат шаблоны ставок риска, которые
заблаговременно разрабатываются Брокером. Общее количество шаблонов ограничено разрядностью 8битного целого (максимум 254 штуки). Каждый шаблон представляет собой совокупность следующих
данных:
 Идентификатор шаблона
 Наименование шаблона
 Список инструментов со спец. ставками, где для каждого инструмента указано:
 Спец. ставка риска для длинных позиций в инструменте
 Спец. ставка риска для коротких позиций в инструменте
 [Спец. минимальная ставка риска для длинных позиций в инструменте]
 [Спец. минимальная ставка риска для коротких позиций в инструменте]
 Стандартные ставки риска для прочих инструментов:
 Стандартная ставка риска для длинных позиций
 Стандартная ставка риска для коротких позиций
 [Стандартная минимальная ставка риска для длинных позиций]
 [Стандартная минимальная ставка риска для коротких позиций]
В [квадратных скобках] указаны параметры, которые могут быть не заданы, в этом случае они будут будут
автоматически вычисляться.
3.2. Вводится понятие маржинальной категории ("маркат"). В системе организуется справочник
маржинальных категорий. Каждому клиенту назначается маржинальная категория. Каждой маржинальной
категории ставится в соответствие шаблон ставок риска, действующий в отношении всех клиентов,
отнесённых к этой маржинальной категории.
Таким образом, Брокеру предоставляются следующие удобные возможности:

Любой клиент может быть перенесён из одной категории в другую, и в отношении него станут
действовать риск-параметры по шаблону этой другой категории.

Любой маржинальной категории может быть поставлен в соответствие другой шаблон, и в
отношении всех клиентов этой категории сразу станут действовать риск-параметры этого другого
шаблона.

Риск-параметры любого шаблона могут быть изменены, и изменения будут иметь эффект в
отношении всех клиентов, имеющих категории, предписывающие использование данного шаблона.
(Такие изменения будут иметь эффект после перезапуска Сервера)
Описание реализации с точки зрения интерфейсов пользователя системы
База данных TRANSAQ
1. Добавляется новая таблица marcat (Справочник маржинальных категорий)
tinyint
varchar[20]
varchar[80]
tinyint
id
name
description
rrt_id
Идентификатор категории
Наименование
Идентификатор шаблона ставок риска (RiskRateTemplate)
Таблица marcat обязательно должна содержать как минимум одну запись, где id=0.
2. В таблицу client добавляется поле:
tinyint
marcat_id
Маржинальная категория, default=0
Для таблицы client настраивается сonstraint на таблицу marcat.
3. Обеспечивается синхронизация этих новых сущностей между контурами.системы
Администратор
1. Реализуется интерфейс ведения справочника маржинальных категорий.
1.a) Контролируется уникальность id (допустимые значения от 0 до 254 включительно)
1.б) Пресекаются попытки пользователя удалить запись с id = 0
1.в) Добавление новой категории, а также изменение назначенного шаблона доводится до сведения
Сервера в режиме реального времени.
2. В "карточке клиента добавляется поле "Категория рисков", с возможностью выбрать категорию из
справочника.
MAccessor
1. В состав атрибутов элемента Client (xp_Transaq_RegisterUser) добавляется атрибут MarCat_ID. Атрибут
является необязательным, если при добавлении клиента этот атрибут не задан, Серверу передаётся
значение ноль.
2. В процедуру xp_Transaq_ExecXML добавляется новая команда назначения шаблона ставок риска для
маржинальной категории SetMarcatRRT (MarCat_ID, RRT_ID)
Оба параметра проверяются на допустимость (значение 0xFF не допустимо).
Сервер контролирует существование объектов с указанными идентификаторами, в случае их не
обнаружения выдаёт сообщения:
"Указанная категория рисков не существует"
"Указанный шаблон отсутствует в текущей конфигурации"
Исключением является допустимое специальное значение идентификатора шаблона нуль (см.ниже).
Сервер
Справочник шаблонов ставок риска Боркер разрабатывает самостоятельно и предоставляет системе в
виде файла RRT.xml, расположенном в рабочем каталоге Сервера TRANSAQ. Файл имеет следующий
формат:
<Risk_Rate_Template>
<RRT id=1 name="Public">
<common_rates
<ind_rates>
<sec_rates seccode="ENIKI"
<sec_rates seccode="BENIKI"
<sec_rates seccode="ELI"
<sec_rates seccode="VARENIKI"
…
</ind_rates>
</RRT>
<RRT id=2 name="Special">
<common_rates
<ind_rates>
<sec_rates seccode="ENIKI"
<sec_rates seccode="BENIKI"
<sec_rates seccode="VARENIKI"
…
</ind_rates>
</RRT>
…
</Risk_Rate_Template>
long="5.25" short="3.14" long_x="4.15" short_x="2.71" />
long="8.00" short="4.00" long_x="5.00" short_x="3.00" />
long="7.00" short="3.00" long_x="4.50" short_x="2.25" />
long="7.00" short="3.00" long_x="4.50" short_x="2.25" />
long="7.00" short="3.00" long_x="4.50" short_x="2.25" />
long="7.27" short="4.17" long_x="4.50" short_x="2.25" />
long="9.00" short="5.00" long_x="4.50" short_x="2.25" />
long="7.00" short="3.00" long_x="4.50" short_x="2.25" />
long="7.00" short="3.00" long_x="4.50" short_x="2.25" />
Таблица соответствий используемых обозначений:
Атрибут
Обозначение
Регулятора
Предметное содержание
Обозначение
TRANSAQ
long
D0+i
Ставка риска для лонгов
RRlong
short
D0‾i
Ставка риска для шортов
RRshort
long_x
DX+i
Ставка риска для лонгов критическая
RRlongX
short_x
DX‾i
Ставка риска для шортов критическая
RRshortX
Значения ставок риска long, short, long_x, short_x задаются в процентах и имеют формат decimal fixed-point.
Атрибуты long_x и/или short_x могут быть не указаны, в этих случаях соответствующие им ставки автоматически
рассчитываются из long и short, согласно стандартной квадратичной зависимости.
Корректные идентификаторы шаблонов имеют значения от 1 до 254 включительно.
Шаблоны, не удовлетворяющие этому правилу, игнорируются.
Однако ничто не мешает брокеру назначить той или иной маржинальной категории несуществующий
шаблон с помощью Администратора. Если категории назначен шаблон 0 или не существующий шаблон, то
это означает, что для клиентов этой категории ставки риска определяются традиционным способом –
перемножением ставки риска инструмента на коэффициент ставки риска клиента:
RRlong = RRshort = security.RiskRate * client.CoeffRisk
Такая реализация позволяет легко отменить все категории и шаблоны, и перевести систему на
традиционную работу по ставкам*коэффициентам, - для этого достаточно просто удалить файл RRT.xml из
рабочего каталога Сервера и перезапустить Сервер.
По мере необходимости использования ставок в расчётах применяются методы, позволяющие получить
для конкретного клиента нужную ставку риска по конкретному инструменту посредством интерпретации
шаблона ставок риска, соответствующего клиенту:
RiskRateLong(cln, sec)
RiskRateShort(cln, sec)
RiskRateLongX(cln, sec)
RiskRateShortX(cln, sec)
Укрупнённое описание методики портфельных расчётов
Модель данных, используемых в расчётах
Данные по бумаге (sec):
double
W
Коэффициент оценки (доля, от текущей стоимости актива)
double
F
Коэффициент учёта обязательств (доля, от текущей стоимости шорта)
long
InitRate
Входящая цена бумаги (PrevClose в ценообразующем борде)
long
Rate
Текущая цена бумаги (из ценообразующего борда)
double
bpCost
Стоимость базисного пункта ценообразующего борда
Для каждого борда: {
long
lotsize
Количество бумаг в лоте, штук
double
bp_сost
Cтоимость базисного пункта цены
}
Данные по клиенту (cln):
LARGE
Sum_tax
Суммарная комиссия
Для каждого регистра: {
LARGE
MnyOpenBal
Входящее сальдо в деньгах
LARGE
MnyBought
Затрачено на покупки
LARGE
MnySold
Выручено от продажи
LARGE
MnySettled
Исполнено (со знаком, сумма, только Y0)
LARGE
MnyBalance
Текущее сальдо (OpenBal + Settled + Bought – Sold)
}
Рабочие переменные CLW(cln, sec) - ячейка матрицы [клиенты х инструменты]
long
Sc_Intraday
Счётчик бумаг внутридневный
double
Sp_Initial
Стоимостной сумматор по входящим позициям
double
Sp_intraday
Стоимостной сумматор внутридневный
large
SumTax
Суммарная комиссия по инструменту
Для каждого регистра: {
long
OpenBal
Входящая позиция (со знаком, в штуках бумаг)
long
Bought
Куплено штук бумаг
long
Sold
Продано штук бумаг
long
Settled
Исполнено (со знаком, в штуках бумаг, только Y0)
long
Balance
Текущая позиция (OpenBal + Settled + Bought – Sold)
long
Ord_buy
Заявлено купить штук бумаг
long
Ord_sell
Заявлено продать штук бумаг
}
Расчёты портфельных показателей
В каждом инструменте определяется:
Cost = sec->Rate * sec->bpСost
Нетто-сумма текущих позиций по всем регистрам):
N = ∑clw->register->Balance
Нетто-сумма заявленного в покупку по всем регистрам
B = ∑clw->register->Ord_buy
Нетто-сумма заявленного в продажу по всем регистрам
S = ∑clw->register->Ord_sell
Оценка фактического риска в инструменте:
Rfact = func(N) * Cost
Оценка планового риска в инструменте:
Rplan = max(func(N+B), func(N–S)) * Cost
, где:
func(x) {
if (x < 0) return –x * sec->F * RiskRateShort(cln, sec);
else return x * sec->W * RiskRateLong(cln, sec);
}
Оценка критического риска в инструменте:
RX = funcX(N) * Cost
, где:
funcX(x) {
if (x < 0) return –x * sec->F * RiskRateShortX(cln, sec);
else return x * sec->W * RiskRateLongX(cln, sec);
}
Далее, для целей исчисления стоимостей позиций используется величина, учитывающая НКД:
Cost_E = Cost + sec->AccruedInt
N.B. При исчислении рисков и прибылей-убытков НКД не учитывается.
Оценка фактической стоимости позиций в инструменте (Efact):
if (N > 0)
Efact = N * sec->W * Cost_E
if (N < 0)
Efact = N * sec->F * Cost_E
Оценка плановой стоимости позиций в инструменте (Eplan):
if (N) {
double X = 0.0;
if (N > 0) {
if (sec->F > 1.005)
X = positive(S -
N * (sec->F – Sec->W) / ( sec->F – 1)) * (sec->F – 1);
Eplan = [ N * Sec->W – max(B * (1 – Sec->W), X)) ] * Cost_E;
} else { // (N < 0)
if (Sec->W < 0.995)
X = positive(B +
N * (sec->F – Sec->W) / (1 – Sec->W)) * (1 – Sec->W);
Eplan = [ N * sec->F – max(X, S * (sec->F – 1)) ] * Cost_E;
}
} else // (N == 0)
Eplan = – max(B * (1 – Sec->W), S * (sec->F – 1)) * Cost_E;
Вычисляются совокупные показатели по портфелю:
Оценка совокупной фактической стоимости портфеля (Капитал фактический):
Kfact = cln->MnyBalance – cln->Sum_tax + ∑Efact
Оценка совокупной плановой стоимости портфеля (Капитал плановый):
Kplan = cln->MnyBalance – cln->Sum_tax + ∑Eplan
Оценка совокупного фактического риска клиента по портфелю (сумма по всем инструментам):
∑Rfact
Оценка совокупного планового риска по портфелю (сумма по всем инструментам):
∑Rplan
Оценка совокупного критического риска по портфелю (сумма по всем инструментам):
∑RX
Фактическая обеспеченность клиентского портфеля:
Cfact = Kfact /
∑Rfact
· 100%
Плановая обеспеченность клиентского портфеля:
Cplan = K /
∑Rplan
· 100%
Критическая обеспеченность клиентского портфеля:
CX = Kfact /
∑RX
· 100%
Использование капитала фактическое:
Ufact = ∑Rfact / Kfact
· 100%
Плановое использование капитала:
Uplan = ∑Rplan / Kplan
Свободные средства клиента:
Free = Kplan – ∑Rplan
· 100%
Related documents
Download