2013-10-04 4 views
1

Ниже приведен мой код для использования поверхности Quantvib blackvariance. Но он жалуется. Вы можете посоветовать? В этой функции я вызываю функцию Blackvariance с 6 переменныхQuantlib - BlackVariancesurface


from QuantLib import * 

# global data 
todaysDate = Date(24,September,2013) 
Settings.instance().evaluationDate = todaysDate 
settlementDate = Date(24,September,2013) 
riskFreeRate = FlatForward(settlementDate, 0.0025, Actual365Fixed()) 
# option parameters 
exercise = EuropeanExercise(Date(23,December,2013)) 
payoff = PlainVanillaPayoff(Option.Call, 170.365) 
# market data 
underlying = SimpleQuote(170.365) 
volatility = BlackConstantVol(todaysDate, TARGET(), 0.13538, Actual365Fixed()) 
dividendYield = FlatForward(settlementDate, 0.0227, Actual365Fixed()) 

dc=ActualActual() 
eurexCal=Germany.Eurex 
print eurexCal 
dateVec=[] 
strikes=[] 
blackVolMatrix=[] 
vol=[] 
for i in range(10): 
    dateVec.append(Date(24, October, 2013)+Period(i, Months)) 
    strikes.append(170+i*10) 
    vol.append(0.1+i/10) 

def create_matrix(m, n): 
    return [[0.1]*n for _ in xrange(m)] 

blackVolMatrix = create_matrix(10, 10) 

#for x in range (10): 
# for y in range(10): 
#  blackVolMatrix[x,y]=0.1 

volsurf=BlackVarianceSurface(settlementDate,eurexCal,dateVec, 
          strikes,blackVolMatrix,dc) 

я добавил 6-й аргумент. * ** * ** * ** * *

Сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/chandra/Software/snotes/test4.py", line 39, in <module> 
    strikes,blackVolMatrix,dc) 
    File "/usr/local/lib/python2.7/dist-packages/QuantLib/QuantLib.py", line 3371, in __init__ 
    this = _QuantLib.new_BlackVarianceSurface(*args) 
NotImplementedError: Wrong number or type of arguments for overloaded function 'new_BlackVarianceSurface'. 
    Possible C/C++ prototypes are: 
    BlackVarianceSurfacePtr(Date const &,Calendar const &,std::vector< Date,std::allocator<Date> > const &,std::vector< Real,std::allocator<Real> > const &,Matrix const &,DayCounter const &,BlackVarianceSurface::Extrapolation,BlackVarianceSurface::Extrapolation) 
    BlackVarianceSurfacePtr(Date const &,Calendar const &,std::vector< Date,std::allocator<Date> > const &,std::vector< Real,std::allocator<Real> > const &,Matrix const &,DayCounter const &,BlackVarianceSurface::Extrapolation) 
    BlackVarianceSurfacePtr(Date const &,Calendar const &,std::vector< Date,std::allocator<Date> > const &,std::vector< Real,std::allocator<Real> > const &,Matrix const &,DayCounter const &) 
+0

По моим подсчетам, что тип требует 6, 7 или 8 аргументов, но ваш код проходит только в 5 –

+0

volsurf = BlackVarianceSurface (settlementDate, eurexCal, dateVec, ударов, blackVolMatrix, DC) он все еще дает ту же ошибку. (это была опечатка, в которую я не включил счет дня) –

+0

Тогда * тип * аргументов неверен. Пожалуйста, отредактируйте свой qusetion, чтобы исправить этот недостающий аргумент. –

ответ

1

Правильный способ инициализации календаря является

eurexCal = Germany(Germany.Eurex) 

, после чего поверхность vol строится правильно. Germany.Eurex - это просто перечисление, чтобы отличать разные рынки; вам необходимо передать его в конструктор Germany, чтобы получить фактический экземпляр .

+0

Luigi, ваше предложение получилось отлично. Моя искренняя благодарность вам. –

Смежные вопросы