コード例 #1
0
        public OneTouch(string assetName, DateTime obsStart, DateTime obsEnd, double barrier, string discountCurve, Currency ccy, DateTime payDate, double notional, BarrierSide barrierSide, BarrierType barrierType, Currency simulationCcy)
            : base(assetName, discountCurve, ccy, payDate, notional, simulationCcy)
        {
            _obsStart = obsStart;
            _obsEnd   = obsEnd;
            _barrier  = barrier;

            _barrierType = barrierType;
            _barrierSide = barrierSide;

            _notional   = new Vector <double>(notional);
            _barrierVec = new Vector <double>(barrier);
        }
コード例 #2
0
ファイル: EuropeanBarrierOption.cs プロジェクト: wy6688/qwack
        public EuropeanBarrierOption(string assetName, DateTime obsStart, DateTime obsEnd, DateTime expiry, OptionType callPut, double strike, double barrier, string discountCurve, Currency ccy, DateTime payDate, double notional, BarrierSide barrierSide, BarrierType barrierType, Currency simulationCcy)
            : base(assetName, discountCurve, ccy, payDate, notional, simulationCcy)
        {
            _obsStart = obsStart;
            _obsEnd   = obsEnd;
            _expiry   = expiry;
            _callPut  = callPut;

            _barrierType = barrierType;
            _barrierSide = barrierSide;

            _notional   = new Vector <double>(notional);
            _barrierVec = new Vector <double>(barrier);
            _strikeVec  = new Vector <double>(strike);
        }
コード例 #3
0
        public OneTouch(string assetName, DateTime obsStart, DateTime obsEnd, double barrier, string discountCurve, Currency ccy, DateTime payDate, double notional, BarrierSide barrierSide, BarrierType barrierType)
        {
            _obsStart      = obsStart;
            _obsEnd        = obsEnd;
            _barrier       = barrier;
            _discountCurve = discountCurve;
            _ccy           = ccy;
            _payDate       = payDate;

            _barrierType = barrierType;
            _barrierSide = barrierSide;

            _assetName  = assetName;
            _notional   = new Vector <double>(notional);
            _barrierVec = new Vector <double>(barrier);
        }
コード例 #4
0
        public EuropeanBarrierOption(string assetName, DateTime obsStart, DateTime obsEnd, DateTime expiry, OptionType callPut, double strike, double barrier, string discountCurve, Currency ccy, DateTime payDate, double notional, BarrierSide barrierSide, BarrierType barrierType)
        {
            _obsStart      = obsStart;
            _obsEnd        = obsEnd;
            _expiry        = expiry;
            _callPut       = callPut;
            _strike        = strike;
            _barrier       = barrier;
            _discountCurve = discountCurve;
            _ccy           = ccy;
            _payDate       = payDate;

            _barrierType = barrierType;
            _barrierSide = barrierSide;

            _assetName  = assetName;
            _notional   = new Vector <double>(notional);
            _barrierVec = new Vector <double>(barrier);
            _strikeVec  = new Vector <double>(strike);
        }
コード例 #5
0
 public static double BarrierAdjust(double barrier, double vol, double deltaT, BarrierSide side) =>
 side == BarrierSide.Down
     ? barrier * Exp(0.5826 * vol * deltaT)
     : barrier / Exp(0.5826 * vol * deltaT);
コード例 #6
0
        public static double BarrierOptionPV(double forward, double strike, double riskFreeRate, double expTime, double volatility, OptionType CP, double barrier, BarrierType barrierType, BarrierSide barrierSide)
        {
            var blackPV        = BlackPV(forward, strike, riskFreeRate, expTime, volatility, CP);
            var barrierHitProb = BarrierProbability(forward, forward, barrier, volatility, expTime, barrierSide);

            return(barrierType == BarrierType.KI ? barrierHitProb * blackPV : (1.0 - barrierHitProb) * blackPV);
        }
コード例 #7
0
 public static double BarrierProbability(double startFwd, double endFwd, double barrier, double sigma, double t, BarrierSide barrierSide) => barrierSide == BarrierSide.Down
         ? (Min(startFwd, endFwd) < barrier ? 1.0 : Exp(-2.0 * Log(startFwd / barrier) * Log(endFwd / barrier) / (sigma * sigma * t)))
         : (Max(startFwd, endFwd) > barrier ? 1.0 : Exp(-2.0 * Log(startFwd / barrier) * Log(endFwd / barrier) / (sigma * sigma * t)));