pyhton:运算符重载(期权Greeks相加)

运算符重载,网上很多例子。

最近在学期权定价,期权有一堆风险指标,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: {delta}
            gamma: {gamma}
            vega:  {vega}
            theta: {theta}
            rho:   {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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qcyfred

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值