読者です 読者をやめる 読者になる 読者になる

辞書包括表記

 少し前に2重の内包というのにふれた。ここでeffective pythonで知ったと書いていたけど、今日python3入門を見てたらそこにも書いていた。つまりpython3入門は2回読んだはずだったのに知らなかったということだ。

 本日取り上げるのは辞書内包表記というものです。ivolatというオプションのライブラリを採り上げたときに、for でループさせて色々な原資産価格のパラメーターを計算させ、チャートにするということをやっていました。これが辞書包括表記でやってしまいます。

 以前のやり方は

import ivolat3 as iv

s = 19000
k = 18000   # 権利行使価格
r = 0.001  # 金利 
q = 0   # 配当
t = 30/365 # 残存日数
sigma = 0.2 # ボラティリティ

put = {}
for i in range(15000,23000):
    p = iv.prem_put(i, k, r, q, t, sigma)
    put[i] = p

と計算して辞書に収めるのに4行かかっている。でも辞書包括表記を使うと1行で終わる。

import ivolat3 as iv

s = 19000
k = 18000   # 権利行使価格
r = 0.001  # 金利 
q = 0   # 配当
t = 30/365 # 残存日数
sigma = 0.2 # ボラティリティ

put = {i: iv.prem_put(i, k, r, q, t, sigma) for i in range(15000, 23000)}

まぁ言ってしまうとfor使ってるやんってことになるけど、短くなったということで私は喜ばしい。というか、週末はリナックスが入らなかったり、rippleの動きを眺めたりであまり生産的ではなかった。時間の有効活用って難しい。時間に余裕があると適当に過ごしてしまう。デイトレ脳がきつすぎて、値動きを見るとずっと見てしまう癖をなくしたいところ。その割に勝てないし。

追記 プレミアムとデルタの数値を取る場合

import ivolat3 as iv

s = 19000
k = 18000   # 権利行使価格
r = 0.001  # 金利 
q = 0   # 配当
t = 30/365 # 残存日数
sigma = 0.2 # ボラティリティ

put = {i: [iv.prem_put(i, k, r, q, t, sigma), iv.delta_put(i, k, r, q, t, sigma)] for i in range(15000, 23000)}

という感じでリストにしたらいけます。あと、githubでipywidgetsは動かないようです。お師匠さんに聞いたところ、githubはプログラムを置くところであって作動させる場所ではないようです。