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); }
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); }
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); }
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); }
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);
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); }
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)));