Ошибка в DeltaHedgeStrategy
Хеджирование позиции через DeltaHedgeStrategy работает не корректно
Неверно определяется необходимая позиция в базовом активе для рехеджа
Начал разбираться, открыл исходник DeltaHedgeStrategy
diff (позиция в базовом активе для хеджа) там определяется так
Код
/// <summary>
/// Получить список заявок, рехеджирующих опционную позицию.
/// </summary>
/// <returns>Заявки рехеджирования.</returns>
protected override IEnumerable<Order> GetReHedgeOrders()
{
var futurePosition = BlackScholes.Delta();
var diff = futurePosition.Round() + Position + PositionOffset;
...
Где futurePosition - это суммарная дельта всех имеющихся опционов + уже имеющаяся позиция по базовому активу
Код
/// <summary>
/// Рассчитать дельту опциона.
/// </summary>
/// <param name="deviation">Стандартное отклонение.</param>
/// <returns>Дельта опциона.</returns>
public override decimal Delta(decimal deviation)
{
return ProcessOptions(bs => bs.Delta(deviation)) + GetAssetPosition();
}
Ошибка в том, что при расчете diff, вся позиция хеджирующей стратегии добавляется еще раз к суммарной дельте
Если изменить на такую запись, то будет работать
Код
var diff = futurePosition.Round() + PositionOffset;