← Zurück

Как получить TheorPrice по BlackScholes

Добрый день

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)

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

Добрый день

Данный параметр транслируется из подключения. Если он транслируется вашим подключением, то поле будет заполнено.

Дмитрий_
Дмитрий_ Autor

Ок. Существует способ рассчитать теоретическую цену опциона, имея все входные данные для формулы Блэка — Шоулза, используя S#?

Support
Support

На данный момент у нас есть расчёты только данных параметров https://doc.stocksharp.ru/html/063708c5-b6a8-45f6-9ff9-608f89796a88.htm

Дмитрий_
Дмитрий_
Дмитрий_ Autor

Добрый день

Имея формулу 1.PNG и методы StockSharp-master\Algo\Derivatives\DerivativesHelper.cs подсчитать теоретическую цену возможно.

Подскажите пожалуйста, подсчёт теоретической цены опциона не был реализован по какой-то причине?

Support
Support

На данный момент реализованы только те методы, кто указаны в том классе. Вы можете реализовать самостоятельно необходимые методы. Исходный код доступен на GitHub.

Дмитрий_
Дмитрий_ Autor

Сделано, может кому-нибудь пригодится и кто-нибудь найдёт ошибки.

public static decimal TheorPrice(OptionTypes optionType, decimal assetPrice, decimal strike, decimal riskFree, double timeToExp, decimal deviation) { var sign = optionType == OptionTypes.Call ? 1 : -1;
        var expRate = ExpRate(riskFree, timeToExp);

        var d1 = D1(assetPrice, strike, riskFree, dividend, deviation, timeToExp);
        var d2 = D2(d1, deviation, timeToExp);

        return sign * assetPrice * NormalDistr(sign * d1) - sign * strike * expRate * NormalDistr(sign * d2);
    }

Я только не разобрался, почему некоторые греки (например, тета) вычисляются делением на количество дней в году, тогда как другие греки нет?