-2

これは私がしばらくの間取り組んできたプログラムで、トラブルシューティングのヒントはすでにここにあります。

それは問題なく動作し、さまざまなグラフがさまざまな入力でどのように変化するかを直感的に確認できるようになっているため、速度は主な関心事ではありません。しかし、線だけでなく、グラフを完全にREDRAWにするにはどうすればよいですか(古い軸の上に各軸をクリアせずに再プロットするため、積み重なってすぐに行き詰まります)。

皆さんありがとう!

#!/usr/apps/Python/bin/python
import matplotlib, sys
matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from Tkinter import *
import math
from matplotlib import pylab
import scipy
from scipy.stats import norm


master = Tk()
master.title("DePaul University Interactive Options Graphs")

pricePlot = Figure(figsize=(4,3), dpi=100, frameon=False)
a = pricePlot.add_subplot(111)
a.set_title('The Greeks')
priceDataPlot = FigureCanvasTkAgg(pricePlot, master=master)
priceDataPlot.get_tk_widget().grid(column=1, columnspan=2, row=1, rowspan=2)

vegaPlot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
b = vegaPlot.add_subplot(1,1,1)
b.set_title('Vega')
vegaDataPlot = FigureCanvasTkAgg(vegaPlot, master=master)
vegaDataPlot.get_tk_widget().grid(row=2)

deltaPlot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
c = deltaPlot.add_subplot(111)
c.set_title('Delta')
deltaDataPlot = FigureCanvasTkAgg(deltaPlot, master=master)
deltaDataPlot.get_tk_widget().grid(row=0,rowspan=2)

gammaPlot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
d = gammaPlot.add_subplot(111)
d.set_title('Gamma')
gammaDataPlot = FigureCanvasTkAgg(gammaPlot, master=master)
gammaDataPlot.get_tk_widget().grid(column=3,row=2)

rhoPlot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
e = rhoPlot.add_subplot(111)
e.set_title('Rho')
rhoDataPlot = FigureCanvasTkAgg(rhoPlot, master=master)
rhoDataPlot.get_tk_widget().grid(column=3,row=3)

thetaPlot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
f = thetaPlot.add_subplot(111)
f.set_title('Theta')
thetaDataPlot = FigureCanvasTkAgg(thetaPlot, master=master)
thetaDataPlot.get_tk_widget().grid(column=3,row=0,rowspan=2)

a3Plot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
g = a3Plot.add_subplot(111)
g.set_title('Price')
a3DataPlot = FigureCanvasTkAgg(a3Plot, master=master)
a3DataPlot.get_tk_widget().grid(row=3)


CallPutFlag='c'

def changePut():
    CallPutFlag='p'
    print CallPutFlag

def changeCall():
    CallPutFlag='c'
    print CallPutFlag


