При данном исследовании было потрачено немало труда, поэтому ссылка на автора при перепечатке обязательна. © Simix.
Сразу скажу что расчёт ГО тема скользкая, т.к. представляет собой величину умозрительную — риск. Есть люди, которые прыгают с парашютом для развлечения, а я считаю что этот риск слишком велик чтобы прыгать без необходимости. То есть риск зависит от того, кто смотрит. Если бы мы все знали реальные риски той или иной ситуации, то была бы не жизнь, а красота. Поэтому ровно такое же ГО как в QUIKе вы не получите никаким оффлайновым алгоритмом. Биржа имеет насчёт ГО свои взгляды, собственные поправочные коэффициенты и собственный модуль, который работает только с подключением к бирже.
Но посчитать ГО в оффлайне всё-таки можно.
Чтобы как-то ограничить и описать риск количественно, биржа вводит ряд предположений и условий, а также приводит открытую
методику которыми мы и воспользуемся:
1. Планки. Верхняя планка и нижняя планка определяют коридор изменения цены в рамках одной сессии. Тем самым биржа ограничивает риск просто физически, волевым решением. Это очень хорошо. Значения планок можно узнать на сайте биржи для данного Базового Актива (БА).
Верхний лимит 154 550
Нижний лимит 143 370
http://moex.com/ru/contract.aspx?code=RTS-12.13
Обозначим эти значения
H и
L. А максимальный сессионный ход базового актива обозначим
D= H-L. Запомните эти буквы, они нам пригодятся.

2. Размером необходимого ГО считается количество денег, которое должно быть на счету, чтобы в самом худшем случае ликвидировать позицию в ноль в течение сессии.
3. Чтобы вычислить худшие случаи, мы должны уметь считать профиль нашей позиции P/L. Тогда РТС считает что худшим случаем будет точка максимальной просадки нашего профиля в удвоенном диапазоне хода базового актива: от
БА-D до
БА+D.
4. Для опционно-фьючерсного портфеля есть ещё варианты сценариев — по волатильности. Таким образом нам нужно посчитать профиль 2 раза:
а) Волатильность уменьшилась.
б) Волатильность увеличилась.
РТС предлагает считать ещё случай, когда волатильность осталась неизменной, но я считаю что этот сценарий всегда лежит между а) и б).

Результатом будет точка максимальной просадки портфеля во всех случаях.
Теперь пару-тройку ноу-хау и допущений от автора Simix, то есть от меня.
При перепечатке ссылка на автора обязательна
© Simix
1. Мне интересны только портфели, построенные на одном базовом активе, поэтому для портфелей с разными БА надо знать дополнительные коэффициенты корреляции, чтобы можно было правильно суммировать ГО. У биржи есть какие-то соображения на этот счёт, у меня — нет.
2. Если вы посчитаете всё как написано выше, то увидите что точки максимальной просадки не дают правильного результата. На самом деле здесь мы используем небольшой хак:
ГО дериватива зависит от параметра «Дельта»! Видимо РТС справедливо думает что опцион похож на фьючерс ровно в степени, насколько его дельта близка к единице. А ГО фьючерса мы считать умеем.
Если вы посчитаете ГО для фуча, вы обнаружите чудо:
ГОфуч() = D * стоимость_пункта = (H-L) * стоимость_пункта
Распространяя это правило на проданный опцион получаем:
ГОопцион(х,v) = D * стоимость_пункта * ∆(x,v)
Где
x — это точка максимальной просадки (минимального значения профиля P/L в диапазоне расчётов от
БА-D до
БА+D )
v — вола данного опциона с учётом сценария
Эта функция универсальна и для фуча и для опциона, т.к. дельта фуча = 1. Поэтому её можно применять целиком для портфеля деривативов. Если только вы умеете считать по нему дельту.
Купленный опцион, немного выпадает из этого правила: он наоборот даёт максимальный убыток в точке где дельта стремится к нулю, значит купленные опционы будут учтены именно минимальным значением портфеля. Таким образом комбинируя эти правила берём максимальное ГО из двух случаев.
Вот как это выглятит в железе:
D = H-L;
lowPt = БА — D;
highPt = БА + D;
double COptPortfel::
scenaryGO(double lowPt, double highPt, time_t tm)
{
double minVal = INT_MAX;
double minValBA = 0;
double step = (highPt-lowPt)/16;
for (double d=lowPt; d<highPt; d+=step)
{
double val = calcValue(d, tm);
// значение портфеля в точке d
// — находим где просадка самая большая
if (val < minVal)
{
// minValBA = значение БА в точке макс. просадки
// minVal = стоимость портфеля в точке макс. просадки
minValBA = d; minVal = val;
}
}
// — считаем дельту в точке мин. значения
// если ГО по дельте меньше ГО по значению, оставляем ГО по значению
// tm = текущее время
double deltaGO = -abs(calcDelta(minValBA, tm))*D;
minVal = min(minVal, deltaGO);
return minVal;
}
Я считаю ГО в терминах максимальной просадки, поэтому все значения ГО должны быть отрицательными. Если максимальная просадка всё-равно выше нуля (вы нашли грааль) то вы переходите в "
GOd mode" и ваше ГО=0 $-).
3. Немного о выборе точек расчёта профиля P/L внутри расчётного диапазона: Я беру просто 15 последовательных точек внутри отрезка плюс концы отрезка. РТС советует брать ещё дополнительно точки страйков, т.к. там просадка самая большая особенно близко к экспирации. Но это вы допишите сами, я пока не сделал.
4. Последний штрих — это сценарии волатильности. Сценарий высокой волатильности методом научного тыка был определён как просто умножение всей улыбки на 1.5 (+50%). Соответственно сценарий низкой волатильности — деление всей улыбки на 1.45 (-45%)
// волатильность понизилась
Session.kSigma = 1 — 0.45;
// kSigma — множитель волатильности для всех формул
dGO = min(dGO, scenaryGO(lowPt, highPt, nowTime));
// волатильность повысилась
Session.kSigma = 1 + 0.5;
dGO = min(dGO, scenaryGO(lowPt, highPt, nowTime));
Данная методика не даёт точного совпадения с QUIK и option.ru, но неплохо приближена к ним, она использует правильный теоретический фундамент, который совпадает с методикой биржи, а самое главное — со здравым смыслом.
Встроенный в тестер опционных стратегий, особенно динамических стратегий, этот алгоритм позволяет не парить в облаках сказочных доходностей, а чётко даёт представления о рамках реальности, заданных ГО. Не давайте ГО ни в реале ни в бэк-тестинге превысить 2/3 депозита и всё точно будет пучком. Удачи!
С большим уважением,
Энергетический дятел.