運算子過載,網上很多例子。
最近在學期權定價,期權有一堆風險指標,greeks。
想用oop實現,簡化**。但涉及到類加減運算。
直觀上,線性組合,greeks的各分項就應該對應相加。
廢話不多說,直接上**。
class greeks:
def __init__(self):
"""todo 比較各項希臘值跟實務中用到的希臘值的區別
:param delta: 標準delta
:param gamma: 標準gamma
:param vega: 需要/100,才是標的波動率變動1個百分點,期權價值的變動。如vega=1,是標的波動率增加1個百分點,期權變貴0.01塊錢
:param theta:
:param rho:
"""self.delta = 0
self.gamma = 0
self.vega = 0
self.theta = 0
self.rho = 0
def __add__(self, other):
""":param other: 只能是greeks
:return:
"""self.delta += other.delta
self.gamma += other.gamma
self.vega += other.vega
self.theta += other.theta
self.rho += other.rho
return self
def __sub__(self, other):
""":param other:
:return:
"""self.delta -= other.delta
self.gamma -= other.gamma
self.vega -= other.vega
self.theta -= other.theta
self.rho -= other.rho
return self
def __mul__(self, other):
""":param other: 只能是標量
:return:
"""self.delta *= other
self.gamma *= other
self.vega *= other
self.theta *= other
self.rho *= other
return self
def __truediv__(self, other):
""":param other: 只能是標量
:return:
"""self.delta /= other
self.gamma /= other
self.vega /= other
self.theta /= other
self.rho /= other
return self
def __str__(self):
s = """
delta:
gamma:
vega:
theta:
rho:
""".format(
delta=self.delta,
gamma=self.gamma,
vega=self.vega,
theta=self.theta,
rho=self.rho
)return s
if __name__ == '__main__':
delta = 0.5
gamma = 0.1
vega = 0.3
theta = 0.5
rho = 0.2
greeks_1 = greeks()
greeks_1.delta = delta
greeks_1.gamma = gamma
greeks_1.vega = vega
greeks_1.theta = theta
greeks_1.rho = rho
greeks_2 = greeks()
greeks_2.delta = delta
greeks_2.gamma = gamma
greeks_2.vega = vega
greeks_2.theta = theta
greeks_2.rho = rho
greeks_3 = greeks()
greeks_3.delta = delta
greeks_3.gamma = gamma
greeks_3.vega = vega
greeks_3.theta = theta
greeks_3.rho = rho
print(greeks_1 - greeks_2 - greeks_3)
輸出結果如下。
delta: -0.5
gamma: -0.1
vega: -0.3
theta: -0.5
rho: -0.2
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...