作者: ck.eth
編集者: リリア
双曲分布 [1] は、もともと砂嵐の変動 [2] (砂漠における砂のダイナミクス) をシミュレートするために開発されましたが、そのパラメーターの柔軟性により金融資産収益のモデル化に応用できます [3]。
左: 対数縦座標プロットで統計分布を見ると、その形状をよりよく理解できます。双曲線分布は双曲線に似た形状を示しますが、破線のガウス分布は e^-x²/2 項の存在により放物線として見ることができます。右: 対数対数プロットで分布の裾を確認すると、分布の特性をよりよく理解できます。べき乗則分布は、対数対対数プロットで減衰傾向を示しません。分布を組み合わせ、重みパラメータを使用することで、異なる分布をブレンドできます。
デジタル資産の価格動向
流動性プロバイダー (LP) にとって、資産の価格動向を理解することは非常に役立ちます。最も古いデジタル資産であるビットコイン (BTC) の履歴データを、2015 年以降の 3,091 日の収益を使用した対数縦軸プロットの形式で見ると、いくつかの異常値を除いて、一般化された双曲線分布が歴史的に適合していることがわかります。毎日がよく戻ります。
当てはめの異常はたまたま右端と左端の外れ値であり、両対数プロットで観察できます。この図では、マイナスのリターンの裾野が赤で表され、プラスの外れ値リターンが青で表されていることがわかります。
尾部は似ていますが、右側の外れ値には多少の不一致があります。ヒストグラムを平滑化するために、カーネル密度推定 (KDE) メソッドを使用しました。
2015 年 1 月 1 日以来、ビットコイン (BTC) の毎日のリターンの左右の裾、特に右の裾は非対称を示しています。
これは、一般化双曲線と非対称べき乗則を組み合わせることで、ビットコイン価格のダイナミクスを説明できることを意味します。例としてビットコインを選んだことに注意することが重要です。これは、ビットコインがすべてのデジタル資産の中で最も古い時系列であり、最も変動性が低いためです。これは、他のデジタル資産の流動性プロバイダー (LP) がより変動的な動作をすることを意味します。
価格の動的モデリング
この波の挙動をシミュレートするために混合できる統計分布は数十あります。たとえば、従来の金融における一般的なアプローチは、幾何学的なブラウン運動 (対数正規分布) を使用し、それをローイ過程 (ポアソン分布) と組み合わせて価格の高騰を考慮することです。
Erik Bardoux と Antonis Papapantoleon がレベレ プロセスに関する講義で視覚化したシミュレーション パス。
ユーザーがこれらの分布を探索し、リーマン積分を介して Uniswap 上でこれらの分布の LP 位置を複製する方法を支援するために、Desmos 上に 50 を超える統計分布のライブラリを作成しました。
統計分布ライブラリの Desmos リンク: https://www.desmos.com/calculator/4ey6hbevzf
統計分布ライブラリの Desmos リンク: https://www.desmos.com/calculator/4ey6hbevzf
Desmos の興味深い機能は、両対数プロットに切り替える機能で、各統計分布の裾の特性がどのように変化するかを確認できます。
データにどの分布が最適であるかを比較したい場合は、コルモゴロフ・スミルノフ検定を使用して、累積分布関数を経験的な累積ヒストグラム データと比較できます。ただし、考えられる最悪の分布を仮定するだけの以下の簡単なアプローチも使用できます。
未来について何も分からなかったらどうしますか?そうですね、価格空間で考えられる最悪の分布がどのようなものであるかを考えることができます。これは無限に伸びる裾を持つべき乗則です。そのような分布の 1 つはコーシー分布です (価格空間では、対数コーシー分布と同等です)。
コーシー分布は大数の法則には従わず、独自の意志を持っています。コーシー分布の特徴については、リンク https://en.wikipedia.org/wiki/Cauchy_distribution#/media/File:Mean_estimator_consistency.gif を参照してください。
コーシー分布の特性の 1 つは、大数の法則に従わないことです。過去 30 日間の平均を計算し、パターンがあると考えるかもしれませんが、実際には騙されている可能性があります。興味深い例は DOGE/ETH 取引ペアの平均ですが、流動性の欠如によりこのような動作を示す可能性があります。
ドージコインとイーサリアムは 7 年以上前から存在していますが、取引ペアのホッピング プロセスには独自の特徴があり、統計的近似手法を適用することが困難です。
ドージコインとイーサリアムは 7 年以上前から存在していますが、取引ペアのホッピング プロセスには独自の特徴があり、統計的近似手法を適用することが困難です。
右側の loglog ヒストグラムでは外れ値が増加しています。 loglog プロットで外れ値が大きくなる分布が対数コーシー分布であることを学びました。
価格空間の対数正規分布と比較してコーシー分布がどのように見えるかを確認できます。
左: 対数正規分布の対数対数グラフは放物線であり、コーシーべき乗則の線形テールが赤で表され、黒の破線が対数コーシー分布を表しています。右: 同じ分布を価格空間で表現したもので、[ 0、巨大)。
log-Cauchy 分布は、Uniswap v2 ポジションの全範囲ほど悪くはありませんが、2 番目に悪いケースです。パート1と2で資本効率の最適化について学んだことに基づいて、下限を 80 ~ 90% 付近に設定すると、価格が下限に近づくと分布が拡大し始めるため、資本効率を向上させるのに役立ちます。ゼロになるまで流動性を提供します。
現在の価格 1 から始めて、80 ~ 90% の下限を設定して範囲を制限する開始点として使用できますが、そのようなダイナミクスに基づいて資産を投資/売買することはお勧めしません。これは財務上のアドバイスではありません。ベストプラクティスは、資産についてさらに詳しく知ることです。
複雑な系におけるべき乗則分布について
しかし、コーシー分布のようなべき乗則分布は時間の経過とともに裾が短くなりますか?暗号通貨のような進化する複雑なシステムでは、べき乗則現象 (付録を参照) を完全に排除することは困難ですが、不確実性の程度を軽減することは可能です。
考えてみると、すべての資産は初期段階で不確実性の瞬間を経験します。実際、自動マーケットメーカー (AMM) の開発により、従来の金融市場では予測できなかった興味深いつながりが発見されました。人々は平方根の法則を使用して、価格効果を統計的に推定します。 AMM を使用すると、単に集中した流動性の関数として価格がどのような影響を受けるかを正確に予測でき、特定の瞬間における価格への影響を定義するために出来高やボラティリティを考慮する必要はありません。議論を極端にして、ジェローム・パウエルがメタマスクをダウンロードし、DOGE/ETHで流動性を確保し、数兆ドルの流動性を提供することを決定したとします。 DOGE を売ろうとする各人が価格に与えるマイナスの影響はほとんど無視できます。リターン分布からわかるように、ボラティリティは時間の経過とともに減少し、徐々にコーシー分布のようではなくなります。
したがって、AMMに長期間にわたり過剰流動性を提供する勇気のある十分な資金を備えた流動性プロバイダーがいれば、資産のボラティリティが低下する可能性があります。とはいえ、勇気を高めるためにデジタル通貨プリンターを手元に用意できる人はほとんどいないでしょう。
デジタル通貨プリンターが存在しない場合、暗号通貨業界がこの問題を克服する方法の 1 つは、流動性プロバイダーに継続的な購入保証を提供できる資産をブロックチェーン上に導入することです。これらの資産には、高配当株(退職者向けの年金基金が購入)、債券(銀行や企業が短期資金調達のために購入)、外国為替(単一の世界的集中法定通貨を実現するのは困難であるため、中国元、米ドル、ユーロなどの通貨ペアは引き続き使用されます)、およびコモディティ(食品と暖房は常に需要があります)。流動性プロバイダーとしては、マクドナルド/コーンのような取引ペアに流動性を提供する際に、常に一定の需要があることがわかっているため、流動性を怖がらせることがないため、より安心できます。たとえ逸脱損失があったとしても、流動性プロバイダーとしては、あなたはたくさんのハッピーミールメーカーやたくさんのトウモロコシの所有者になるので安心できます。
付録
べき乗則と、この現象が仮想通貨と従来の金融に存在し続ける理由について:
最近の良い例は、共同進化する DeFi システム (2023 年 1 月 8 日) です。このシステムでは、Curve が Vyper 経由で攻撃され、Aave などの他のプロトコルに影響を及ぼし、さらに他のユーザーの出金に関する決定に影響を与えました。ゼロデイ脆弱性の存在により、システムは継続的に進化して不均衡になり、テール イベントが発生します。
これは、インターネットから履歴データを取得するコードです。
数学をインポート
numpyをnpとしてインポート
import yfinance as yf #必ず「pip install yfinance」を実行してください
パンダをPDとしてインポートする
matplotlib.pyplotをpltとしてインポート
matplotlib.animation をアニメーションとしてインポート
#BTC/EURをデフォルトとしてダウンロード
matplotlib.animation をアニメーションとしてインポート
#BTC/EURをデフォルトとしてダウンロード
ticker1="BTC-USD" #^GSPC、^IXIC、CL=F、^OVX、GC=F、BTC-USD、JPY=X、EURUSD=X、^TNX、TLT、SHY、^VIX、LLY、XOM
ティッカー2="EURUSD=X"
t_0="2017-07-07"
t_f="2023-07-07"
data1=yf.download(ticker1, start=t_0, end=t_f)
data2=yf.download(ticker2, start=t_0, end=t_f)
データ3=データ1
dat=data1['閉じる']
dat = pd.to_numeric(dat, エラー='強制')
dat=dat.dropna()
dat_ret=dat.pct_change(1)
x = np.array(dat.values)
dat_recurrence=dat/max(dat)
xr = np.array(dat_recurrence.values)
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(6.5,3))
# 最初のサブプロットでロジスティックマップをプロットします
ax1.plot(range(len(x)), x, '#056398', linewidth=.5)
ax1.set_xlabel('時間')
ax1.set_ylabel(str(ticker1)+'/'+str(ticker2)+'価格比率')
ax1.set_title(str(ticker1)+'/'+str(ticker2)+' '+ str(t_0) 以降の変動)
ax1.set_yscale('ログ')
n_end=len(x)
# 2 番目のサブプロットでロジスティック マップの漸化プロットを作成します
R = np.zeros((n_end, n_end))
範囲 (n_end) 内の i の場合:
range(i, n_end) の j の場合:
abs(xr[i] - xr[j]) < 0.01 の場合:
R[i, j] = 1
R[j, i] = 1
ax2.imshow(R, cmap='viridis', Origin=' lower', vmin=0, vmax=1)
ax2.set_xlabel('タイムステップ')
ax2.set_ylabel('タイムステップ')
ax2.set_xlabel('タイムステップ')
ax2.set_ylabel('タイムステップ')
ax2.set_title(' の反復プロット +str(ticker1)+'/'+str(ticker2))
シリーズ = pd.Series(dat_ret).fillna(0)
図、ax = plt.subplots()
密度 = stats.gaussian_kde(系列)
series.hist(ax=ax, bins=400,edgecolor='black',color='#25a0e8', linewidth=.2,figsize=(6.5,2),histtype=u'step',density=True)
ax.set_xlabel('ログの戻り値')
ax.set_ylabel('ログ頻度')
ax.set_title('戻り値のログログヒストグラム ' +str(ticker1)+'/'+str(ticker2))
ax.set_yscale('ログ')
ax.set_xscale('ログ')
ax.grid(なし)
plt.scatter(系列, 密度(系列), c='#25a0d8', s=6)
図、ax2 = plt.subplots()
series.hist(ax=ax2, bins=400,edgecolor='black',color='#25a0e8', linewidth=.2,figsize=(6.5,2),histtype=u'step',density=True)
ax2.set_xlabel('返されるログ')
ax2.set_ylabel('ログ頻度')
ax2.set_title('収益の Log-y ヒストグラム ' +str(ticker1)+'/'+str(ticker2))
ax2.set_yscale('ログ')
ax2.grid(なし)
plt.scatter(系列, 密度(系列), c='#25a0d8', s=6)
plt.show()
二重曲線分布と混合モデル
numpyをnpとしてインポート
matplotlibからpyplotをpltとしてインポートします
scipyインポート統計より
p、a、b、loc、スケール = 1、1、0、0、1
範囲=15
x = np.linspace(-rnge, rnge, 1000)
#尾部の混合モデル
範囲=15
x = np.linspace(-rnge, rnge, 1000)
#尾部の混合モデル
w=.999
dist1=stats.genhyperbolic.pdf(x, p, a, b, loc, スケール)
dist2=stats.cauchy.pdf(x, loc, スケール)
混合物=np.nansum((w*dist1,(1-w)*dist2),0)
plt.figure(figsize=(16,8))
plt.subplot(1, 2, 1)
plt.title("一般化双曲線分布ログ-Y")
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale), label = 'GH(p=1, a=1, b=0, loc=0,scale=1) '、色='黒')
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, スケール),
カラー = '赤'、アルファ = .5、ラベル = 'GH(p=1, 0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale),
color = 'red'、alpha = 0.2)、np.linspace(1, 2, 10) の場合]
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, スケール),
カラー = '青'、アルファ = 0.2、ラベル = 'GH(p=1、a=1、-1
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, スケール),
カラー = '緑'、アルファ = 0.2、ラベル = 'GH(p=1、a=1、0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale),
color = 'blue'、alpha = .2) for b in np.linspace(-10, 0, 100)]
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale),
color = 'green'、alpha = .2) for b in np.linspace(0, 10, 100)]
plt.plot(x, stats.norm.pdf(x, loc,scale), label = 'N(loc=0,scale=1)', color='purple', ダッシュ=[3])
plt.plot(x, stats.laplace.pdf(x, loc,scale), label = 'Laplace(loc=0,scale=1)', color='black',dashes=[1])
plt.plot(x, 混合, ラベル = 'コーシー(loc=0, スケール=1)', カラー='青',ダッシュ=[1])
plt.xlabel('返品')
plt.ylabel('ログ密度')
plt.ylim(1e-10, 1e0)
plt.yscale('ログ')
x = np.linspace(0, 10000, 10000)
dist1=stats.genhyperbolic.pdf(x, p, a, b, loc, スケール)
dist2=stats.cauchy.pdf(x, loc, スケール)
混合物=np.nansum((w*dist1,(1-w)*dist2),0)
plt.subplot(1, 2, 2)
plt.title("一般化双曲線分布テール Log-Y Log-X")
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale), label = 'GH(p=1, a=1, b=0, loc=0,scale=1) '、色='黒')
plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, スケール),
カラー = '赤'、アルファ = .5、ラベル = 'GH(p=1, 0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale),
color = 'red'、alpha = 0.2)、np.linspace(1, 2, 10) の場合]
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, スケール),
カラー = '青'、アルファ = 0.2、ラベル = 'GH(p=1、a=1、-1
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, スケール),
カラー = '緑'、アルファ = 0.2、ラベル = 'GH(p=1、a=1、0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale),
color = 'blue'、alpha = .2) for b in np.linspace(-10, 0, 100)]
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc,scale),
color = 'green'、alpha = .2) for b in np.linspace(0, 10, 100)]
plt.plot(x, stats.norm.pdf(x, loc,scale), label = 'ガウス', color='purple', ダッシュ=[3])
plt.plot(x, stats.laplace.pdf(x, loc,scale), label = 'Laplace(loc=0,scale=1)', color='black',dashes=[1])
plt.plot(x, stats.cauchy.pdf(x, loc,scale), label = 'Cauchy(loc=0,scale=1)', color='blue',dashes=[1])
#ヘビーテールミックスモデル
plt.plot(x, 混合物, label = 'GH+Cauchy Mix(loc=0,scale=1)', color='red',dashes=[1])
plt.xlabel('ログの戻り値')
plt.ylabel('ログ密度')
plt.ylim(1e-10, 1e0)
plt.xlim(1e-0,1e4)
plt.xscale('ログ')
plt.yscale('ログ')
plt.legend(loc="右上")
plt.subplots_adjust(right=1)
全てのコメント