def main():

    T=250                                 # This will 
    timeSpread = range(T-200,T+200,20)    # all be user
                                          # inputted
                                          # values through
                                          # Tkinter GUI
                                          # 
                                          # JV 7/27/2012

    r=float(interestRate.get())
    S=float(stockPrice.get())
    K=float(strikePrice.get())
    v=float(volatility.get())




    def BlackScholes(t):

            d1 = (math.log(S/K)+(r+v*v/2.)*(float(t)/365))/(v*math.sqrt((float(t)/365)))
            d2 = d1-v*math.sqrt((float(t)/365))

            if CallPutFlag=='c':

                    return S*scipy.stats.norm.cdf(d1)-K*math.exp(-r*float(t))*scipy.stats.norm.cdf(d2)

            else:

                    return K*math.exp(-r*float(t))*scipy.stats.norm.cdf(-d2)-S*scipy.stats.norm.cdf(-d1)


    def delta(t):

            d1 = (math.log(S/K)+(r+v*v/2.)*(float(t)/365))/(v*math.sqrt((float(t)/365)))
            d2 = d1-v*math.sqrt((float(t)/365))

            if CallPutFlag=='c':
                    callDelta = scipy.stats.norm.cdf(d1)

                    return callDelta

            else:
                    putDelta = -scipy.stats.norm.cdf(-d1)

                    return putDelta

    def gamma(t):

            d1 = (math.log(S/K)+(r+v*v/2.)*(float(t)/365))/(v*math.sqrt((float(t)/365)))
            d2 = d1-v*math.sqrt((float(t)/365))
            gamma = scipy.stats.norm.pdf(d1)/(S*v*math.sqrt(float(t)))

            return gamma

    def rho(t):
            d1 = (math.log(S/K)+(r+v*v/2.)*(float(t)/365))/(v*math.sqrt((float(t)/365)))
            d2 = d1-v*math.sqrt((float(t)/365))

            if CallPutFlag=='c':
                    callRho = (K*t*scipy.stats.norm.cdf(d2)/100)*math.e**-(r*t)

                    return callRho

            else:
                    putRho = (-K*t*scipy.stats.norm.cdf(-d2)/100)*math.e**-(r*t)

                    return putRho

    def vega(t):
            d1 = (math.log(S/K)+(r+v*v/2.)*(float(t)/365))/(v*math.sqrt((float(t)/365)))

            return S*scipy.stats.norm.pdf(d1)*math.sqrt(float(t))/100

    def theta(t):

        d1 = (math.log(S/K)+(r+v*v/2.)*(float(t)/365))/(v*math.sqrt((float(t)/365)))
        d2 = d1-v*math.sqrt((float(t)/365))
        b = math.e**-(r*t)

        if CallPutFlag=='c':

                callTheta = -S*scipy.stats.norm.pdf(d1)*v/(2*math.sqrt(float(t))-r*K*b*scipy.stats.norm.cdf(d2))

                return callTheta

        else:
                putTheta = -S*scipy.stats.norm.pdf(d1)*v/(2*math.sqrt(float(t))+r*K*b*scipy.stats.norm.cdf(-d2))

                return putTheta


    tprices = [BlackScholes(i) for i in timeSpread]
    tdeltas = [delta(i) for i in timeSpread]
    tgammas = [gamma(i) for i in timeSpread]
    trhos = [rho(i) for i in timeSpread]
    tvegas = [vega(i) for i in timeSpread]
    tthetas = [theta(i) for i in timeSpread]

    a.cla()
    a.plot(timeSpread,tdeltas,'g-')
    a.plot(timeSpread,tgammas,'b-')
    a.plot(timeSpread,trhos,'m-')
    a.plot(timeSpread,tvegas,'r-')
    a.plot(timeSpread,tthetas,'c-')
    priceDataPlot.show()

    line, = b.plot(timeSpread,tvegas,'r-')
    vegaDataPlot.show()
    line.remove()

    line, = c.plot(timeSpread,tdeltas,'g-')
    deltaDataPlot.show()
    line.remove()

    line, = d.plot(timeSpread,tgammas,'b-')
    gammaDataPlot.show()
    line.remove()

    line, = e.plot(timeSpread,trhos,'m-')
    rhoDataPlot.show()
    line.remove()

    line, = f.plot(timeSpread,tthetas,'c-')
    thetaDataPlot.show()
    line.remove()

    line, = g.plot(timeSpread,tprices,'k-')
    a3DataPlot.show()
    line.remove()


##photo=PhotoImage(file='/Users/jaredvacanti/Desktop/Depaul.gif')
##Label(master, image=photo).grid()

w = Label(master, text="DePaul University Department of Finance \nInteractive Options Graphs")
w.grid(row=0,column=1,columnspan=2,pady=100)

r1 = Radiobutton(master, variable=CallPutFlag, value='c', text="Call",command=lambda root=master:main())
r2 = Radiobutton(master, variable=CallPutFlag, value='p', text="Put",command=lambda root=master:main())
r1.grid(row=0,column=1,columnspan=2,pady=50, sticky=N)
r2.grid(row=0,column=1,columnspan=1,pady=50, sticky=N)


interestRate = Scale(master, from_=0, to=5,orient=HORIZONTAL,label='Interest Rate', command=lambda root=master:main())
interestRate.set(1)
interestRate.grid(row=3,column=2)
stockPrice = Scale(master, from_=0, to=100,orient=HORIZONTAL,label='Stock Price', command=lambda root=master:main())
stockPrice.set(10.0)
stockPrice.grid(row=3,column=1,pady=10)
strikePrice = Scale(master, from_=0, to=100,orient=HORIZONTAL,label='Strike Price', command=lambda root=master:main())
strikePrice.set (11.0)
strikePrice.grid(row=3,rowspan=2,column=1,sticky=N)
volatility = Scale(master, from_=0, to=10,orient=HORIZONTAL,label='Volatility', command=lambda root=master:main())
volatility.set(1)
volatility.grid(row=3,rowspan=2,column=2,sticky=N)


def quit(master):
    master.destroy()

Button(master, borderwidth=0, bg='gray', text="Quit", command=lambda root=master:quit(master)).grid(row=3,rowspan=2,column=2,sticky=S,pady=30)
Button(master, borderwidth=0, bg='gray', text="Calculate").grid(row=3,rowspan=2, column=1,columnspan=1,sticky=S,pady=30)


main()
master.mainloop()
4

1 に答える 1

1

frameon=FalseFigure オブジェクトを作成するときに削除します。

Figure(figsize=(4,3), dpi=100)

Figure の背景色を Tk ウィンドウと同じにしたい場合は、引数で設定できますfacecolor:

Figure(figsize=(4,3), dpi=100, facecolor=TK_BACKGROUND_COLOR)

私のシステムでは:

TK_BACKGROUND_COLOR = (212.0/256,208.0/256,200.0/256)
于 2012-09-07T06:30:47.617 に答える