Добрый день
private static Security CreateStrike(decimal strike, decimal oi, decimal iv, OptionTypes type, DateTime expiryDate, Security asset, decimal? lastTrade) { var s = new Security { Code = "RI {0} {1}".Put(type == OptionTypes.Call ? 'C' : 'P', strike), Strike = strike, OpenInterest = oi, ImpliedVolatility = iv, HistoricalVolatility = iv, OptionType = type, ExpiryDate = expiryDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id, LastTrade = lastTrade == null ? null : new Trade , Volume = 999,//RandomGen.GetInt(10000), Type = SecurityTypes.Option, //TheorPrice = 1212m, };
s.BestBid = new Quote(s, s.StepPrice ?? 1m * RandomGen.GetInt(100), s.VolumeStep ?? 1m * RandomGen.GetInt(100), Sides.Buy);
s.BestAsk = new Quote(s, s.BestBid.Price.Max(s.StepPrice ?? 1m * RandomGen.GetInt(100)), s.VolumeStep ?? 1m * RandomGen.GetInt(100), Sides.Sell);
return s;
}
var asset = new Security { Id = "RIH5@FORTS", PriceStep = 10, };
asset.BestBid = new Quote(asset, asset.StepPrice ?? 1m * RandomGen.GetInt(100), asset.VolumeStep ?? 1m * RandomGen.GetInt(100), Sides.Buy);
asset.BestAsk = new Quote(asset, asset.BestBid.Price.Max(asset.StepPrice ?? 1m * RandomGen.GetInt(100)), asset.VolumeStep ?? 1m * RandomGen.GetInt(100), Sides.Sell);
asset.LastTrade = new Trade
{
Security = asset,
Price = 105000,
};
var expiryDate = new DateTime(2014, 09, 15);
var currDate = new DateTime(2014, 08, 02);
var securities = new List<Security>
{
asset,
CreateStrike(105000, 10, 60, OptionTypes.Call, expiryDate, asset, 105000),
CreateStrike(105000, 10, 50, OptionTypes.Put, expiryDate, asset, 105000)
};
var dummyProvider = new DummyProvider(securities, new[]
{
new Position
{
Security = asset,
//CurrentValue = -100,
}
});
Security blackScholesOption = CreateStrike(105000, 10, 60, OptionTypes.Call, expiryDate, asset, 105000);
BlackScholes blackScholes = new BlackScholes(blackScholesOption, asset, dummyProvider);
Значения по грекам получаю успешно. (blackScholes.Delta(new DateTimeOffset(new DateTime(2014, 08, 02))))
Не могу разобраться как получить TheorPrice. (blackScholes.Option.TheorPrice = null)
Comentários (6)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Добрый день
Данный параметр транслируется из подключения. Если он транслируется вашим подключением, то поле будет заполнено.
Ок. Существует способ рассчитать теоретическую цену опциона, имея все входные данные для формулы Блэка — Шоулза, используя S#?
На данный момент у нас есть расчёты только данных параметров https://doc.stocksharp.ru/html/063708c5-b6a8-45f6-9ff9-608f89796a88.htm
Добрый день
Имея формулу
и методы StockSharp-master\Algo\Derivatives\DerivativesHelper.cs
подсчитать теоретическую цену возможно.
Подскажите пожалуйста, подсчёт теоретической цены опциона не был реализован по какой-то причине?
На данный момент реализованы только те методы, кто указаны в том классе. Вы можете реализовать самостоятельно необходимые методы. Исходный код доступен на GitHub.
Сделано, может кому-нибудь пригодится и кто-нибудь найдёт ошибки.
public static decimal TheorPrice(OptionTypes optionType, decimal assetPrice, decimal strike, decimal riskFree, double timeToExp, decimal deviation) { var sign = optionType == OptionTypes.Call ? 1 : -1;
Я только не разобрался, почему некоторые греки (например, тета) вычисляются делением на количество дней в году, тогда как другие греки нет?