This article does not consider option premium.

1.Single option

1.1call option(看涨)

1.1.1buy call

The payoff is max(0,-K), where K is the strike price, is the spot price at maturity T.

import matplotlib.pyplot as plt
import numpy as np
K1=40
St=np.linspace(0,80,81)
def buycall(K,S):if S-K>0:payoff=S-Kelse:payoff=0return payoff
buycallpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):buycallpayoff[i]=buycall(K1,St[i])
plt.plot(St,buycallpayoff)
plt.title('buycallpayoff')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('strike price(K)')
plt.show()

1.1.2sell call

The payoff is min(0,K-)

def sellcall(K,S):if K-S<0:payoff=K-Selse:payoff=0return payoff
sellcallpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):sellcallpayoff[i]=sellcall(K1,St[i])
plt.plot(St,sellcallpayoff)
plt.title('sellcallpayoff')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('strike price(K)')
plt.show()

1.2put option(看跌)

1.2.1buy put

The payoff is max(0,K-)

def buyput(K,S):if K-S>0:payoff=K-Selse:payoff=0return payoff
buyputpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):buyputpayoff[i]=buyput(K1,St[i])
plt.plot(St,buyputpayoff)
plt.title('buy put')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('payoff')
plt.show()

1.2.2sell put

The payoff is min(0,-K)

def sellput(K,S):if S-K<0:payoff=S-Kelse:payoff=0return payoff
sellputpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):sellputpayoff[i]=sellput(K1,St[i])
plt.plot(St,sellputpayoff)
plt.title('sell put')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('payoff')
plt.show()

2.Option portfolio

2.1straddle(跨式组合)

2.1.1bottom (buy) straddle (底部买入的跨式组合)

The portfolio is that buy one call option and one put option with same strike price and expiration date(买入相同交割价格和到期日的一份看涨和一份看跌期权).

The payoff is max(0, -K)+max(0,k- )=| -K|.

