示例#1
0
        /// <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))));
        }
示例#2
0
        /// <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))));
        }
示例#3
0
        private decimal?GetExpRate(DateTimeOffset currentTime)
        {
            var timeLine = GetExpirationTimeLine(currentTime);

            if (timeLine == null)
            {
                return(null);
            }

            return((decimal)DerivativesHelper.ExpRate(RiskFree, timeLine.Value));
        }
示例#4
0
        /// <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)))));
        }
示例#5
0
        /// <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))));
        }
示例#6
0
        /// <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))));
        }
示例#7
0
 private decimal GetExpRate(DateTimeOffset currentTime)
 {
     return((decimal)DerivativesHelper.ExpRate(RiskFree, GetExpirationTimeLine(currentTime)));
 }
示例#8
0
 /// <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));
 }
示例#9
0
 /// <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));
 }
示例#10
0
 /// <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))));
 }
示例#11
0
 /// <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));
 }