Синтетика
Для изменения размера нажмите или перетащите

Синтетика

Для построения синтетических позиций по опционам (или, наоборот, опционных позиций по базовому инструменту) можно воспользоваться специальным классом Synthetic. Данный класс через методы SyntheticBuy и SyntheticSell возвращает комбинацию из синтетических инструментов для определения их возможной позиции.

Синтетическую комбинацию можно использовать совместно с определением степени ликвидности по опциону (когда нет возможности реализовать необходимую позицию). Для этого можно воспользоваться методами анализа ликвидности стакана TraderHelperGetTheoreticalTrades:

C#
// получить стакан опциона
var depth = trader.GetMarketDepth(option);

// получить теоретические сделки на покупку 100 контрактов
var trades = depth.GetTheoreticalTrades(Sides.Buy, 100);

// рассчитать реализованный объем
var matchedVolume = trades.Sum(t => t.Trade.Volume);

// регистрируем заявку по основному опциону
trader.RegisterOrder(new Order
{
    Security = option,
    Volume = matchedVolume,
    Direction = Sides.Buy,
    // максимальная цена, чтобы реализовать требуемый объем
    Price = trades.Max(t => t.Trade.Price),
});

// определяем оставшийся объем
var elapsedVolume = 100 - matchedVolume;

// если реализованный объем меньше планируемого
if (elapsedVolume > 0)
{
    // получаем синтетические инструменты
    var syntheticBuy = new Synthetic(option).Buy();

    // регистрируем оставшийся объем по синтетическим инструментам
    foreach (var pair in syntheticBuy)
    {
        trader.RegisterOrder(new Order
        {
            Security = pair.Key,
            Volume = elapsedVolume,
            Direction = pair.Value,
            Price = pair.Key.LastTrade.Price,
        });
    }
}

Аналогично опционам также можно получить опционную позицию для базового инструмента через методы SyntheticBuy(Decimal) и SyntheticSell(Decimal).