forward和option的python实现
Forward
long a forward
#long forward
import matplotlib.pyplot as plt
def long_for(fp,*sp):
payoff=[]
for i in sp:
pi=i-fp
payoff.append(pi)
plt.plot(sp,payoff)
plt.xlabel('Spot Price')
plt.ylabel('Payoff')
plt.show()
return payoff
long_for(50,40,45,50,55,60)
注意不要把plt.show()放到return后面,这样的话payoff和图都出不来。
Option
long a call
def long_call(op,*st,premium=0):
payoff=[]
profit=[]
for i in st:
pi=max(0,i-op)
payoff.append(pi)
profit.append(pi-premium)
plt.plot(st,payoff)
plt.xlabel('Spot Price')
plt.ylabel('Payoff')
plt.show()
return payoff,profit
long_call(50,40,45,50,55,60,premium=10)
经过多次尝试,当函数里同时包括多个参数和默认参数时,要把默认参数放到多个参数的后面(如果顺序反了程序会认为有多个默认参数),调用时一定要标注上默认参数的名称(不标注的话会把默认参数的值传到多个参数里)。
long a put
def long_put(op,*st,premium=0,r=0):
payoff=[]
profit=[]
for i in st:
pi=max(0,op-i)
payoff.append(pi)
profit.append(pi-premium ** ((1+r)))
plt.plot(st,payoff,label='payoff')
plt.plot(st,profit,label='profit')
plt.xlabel('Spot Price')
plt.legend()
plt.show()
return payoff,profit
long_put(35,25,30,35,40,45,50,premium=1.53,r=0.08)
公式方面补充上了premium到期日的价值,画图方面补充上了两条折线图。