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

Как получить TheorPrice по BlackScholes
Atom
6/19/2018
Дмитрий_


Добрый день

[spoiler] 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);

[/spoiler]

Значения по грекам получаю успешно. (blackScholes.Delta(new DateTimeOffset(new DateTime(2014, 08, 02))))

Не могу разобраться как получить TheorPrice. (blackScholes.Option.TheorPrice = null)


Tags:


Thanks:


Support

Avatar
Date: 6/20/2018
Reply


Добрый день

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

Thanks:

Дмитрий_

Avatar
Date: 6/20/2018
Reply


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

Thanks:

Support

Avatar
Date: 6/20/2018
Reply


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

Thanks: Дмитрий_

Дмитрий_

Avatar
Date: 6/21/2018
Reply


Добрый день

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

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

1.PNG 53 KB (836)
Thanks:

Support

Avatar
Date: 6/21/2018
Reply


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

Thanks:

Дмитрий_

Avatar
Date: 6/22/2018
Reply


Сделано, может кому-нибудь пригодится и кто-нибудь найдёт ошибки. [spoiler] 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);
    }

[/spoiler]

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

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy