与ORM配合使用¶
为了方便,RiskQuantLib提供了一些函数,用于与ORM进行交互。但是这些函数可以广泛地被使用于于任何可迭代对象交互,我们下面进行介绍:
从可迭代对象转换为RiskQuantLib模板列表¶
如果你使用ORM获取了一个list,它的每个元素是数据库的一条记录,数据库的每一列被映射为元素的属性。那么你或许需要将这样的list转换为RiskQuantLib模板列表。
让我们假设你有一个ORM的list对象,名为 ORM,它的元素有很多属性,例如 OptionCode, PayOff, ExerciseType, ExerciseDate, StockPrice, RiskFreeRate, Sigma
现在我们编辑 config.py 以便于编译我们的工程:
#-|instrument: myEuropeanOption
#-|instrument-ParentQuantLibClassName: myEuropeanOption@EuropeanOption
#-|instrument-DefaultInstrumentType: myEuropeanOption@myEuropeanOption
#-|attribute: myEuropeanOption.PayOff@qlPayOff, myEuropeanOption.ExerciseDate@qlExercise, myEuropeanOption.StockPrice@qlQuote, myEuropeanOption.RiskFreeRate@qlQuote, myEuropeanOption.Sigma@qlQuote
注意到这里,我们所有的属性的名称都和ORM的属性名称完全相同,这会帮助RiskQuantLib自动识别那些可以被Set函数族捕捉的属性。
当编译后,你可以打开 main.py 并且直接使用::
from RiskQuantLib.module import *
vanillaOptionList = myEuropeanOptionList().fromIterable(ORM, code = 'OptionCode')
你可以从另一个模板列表生成一个新的模板列表::
stockListA = stockList().fromDF(df1)
stockListB = subStockList().fromIterable(stockListA, code = 'code', name = 'name')
这里,如果 subStockList 是继承自 stockList 的,那么stockListA的所有属性在stockListB都会被保留,如果 subStockList 和 stockList 毫无关系,那么只有那些在两个模板类中都注册过的属性会被保留。