예제 #1
0
    def calculateVolatility(self, primium, type, stockPrice, strike, expiryYears, riskfreeRate):
        if stockPrice <= 0 or primium <= 0 or expiryYears <= 0:
            return 0
            
        bs = BlackScholesCalculator()

        loopVolatility = self.initVolatility(stockPrice, expiryYears, primium)

        prevVolatility = loopVolatility / 2.0
        loopPremium = bs.getValue(type, stockPrice, strike, prevVolatility, expiryYears, riskfreeRate)
        
        loop = 0
        while (1 == 1):
            loop += 1
            if loop > 1000: return -1
                
            newPrimium = bs.getValue(type, stockPrice, strike, loopVolatility, expiryYears, riskfreeRate)
            prevPrimium = loopPremium
            loopPrimium = newPrimium
            
            if newPrimium < 0.00001: return -1
            
            var1 = loopPrimium - primium
            
            if (abs(loopPrimium - primium) <= 0.01):
                return loopVolatility
            
            loopVega = bs.getVega(stockPrice, strike, loopVolatility, expiryYears, riskfreeRate)
            newVolatility = self.adjVolatility(loopVolatility, loopPrimium, loopVega, prevVolatility, prevPrimium, primium)
            prevVolatility = loopVolatility
            loopVolatility = newVolatility
예제 #2
0
theta = bs.getTheta(opt.type, opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "theta of call:", theta

rho = bs.getRho(opt.type, opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "rho of call:", rho

print

opt = EuropeanOptions("put", 100.0, 100.0, 0.35607, 1, 0.02)

value = bs.getValue(opt.type, opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "value of put:", value

delta = bs.getDelta(opt.type, opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "delta of put:", delta

theta = bs.getTheta(opt.type, opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "theta of put:", theta

rho = bs.getRho(opt.type, opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "rho of put:", rho

print

gamma = bs.getGamma(opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "gamma:", gamma

vega = bs.getVega(opt.stockPrice, opt.strike, opt.volatility, opt.expiryYears, opt.riskfreeRate)
print "vega:", vega