def bottomstraddle(K,S):payoff=abs(S-K)return payoff
bottomstraddlepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstraddlepayoff[i]=bottomstraddle(K1,St[i])
plt.plot(St,bottomstraddlepayoff)
plt.title('bottom (buy) straddle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.1.2top (sell) straddle(顶部卖出的跨式组合)

The portfolio is that sell one call option and one put option with same strike price and expiration date(卖出相同交割价格和到期日的一份看涨和一份看跌期权).

The payoff is min(0, -K)+min(0,k- )=-| -K|.

def topstraddle(K,S):payoff=-abs(S-K)return payoff
topstraddlepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstraddlepayoff[i]=topstraddle(K1,St[i])
plt.plot(St,topstraddlepayoff)
plt.title('top (sell) straddle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.2strip(条式组合)

2.2.1bottom (buy) strip(底部买入的条式组合)

The portfolio is that buy one call option and two put options with same strike price and expiration date(买入相同交割价格和到期日的一份看涨和两份看跌期权).

The payoff is max(0, -K)+2max(0,k- )=| -K|+max(0,k- ).

def bottomstrip(K,S):if K-S>0:payoff=abs(S-K)+K-Selse:payoff=abs(S-K)return payoff
bottomstrippayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstrippayoff[i]=bottomstrip(K1,St[i])
plt.plot(St,bottomstrippayoff)
plt.title('bottom (buy) strip')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.2.2top (sell) strip(顶部卖出的条式组合)

The portfolio is that sell one call option and two put options with same strike price and expiration date(卖出相同交割价格和到期日的一份看涨和两份看跌期权).

The payoff is 2min(0, -K)+min(0,k- )=-| -K|+min(0, -K).

def topstrip(K,S):if S-K<0:payoff=-abs(S-K)+S-Kelse:payoff=-abs(S-K)return payoff
topstrippayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstrippayoff[i]=topstrip(K1,St[i])
plt.plot(St,topstrippayoff)
plt.title('top (sell) strip')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.3strap(带式组合)

2.3.2bottom (buy) strap(底部买入的带式组合)

The portfolio is that buy two call options and one put option with same strike price and expiration date(买入相同交割价格和到期日的两份看涨和一份看跌期权).

The payoff is 2max(0, -K)+max(0,k- )=| -K|+max(0, -K).

def bottomstrap(K,S):if S-K>0:payoff=abs(S-K)+S-Kelse:payoff=abs(S-K)return payoff
bottomstrappayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstrappayoff[i]=bottomstrap(K1,St[i])
plt.plot(St,bottomstrappayoff)
plt.title('bottom (buy) strap')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.3.2top (sell) strap(顶部卖出的带式组合)

The portfolio is that sell two call options and one put option with same strike price and expiration date(卖出相同交割价格和到期日的两份看涨和一份看跌期权).

The payoff is min(0,-K)+2min(0,k-)=-|-K|+min(0,k-).

def topstrap(K,S):if K-S<0:payoff=-abs(S-K)+K-Selse:payoff=-abs(S-K)return payoff
topstrappayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstrappayoff[i]=topstrap(K1,St[i])
plt.plot(St,topstrappayoff)
plt.title('top (sell) strap')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.4strangle(宽跨式组合)

2.4.1bottom (buy) strangle(底部买入的宽跨式组合)

The portfolio is that buy one call option with strike price KC and one put option with strike price KP , where KC > KP,and they have same expiration date(买入相同到期日的一份看涨和一份看跌期权,且看涨期权的交割价格高于看跌期权).

The payoff is max(0,-KC)+max(0,KP-).

KC=50
KP=30
def bottomstrangle(KC,KP,S):if S-KC>0:callpayoff=S-KCelse:callpayoff=0if KP-S>0:putpayoff=KP-Selse:putpayoff=0payoff=callpayoff+putpayoffreturn payoff
bottomstranglepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstranglepayoff[i]=bottomstrangle(KC,KP,St[i])
plt.plot(St,bottomstranglepayoff)
plt.title('bottom (buy) strangle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.4.2top (sell) strangle(顶部卖出的宽跨式组合)

The portfolio is that sell one call option with strike price KC and one put option with strike price KP , where KC > KP,and they have same expiration date(卖出相同到期日的一份看涨和一份看跌期权,且看涨期权的交割价格高于看跌期权).

The payoff is min(0,-KP)+min(0,KC-).

def topstrangle(KC,KP,S):if KC-S<0:callpayoff=KC-Selse:callpayoff=0if S-KP<0:putpayoff=S-KPelse:putpayoff=0payoff=callpayoff+putpayoffreturn payoff
topstranglepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstranglepayoff[i]=topstrangle(KC,KP,St[i])
plt.plot(St,topstranglepayoff)
plt.title('top (sell) strangle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.5bull spreads(牛市差价组合)(低价买高价卖)

2.5.1call bull spreads(看涨牛市差价组合)

The portfolio is that buy one call option with low strike price KCL and sell one call option with high strike price KCH , and they have same expiration date(买入一份较低交割价格看涨期权和卖出一份较高交割价格看涨期权,且到期日相同).

The payoff is max(0,-KCL)+min(0,KCH-).

KCL=30
KCH=50
def callbullspreads(KCL,KCH,S):if S-KCL>0:lowcallpayoff=S-KCLelse:lowcallpayoff=0if KCH-S<0:highcallpayoff=KCH-Selse:highcallpayoff=0payoff=lowcallpayoff+highcallpayoffreturn payoff
callbullspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callbullspreadspayoff[i]=callbullspreads(KCL,KCH,St[i])
plt.plot(St,callbullspreadspayoff)
plt.title('call bull spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.5.2put bull spreads(看跌牛市差价组合)

The portfolio is that buy one put option with low strike price KPL and sell one put option with high strike price KPH , and they have same expiration date(买入一份较低交割价格看跌期权和卖出一份较高交割价格看跌期权,且到期日相同).

The payoff is max(0,KPL-)+min(0,-KPH).

KPL=30
KPH=50
def putbullspreads(KPL,KPH,S):if KPL-S>0:lowputpayoff=KPL-Selse:lowputpayoff=0if S-KPH<0:highputpayoff=S-KPHelse:highputpayoff=0payoff=lowputpayoff+highputpayoffreturn payoff
putbullspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putbullspreadspayoff[i]=putbullspreads(KPL,KPH,St[i])
plt.plot(St,putbullspreadspayoff)
plt.title('put bull spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.6bear spreads(熊市差价组合)(低价卖高价买)

2.6.1call bear spreads(看涨熊市差价组合)

The portfolio is that sell one call option with low strike price KCLB and buy one call option with high strike price KCHB , and they have same expiration date(卖出一份较低交割价格看涨期权和买入一份较高交割价格看涨期权,且到期日相同).

The payoff is min(0,KCLB-)+max(0,-KCHB).

KCLB=30
KCHB=50
def callbearspreads(KCLB,KCHB,S):if KCLB-S<0:lowcallpayoff=KCLB-Selse:lowcallpayoff=0if S-KCHB>0:highcallpayoff=S-KCHBelse:highcallpayoff=0payoff=lowcallpayoff+highcallpayoffreturn payoff
callbearspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callbearspreadspayoff[i]=callbearspreads(KCLB,KCHB,St[i])
plt.plot(St,callbearspreadspayoff)
plt.title('call bear spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.6.2put bear spreads(看跌熊市差价组合)

The portfolio is that sell one put option with low strike price KPLB and buy one put option with high strike price KPHB , and they have same expiration date(卖出一份较低交割价格看跌期权和买入一份较高交割价格看跌期权,且到期日相同).

The payoff is min(0,-KPLB)+max(0,KPHB-).

KPLB=30
KPHB=50
def putbearspreads(KPLB,KPHB,S):if S-KPLB<0:lowputpayoff=S-KPLBelse:lowputpayoff=0if KPHB-S>0:highputpayoff=KPHB-Selse:highputpayoff=0payoff=lowputpayoff+highputpayoffreturn payoff
putbearspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putbearspreadspayoff[i]=putbearspreads(KPLB,KPHB,St[i])
plt.plot(St,putbearspreadspayoff)
plt.title('put bear spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.7butterfly spreads(蝶式差价组合)

2.7.1forward butterfly spreads(正向蝶式差价组合)(买高低,卖中间)

2.7.1.1call forward butterfly spreads(看涨正向蝶式差价组合)

The portfolio is that buy one call option with low strike price KLb, sell two call options with middle strike price KMb and buy one call option with high strike price KHb, where KHb-KMb=KMb-KLb, and they have same expiration date(买入一份较低交割价格看涨期权,卖出两份中间交割价格看涨期权和买入一份较高交割价格看涨期权,三个价格成等差数列,且到期日相同).

The payoff is max(0,-KLb)+2min(0,KMb-)+max(0,-KHb).

KLb=20
KMb=40
KHb=60
def callforwardbutterflyspreads(KLb,KMb,KHb,S):if S-KLb>0:lowcallpayoff=S-KLbelse:lowcallpayoff=0if KMb-S<0:middlecallpayoff=2*(KMb-S)else:middlecallpayoff=0if S-KHb>0:highcallpayoff=S-KHbelse:highcallpayoff=0payoff=lowcallpayoff+middlecallpayoff+highcallpayoffreturn payoff
callforwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callforwardbutterflyspreadspayoff[i]=callforwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,callforwardbutterflyspreadspayoff)
plt.title('call forward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.7.1.2put forward butterfly spreads(看跌正向蝶式差价组合)

The portfolio is that buy one put option with low strike price KLb, sell two put options with middle strike price KMb and buy one put option with high strike price KHb, where KHb-KMb=KMb-KLb, and they have same expiration date(买入一份较低交割价格看跌期权,卖出两份中间交割价格看跌期权和买入一份较高交割价格看跌期权,三个价格成等差数列,且到期日相同).

The payoff is max(0,KLb-)+2min(0,-KMb)+max(0,KHb-).

def putforwardbutterflyspreads(KLb,KMb,KHb,S):if KLb-S>0:lowputpayoff=KLb-Selse:lowputpayoff=0if S-KMb<0:middleputpayoff=2*(S-KMb)else:middleputpayoff=0if KHb-S>0:highputpayoff=KHb-Selse:highputpayoff=0payoff=lowputpayoff+middleputpayoff+highputpayoffreturn payoff
putforwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putforwardbutterflyspreadspayoff[i]=putforwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,putforwardbutterflyspreadspayoff)
plt.title('put forward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.7.2backward butterfly spreads(反向蝶式差价组合)(买中间,卖高低)

2.7.2.1call backward butterfly spreads(看涨反向蝶式差价组合)

The portfolio is that sell one call option with low strike price KLb, buy two call options with middle strike price KMb and sell one call option with high strike price KHb, where KHb-KMb=KMb-KLb, and they have same expiration date(卖出一份较低交割价格看涨期权,买入两份中间交割价格看涨期权和卖出一份较高交割价格看涨期权,三个价格成等差数列,且到期日相同).

The payoff is min(0,KLb-)+2max(0,-KMb)+min(0,KHb-).

def callbackwardbutterflyspreads(KLb,KMb,KHb,S):if KLb-S<0:lowcallpayoff=KLb-Selse:lowcallpayoff=0if S-KMb>0:middlecallpayoff=2*(S-KMb)else:middlecallpayoff=0if KHb-S<0:highcallpayoff=KHb-Selse:highcallpayoff=0payoff=lowcallpayoff+middlecallpayoff+highcallpayoffreturn payoff
callbackwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callbackwardbutterflyspreadspayoff[i]=callbackwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,callbackwardbutterflyspreadspayoff)
plt.title('call backward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

2.7.2.2put backward butterfly spreads(看跌反向蝶式差价组合)

The portfolio is that sell one put option with low strike price KLb, buy two put options with middle strike price KMb and sell one put option with high strike price KHb, where KHb-KMb=KMb-KLb, and they have same expiration date(卖出一份较低交割价格看跌期权,买入两份中间交割价格看跌期权和卖出一份较高交割价格看跌期权,三个价格成等差数列,且到期日相同).

The payoff is min(0,-KLb)+2max(0,KMb-)+min(0,-KHb).

def putbackwardbutterflyspreads(KLb,KMb,KHb,S):if S-KLb<0:lowcallpayoff=S-KLbelse:lowcallpayoff=0if KMb-S>0:middlecallpayoff=2*(KMb-S)else:middlecallpayoff=0if S-KHb<0:highcallpayoff=S-KHbelse:highcallpayoff=0payoff=lowcallpayoff+middlecallpayoff+highcallpayoffreturn payoff
putbackwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putbackwardbutterflyspreadspayoff[i]=putbackwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,putbackwardbutterflyspreadspayoff)
plt.title('put backward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

完整代码:

import matplotlib.pyplot as plt
import numpy as np
K1=40
St=np.linspace(0,80,81)
def buycall(K,S):if S-K>0:payoff=S-Kelse:payoff=0return payoff
buycallpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):buycallpayoff[i]=buycall(K1,St[i])
plt.plot(St,buycallpayoff)
plt.title('buy call')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('payoff')
plt.show()
def sellcall(K,S):if K-S<0:payoff=K-Selse:payoff=0return payoff
sellcallpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):sellcallpayoff[i]=sellcall(K1,St[i])
plt.plot(St,sellcallpayoff)
plt.title('sell call')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('payoff')
plt.show()
def buyput(K,S):if K-S>0:payoff=K-Selse:payoff=0return payoff
buyputpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):buyputpayoff[i]=buyput(K1,St[i])
plt.plot(St,buyputpayoff)
plt.title('buy put')
plt.xlabel('spot price'+'($S_{t}$)')
plt.ylabel('payoff')
plt.show()
def sellput(K,S):if S-K<0:payoff=S-Kelse:payoff=0return payoff
sellputpayoff=np.linspace(0,1,len(St))
for i in range(len(St)):sellputpayoff[i]=sellput(K1,St[i])
plt.plot(St,sellputpayoff)
plt.title('sell put')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def bottomstraddle(K,S):payoff=abs(S-K)return payoff
bottomstraddlepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstraddlepayoff[i]=bottomstraddle(K1,St[i])
plt.plot(St,bottomstraddlepayoff)
plt.title('bottom (buy) straddle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def topstraddle(K,S):payoff=-abs(S-K)return payoff
topstraddlepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstraddlepayoff[i]=topstraddle(K1,St[i])
plt.plot(St,topstraddlepayoff)
plt.title('top (sell) straddle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def bottomstrip(K,S):if K-S>0:payoff=abs(S-K)+K-Selse:payoff=abs(S-K)return payoff
bottomstrippayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstrippayoff[i]=bottomstrip(K1,St[i])
plt.plot(St,bottomstrippayoff)
plt.title('bottom (buy) strip')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def topstrip(K,S):if S-K<0:payoff=-abs(S-K)+S-Kelse:payoff=-abs(S-K)return payoff
topstrippayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstrippayoff[i]=topstrip(K1,St[i])
plt.plot(St,topstrippayoff)
plt.title('top (sell) strip')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def bottomstrap(K,S):if S-K>0:payoff=abs(S-K)+S-Kelse:payoff=abs(S-K)return payoff
bottomstrappayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstrappayoff[i]=bottomstrap(K1,St[i])
plt.plot(St,bottomstrappayoff)
plt.title('bottom (buy) strap')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
KC=50
KP=30
def bottomstrangle(KC,KP,S):if S-KC>0:callpayoff=S-KCelse:callpayoff=0if KP-S>0:putpayoff=KP-Selse:putpayoff=0payoff=callpayoff+putpayoffreturn payoff
bottomstranglepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):bottomstranglepayoff[i]=bottomstrangle(KC,KP,St[i])
plt.plot(St,bottomstranglepayoff)
plt.title('bottom (buy) strangle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def topstrangle(KC,KP,S):if KC-S<0:callpayoff=KC-Selse:callpayoff=0if S-KP<0:putpayoff=S-KPelse:putpayoff=0payoff=callpayoff+putpayoffreturn payoff
topstranglepayoff=np.linspace(0,1,len(St))
for i in range(len(St)):topstranglepayoff[i]=topstrangle(KC,KP,St[i])
plt.plot(St,topstranglepayoff)
plt.title('top (sell) strangle')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
KCL=30
KCH=50
def callbullspreads(KCL,KCH,S):if S-KCL>0:lowcallpayoff=S-KCLelse:lowcallpayoff=0if KCH-S<0:highcallpayoff=KCH-Selse:highcallpayoff=0payoff=lowcallpayoff+highcallpayoffreturn payoff
callbullspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callbullspreadspayoff[i]=callbullspreads(KCL,KCH,St[i])
plt.plot(St,callbullspreadspayoff)
plt.title('call bull spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
KPL=30
KPH=50
def putbullspreads(KPL,KPH,S):if KPL-S>0:lowputpayoff=KPL-Selse:lowputpayoff=0if S-KPH<0:highputpayoff=S-KPHelse:highputpayoff=0payoff=lowputpayoff+highputpayoffreturn payoff
putbullspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putbullspreadspayoff[i]=putbullspreads(KPL,KPH,St[i])
plt.plot(St,putbullspreadspayoff)
plt.title('put bull spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
KLb=30
KHb=50
def callbearspreads(KLb,KHb,S):if KLb-S<0:lowcallpayoff=KLb-Selse:lowcallpayoff=0if S-KHb>0:highcallpayoff=S-KHbelse:highcallpayoff=0payoff=lowcallpayoff+highcallpayoffreturn payoff
callbearspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callbearspreadspayoff[i]=callbearspreads(KLb,KHb,St[i])
plt.plot(St,callbearspreadspayoff)
plt.title('call bear spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
KPLB=30
KPHB=50
def putbearspreads(KPLB,KPHB,S):if S-KPLB<0:lowputpayoff=S-KPLBelse:lowputpayoff=0if KPHB-S>0:highputpayoff=KPHB-Selse:highputpayoff=0payoff=lowputpayoff+highputpayoffreturn payoff
putbearspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putbearspreadspayoff[i]=putbearspreads(KPLB,KPHB,St[i])
plt.plot(St,putbearspreadspayoff)
plt.title('put bear spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
KLb=20
KMb=40
KHb=60
def callforwardbutterflyspreads(KLb,KMb,KHb,S):if S-KLb>0:lowcallpayoff=S-KLbelse:lowcallpayoff=0if KMb-S<0:middlecallpayoff=2*(KMb-S)else:middlecallpayoff=0if S-KHb>0:highcallpayoff=S-KHbelse:highcallpayoff=0payoff=lowcallpayoff+middlecallpayoff+highcallpayoffreturn payoff
callforwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callforwardbutterflyspreadspayoff[i]=callforwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,callforwardbutterflyspreadspayoff)
plt.title('call forward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def putforwardbutterflyspreads(KLb,KMb,KHb,S):if KLb-S>0:lowputpayoff=KLb-Selse:lowputpayoff=0if S-KMb<0:middleputpayoff=2*(S-KMb)else:middleputpayoff=0if KHb-S>0:highputpayoff=KHb-Selse:highputpayoff=0payoff=lowputpayoff+middleputpayoff+highputpayoffreturn payoff
putforwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putforwardbutterflyspreadspayoff[i]=putforwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,putforwardbutterflyspreadspayoff)
plt.title('put forward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def callbackwardbutterflyspreads(KLb,KMb,KHb,S):if KLb-S<0:lowcallpayoff=KLb-Selse:lowcallpayoff=0if S-KMb>0:middlecallpayoff=2*(S-KMb)else:middlecallpayoff=0if KHb-S<0:highcallpayoff=KHb-Selse:highcallpayoff=0payoff=lowcallpayoff+middlecallpayoff+highcallpayoffreturn payoff
callbackwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):callbackwardbutterflyspreadspayoff[i]=callbackwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,callbackwardbutterflyspreadspayoff)
plt.title('call backward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()
def putbackwardbutterflyspreads(KLb,KMb,KHb,S):if S-KLb<0:lowcallpayoff=S-KLbelse:lowcallpayoff=0if KMb-S>0:middlecallpayoff=2*(KMb-S)else:middlecallpayoff=0if S-KHb<0:highcallpayoff=S-KHbelse:highcallpayoff=0payoff=lowcallpayoff+middlecallpayoff+highcallpayoffreturn payoff
putbackwardbutterflyspreadspayoff=np.linspace(0,1,len(St))
for i in range(len(St)):putbackwardbutterflyspreadspayoff[i]=putbackwardbutterflyspreads(KLb,KMb,KHb,St[i])
plt.plot(St,putbackwardbutterflyspreadspayoff)
plt.title('put backward butterfly spreads')
plt.xlabel('spot price'+'($S_{T}$)')
plt.ylabel('payoff')
plt.show()

绘制相同到期日欧式期权组合收益图(python)相关推荐

  1. 【投资】如何绘制期权收益图

    excel python 其实画期权最主要的是数据,既可以伪造,也可以用真实的,如果画出来的图和脑海里应该呈现的不一样,要不画错了,要不就代表当时具有很大的套利空间. 因此,我们接下来会通过两种工具分 ...

  2. R语言ggplot2可视化:使用patchwork包绘制ggplot2可视化结果的组合图(自定义图像的嵌入关系)、使用patchwork包绘制ggplot2可视化结果的组合图(自定义组合形式)

    R语言ggplot2可视化:使用patchwork包绘制ggplot2可视化结果的组合图(自定义图像的嵌入关系).使用patchwork包绘制ggplot2可视化结果的组合图(自定义组合形式) 目录

  3. (三十四)期权的盈亏图、平价公式和BS公式

    期权到期时的盈亏图   欧式看涨期权的盈亏为max(ST-K,0),若考虑期权费就是max(ST-K-c,-c):欧式看跌期权的盈亏为max(K-ST,0),若考虑期权费就是max(K-ST-p,-p ...

  4. python 期权量化交易_两种欧式期权的四种支付方式以代码实现

    不说废话了,直接上干货. 出两个问题,大家检验一下自己是否是"伪金融人". 顺便也说一个金融趣闻. 一.检验你是否是"金融人"的第一个考验 你能一眼看出来下图是 ...

  5. 欧式期权matlab编码蒙特卡罗方法,基于MATLAB的金融工程方法与实践第七章 基于蒙特卡洛方法的期权定价.ppt...

    蒙特卡洛的优缺点 MCMC方法的优点 分布假设更一般,描述市场因素可能变化的统计分布既可以是正态.对数正态的,也可以是带跳的扩散分布.t分布等. 随机生成风险因素的各种各样的未来假想情景,可在模型中融 ...

  6. 美式期权、欧式期权比较分析——定价与风险管理

    一.美式期权.欧式期权定义 期权是一种金融合约,这一合约赋予其持有人在约定的时间以约定的价格买入或卖出标的资产的权利.期权的执行方式主要有美式和欧式.美式期权指期权的买方在合约到期日之前任意交易日都可 ...

  7. 【金融统计】R语言平滑指数和模型计算等权重组合收益日波动率

    [金融统计学] 例:分别使用指数平滑和GARCH模型,计算作业1中6只个股等权重组合收益的日波动率,并将两种方法得到的波动率绘制在同一个图上,并与上证380的波动率进行比较. ​ 本文用rstudio ...

  8. Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1.数据准备 1.1 数据来源 2.曲线展示 2.1 MPAndroidChart获取 2.2 数据对象获取 2.3 数据展示 3.曲线完善 3.1 图表背景. ...

  9. 什么是欧式期权?什么是美式期权?

    期权合约根据行权时间的不同可以分为欧式期权和美式期权.欧式期权,是指买方只能在到期日行权的期权,如国内的50ETF期权和铜期权:美式期权,是指买方在到期日当天及到期前任何一天都可以行权的期权,如国内豆 ...

  10. 期权讲堂:欧式期权和美式期权

    欧式期权和美式期权与期权的上市地点没有关系,欧式和美式代表的是期权的两种不同的行权方式. 我们已经知道,期权是一种选择权,赋予买方在约定的期限按照确定的标的价格,买入或者卖出一定数量资产的权利. 如果 ...

最新文章

  1. 小数加分数怎样计算讲解_2020人教版三年级下册数学知识点汇总带视频讲解,让孩子在学习!...
  2. linux下实现dns服务器,实现Linux操作系统下DNS服务器的搭建
  3. java consumer.poll_kafka消费者API consumer.poll()没有错误,没有异常,只是阻止
  4. 生成TFrecord
  5. 安装Exchange 2010 时报错UserMailbox 必须强制使用 Database
  6. LeetCode003-无重复字符的最长子串(Length of longest substring)-Rust语言实现
  7. 如何测试sql语句性能,提高执行效率
  8. 伪元素写竖线_欧洲杯 | 让我们做个时髦伪球迷
  9. LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35
  10. 第 7 章 Neutron - 070 - Neutron 如何支持多种 network provider
  11. 腾讯组织了一个联盟,但无法阻止字节跳动拿走一半游戏广告
  12. 计算机内无法使用搜狗,电脑搜狗输入法不能用怎么办
  13. 深入解析protobuf 2-自定义protoc 插件
  14. java markdown转word_Markdown 格式如何转换成 Word?
  15. 服务器所属文件变成nobody,NFS(expirtfs命令,NFS客户端创建新文件所属组和所属主都为nobody)(示例代码)...
  16. 解决端口被占用问题,安装MySQL出现端口被占用
  17. YouTube音乐排行榜:全球总榜周榜(2022年7月16日)
  18. 每日10行代码156:Python实现简单的文件加密解密
  19. 工具管理(资源管理)
  20. 用JS实现放大镜特效

热门文章

  1. 前端cookie 放到请求头_ajax请求头cookie问题
  2. 朱有鹏嵌入式linux网盘,朱有鹏嵌入式单片机免费课程
  3. cov matlab,方差var、协方差cov、协方差矩阵(浅谈)-(二)_函数var
  4. 网线水晶头接法图解8根线芯顺序排序图示
  5. matlab 周期性边界,PID控制器阶跃响应的分析(基于MATLAB仿真的实验):
  6. vivo NEX的Usb调试模式在哪里,打开vivo NEXUsb调试模式的教程
  7. win10熄屏时间不对_Windows10下显示时间不正确的原因及解决技巧
  8. adobe flash player android 4.4,adobe flash player最新版
  9. Matplotlib 应用
  10. app邀请分享免填邀请码解决方案-邀请机制的要点、形式