/// <summary> /// Рассчитать вегу опциона. /// </summary> /// <param name="currentTime">Текущее время.</param> /// <param name="deviation">Стандартное отклонение. Если оно не указано, то используется <see cref="DefaultDeviation"/>.</param> /// <param name="assetPrice">Цена базового актива. Если цена не указана, то получается цена последней сделки из <see cref="UnderlyingAsset"/>.</param> /// <returns>Вега опциона.</returns> public virtual decimal Vega(DateTimeOffset currentTime, decimal?deviation = null, decimal?assetPrice = null) { assetPrice = GetAssetPrice(assetPrice); var timeToExp = GetExpirationTimeLine(currentTime); return(TryRound(DerivativesHelper.Vega(assetPrice.Value, timeToExp, D1(deviation ?? DefaultDeviation, assetPrice.Value, timeToExp)))); }
/// <summary> /// Рассчитать ро опциона. /// </summary> /// <param name="currentTime">Текущее время.</param> /// <param name="deviation">Стандартное отклонение. Если оно не указано, то используется <see cref="DefaultDeviation"/>.</param> /// <param name="assetPrice">Цена базового актива. Если цена не указана, то получается цена последней сделки из <see cref="UnderlyingAsset"/>.</param> /// <returns>Ро опциона.</returns> public virtual decimal Rho(DateTimeOffset currentTime, decimal?deviation = null, decimal?assetPrice = null) { deviation = deviation ?? DefaultDeviation; assetPrice = GetAssetPrice(assetPrice); var timeToExp = GetExpirationTimeLine(currentTime); return(TryRound(DerivativesHelper.Rho(OptionType, Option.Strike, assetPrice.Value, RiskFree, deviation.Value, timeToExp, D1(deviation.Value, assetPrice.Value, timeToExp)))); }
private decimal?GetExpRate(DateTimeOffset currentTime) { var timeLine = GetExpirationTimeLine(currentTime); if (timeLine == null) { return(null); } return((decimal)DerivativesHelper.ExpRate(RiskFree, timeLine.Value)); }
/// <summary> /// Рассчитать дельту опциона. /// </summary> /// <param name="currentTime">Текущее время.</param> /// <param name="deviation">Стандартное отклонение. Если оно не указано, то используется <see cref="DefaultDeviation"/>.</param> /// <param name="assetPrice">Цена базового актива. Если цена не указана, то получается цена последней сделки из <see cref="UnderlyingAsset"/>.</param> /// <returns>Дельта опциона. Если значение равно <see langword="null"/>, то расчет значения в данный момент невозможен.</returns> public virtual decimal?Delta(DateTimeOffset currentTime, decimal?deviation = null, decimal?assetPrice = null) { assetPrice = GetAssetPrice(assetPrice); if (assetPrice == null) { return(null); } return(TryRound(DerivativesHelper.Delta(OptionType, assetPrice.Value, D1(deviation ?? DefaultDeviation, assetPrice.Value, GetExpirationTimeLine(currentTime))))); }
/// <summary> /// Рассчитать премию опциона. /// </summary> /// <param name="currentTime">Текущее время.</param> /// <param name="deviation">Стандартное отклонение. Если оно не указано, то используется <see cref="DefaultDeviation"/>.</param> /// <param name="assetPrice">Цена базового актива. Если цена не указана, то получается цена последней сделки из <see cref="UnderlyingAsset"/>.</param> /// <returns>Премия опциона. Если значение равно <see langword="null"/>, то расчет значения в данный момент невозможен.</returns> public virtual decimal?Premium(DateTimeOffset currentTime, decimal?deviation = null, decimal?assetPrice = null) { deviation = deviation ?? DefaultDeviation; assetPrice = GetAssetPrice(assetPrice); if (assetPrice == null) { return(null); } var timeToExp = GetExpirationTimeLine(currentTime); return(TryRound(DerivativesHelper.Premium(OptionType, GetStrike(), assetPrice.Value, RiskFree, Dividend, deviation.Value, timeToExp, D1(deviation.Value, assetPrice.Value, timeToExp)))); }
/// <summary> /// To calculate the option gamma. /// </summary> /// <param name="currentTime">The current time.</param> /// <param name="deviation">The standard deviation. If it is not specified, then <see cref="BlackScholes.DefaultDeviation"/> is used.</param> /// <param name="assetPrice">The price of the underlying asset. If the price is not specified, then the last trade price getting from <see cref="BlackScholes.UnderlyingAsset"/>.</param> /// <returns>The option gamma. If the value is equal to <see langword="null" />, then the value calculation currently is impossible.</returns> public virtual decimal?Gamma(DateTimeOffset currentTime, decimal?deviation = null, decimal?assetPrice = null) { deviation = deviation ?? DefaultDeviation; assetPrice = GetAssetPrice(assetPrice); if (assetPrice == null) { return(null); } var timeToExp = GetExpirationTimeLine(currentTime); if (timeToExp == null) { return(null); } return(TryRound(DerivativesHelper.Gamma(assetPrice.Value, deviation.Value, timeToExp.Value, D1(deviation.Value, assetPrice.Value, timeToExp.Value)))); }
private decimal GetExpRate(DateTimeOffset currentTime) { return((decimal)DerivativesHelper.ExpRate(RiskFree, GetExpirationTimeLine(currentTime))); }
/// <summary> /// Рассчитать параметр d1 определения вероятности исполнения опциона. /// </summary> /// <param name="deviation">Стандартное отклонение.</param> /// <param name="assetPrice">Цена базового актива.</param> /// <param name="timeToExp">Период опциона до экспирации.</param> /// <returns>Параметр d1.</returns> protected override double D1(decimal deviation, decimal assetPrice, double timeToExp) { return(DerivativesHelper.D1(assetPrice, Option.Strike, 0, 0, deviation, timeToExp)); }
/// <summary> /// To calculate the d1 parameter of the option fulfilment probability estimating. /// </summary> /// <param name="deviation">Standard deviation.</param> /// <param name="assetPrice">Underlying asset price.</param> /// <param name="timeToExp">The option period before the expiration.</param> /// <returns>The d1 parameter.</returns> protected virtual double D1(decimal deviation, decimal assetPrice, double timeToExp) { return(DerivativesHelper.D1(assetPrice, GetStrike(), RiskFree, Dividend, deviation, timeToExp)); }
/// <summary> /// To calculate the implied volatility. /// </summary> /// <param name="currentTime">The current time.</param> /// <param name="premium">The option premium.</param> /// <returns>The implied volatility. If the value is equal to <see langword="null" />, then the value calculation currently is impossible.</returns> public virtual decimal?ImpliedVolatility(DateTimeOffset currentTime, decimal premium) { //var timeToExp = GetExpirationTimeLine(); return(TryRound(DerivativesHelper.ImpliedVolatility(premium, diviation => Premium(currentTime, diviation)))); }
/// <summary> /// The time before expiration calculation. /// </summary> /// <param name="currentTime">The current time.</param> /// <returns>The time remaining until expiration. If the value is equal to <see langword="null" />, then the value calculation currently is impossible.</returns> public virtual double?GetExpirationTimeLine(DateTimeOffset currentTime) { return(DerivativesHelper.GetExpirationTimeLine(Option.GetExpirationTime(), currentTime)); }