技術メモ

役に立てる技術的な何か、時々自分用の覚書。幅広く色々なことに興味があります。

仮想通貨を担保に法定通貨をローンするサービス【BlockFi】

BlockFiという会社のサービス
blockfi.com
仮想通貨を担保にすることで信用リスクを抑え比較的低金利法定通貨を借りることができる。
クレジット情報を詳細に聞かれることはないので審査も早い(どれくらい審査があるかはわからない)


イーサリアムのようにブロックチェーンに契約情報を含められるコインもあるのでなにか面白い活用法がありそう。

BlockFiはリクルートからも出資を受けたほかウォール街の企業からも出資を受けている模様。
jp.cointelegraph.com
リクルート、米ブロックファイへ出資—仮想通貨を担保とした法定通貨貸付サービスを支援【フィスコ・ビットコインニュース】[FISCO] | 為替ニュース | Klug FX(クルークFX)

ブラックショールズモデルでグラフを描く

以前書いたブラックショールズモデルの関数を使って、権利行使までの時間と行使価格を動かしてグラフを描いてみようと思う。
swdrsker.hatenablog.com
権利行使までの時間が長くなるほど緩やかな曲線になるのを見たい。

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn
seaborn.set_style("whitegrid")

rf_rate = 0.005 #risk free rate (0.5%)
sigma = 0.12 #volatility (12%)
price = 100 #present value

def bs_model(S,x,r,sigma,T):
    d1 = (np.log(S/x) + (r + 0.5 * sigma ** 2)*T)/(sigma*pow(T, 1/2))
    d2 = (np.log(S/x) + (r - 0.5 * sigma ** 2)*T)/(sigma*pow(T, 1/2))
    call = S * stats.norm.cdf(d1) - x * np.exp(-r*T) * stats.norm.cdf(d2)
    put  = x * np.exp(-r*T) * stats.norm.cdf(-d2) - S * stats.norm.cdf(-d1)
    return call,put

リスクフリーレートは0.5%, ボラティリティは12%, 現在価格を100とした。

x = np.arange(75,125)
plt.figure()
for t in [0.01,0.5, 1,2,3]:
    bs = lambda x: bs_model(price,x , rf_rate, sigma, t)[1]
    plt.plot(x, np.vectorize(bs)(x), label="t: %1.1f"%t)
plt.xlabel("Strike Price")
plt.ylabel("Option Premium")
plt.title("Put option (price:100)")
plt.legend()

f:id:swdrsker:20180916222458p:plain

x = np.arange(75,125)
plt.figure()
for t in [0.01,0.5, 1,2,3]:
    bs = lambda x: bs_model(price,x , rf_rate, sigma, t)[0]
    plt.plot(x, np.vectorize(bs)(x), label="t: %1.1f"%t)
plt.xlabel("Strike Price")
plt.ylabel("Option Premium")
plt.title("Call option (price:100)")
plt.legend()

f:id:swdrsker:20180916222604p:plain


行使価格が高いほど、Put option(売る権利)の価値が高くなる。
行使価格が低いほど、Call option(買う権利)の価値が高くなる。
権利行使までの時間が長いほど滑らかな曲線になることがわかる。

jupyterでtornadoがないと言われた時のメモ

新しいパッケージをインストールした後、いつものように

jupyter lab

とjupyterを立ち上げようとしたところ

$ jupyter lab
Traceback (most recent call last):
  File "c:\tools\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\tools\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\tools\Anaconda3\Scripts\jupyter-lab.EXE\__main__.py", line 5, in <module>
  File "c:\tools\anaconda3\lib\site-packages\jupyterlab\labapp.py", line 7, in <module>
    from notebook.notebookapp import NotebookApp, aliases, flags
  File "c:\tools\anaconda3\lib\site-packages\notebook\__init__.py", line 25, in <module>
    from .nbextensions import install_nbextension
  File "c:\tools\anaconda3\lib\site-packages\notebook\nbextensions.py", line 610, in <module>
    from .extensions import (
  File "c:\tools\anaconda3\lib\site-packages\notebook\extensions.py", line 8, in <module>
    from tornado.log import LogFormatter
ModuleNotFoundError: No module named 'tornado'

というエラーが出た。 tornadaがないのかなと思って、

pip install tornado

としたがすでに存在していると言われた。 しかし、

pip install tornado --user --ignore-installed

として強制的にインストールしなおすとうまくいった。