작성자: ck.eth
편집자: Lylia
![](https://img.cointime.com/images/Jd8oAbQ0T5gI6rIaA5wXeyLnvzCB73Ha2qDFXLvS.png)
원래 모래폭풍 변동[2](사막의 모래 역학)을 시뮬레이션하기 위해 개발된 쌍곡선 분포[1]는 매개변수 유연성으로 인해 금융 자산 수익 모델링에 적용됩니다[3].
![](https://img.cointime.com/images/bshUyuBbzo3O0r8Tlw402c2QuRfuYIiAqYjqO99Y.png)
왼쪽: 로그 좌표 플롯의 통계 분포를 보면 그 모양을 더 잘 이해할 수 있습니다. 하이퍼보라 분포는 쌍곡선과 유사한 모양을 나타내는 반면 점선 가우스 분포는 e^-x²/2 항의 존재로 인해 포물선으로 볼 수 있습니다. 오른쪽: 로그-로그 플롯의 꼬리를 보면 분포의 특성을 더 잘 이해할 수 있습니다. 거듭제곱 법칙 분포는 로그-로그 플롯에서 쇠퇴 추세를 표시하지 않습니다. 분포를 결합하고 가중치 매개변수를 사용하여 다양한 분포를 혼합할 수 있습니다.
디지털 자산의 가격 행동
유동성 공급자(LP)가 자산의 가격 역학을 이해하는 것은 매우 유용합니다. 2015년 이후 가장 오래된 디지털 자산인 비트코인(BTC)에 대한 과거 데이터를 3091 일일 수익률을 사용하여 로그 좌표 플롯 형태로 살펴보면 몇 가지 특이점을 제외하고 일반화된 쌍곡선 분포가 역사적으로 적합하다는 것을 알 수 있습니다. 매일 잘 돌아갑니다.
![](https://img.cointime.com/images/RDKDYWw8GFjaZIhHegDTCRTF3YAJ1hbSmyREFILt.png)
우리 피팅의 이상은 로그-로그 플롯에서 관찰할 수 있는 맨 오른쪽과 왼쪽의 이상값입니다. 이 그림에서 음수 수익률의 꼬리는 빨간색으로 표시되고 양수 특이치 수익률은 파란색으로 표시되는 것을 볼 수 있습니다.
![](https://img.cointime.com/images/kD8mcNwzwVGX6UdMjZemlQ8Lqsc3JdGrMRSirJOK.png)
꼬리는 비슷해 보이지만 오른쪽의 특이치에는 약간의 불일치가 있습니다. 히스토그램을 부드럽게 하기 위해 KDE(Kernel Density Estimation) 방법을 사용했습니다.
![](https://img.cointime.com/images/oWkX2sx1vwWd7gjAokug2nkWIO9q0SHGKTIeVbkE.png)
2015년 1월 1일 이후 비트코인(BTC) 일일 수익률의 왼쪽과 오른쪽 꼬리, 특히 오른쪽 꼬리가 비대칭을 보입니다.
이는 일반화된 쌍곡선과 비대칭 거듭제곱 법칙을 결합하여 비트코인 가격의 역학을 설명할 수 있음을 의미합니다. 비트코인은 가장 오래된 시계열이고 모든 디지털 자산 중 변동성이 가장 적기 때문에 제가 예시로 비트코인을 선택했다는 점에 유의하는 것이 중요합니다. 즉, 다른 디지털 자산의 유동성 공급자(LP)가 더 변동적인 행동을 할 것이라는 의미입니다.
가격 동적 모델링
이 파동 동작을 시뮬레이션하기 위해 혼합할 수 있는 수십 개의 통계 분포가 있습니다. 예를 들어, 전통적인 금융에서 일반적인 접근 방식은 기하학적 브라운 운동(로그 정규 분포)을 사용하고 이를 Löwy 프로세스(푸아송 분포)와 결합하여 가격 급등을 설명하는 것입니다.
![](https://img.cointime.com/images/m1ao1DitWByDVNG0dI43KtfaOPAWiQaGBfSXt0Hh.png)
Leveré 프로세스에 대한 강의에서 Erik Bardoux와 Antonis Papapantoleon이 시각화한 시뮬레이션 경로.
저는 사용자가 이러한 분포를 탐색하고 Riemann 적분을 통해 Uniswap에서 이러한 분포의 LP 위치를 복제하는 방법을 돕기 위해 Desmos에 50개 이상의 통계 분포 라이브러리를 만들었습니다.
통계 분포 라이브러리에 대한 Desmos 링크: https://www.desmos.com/calculator/4ey6hbevzf
통계 분포 라이브러리에 대한 Desmos 링크: https://www.desmos.com/calculator/4ey6hbevzf
![](https://img.cointime.com/images/uPbHFB4wVaXvWI982YBHKNxavBCwyoOSmXH0hgLg.png)
Desmos의 흥미로운 기능은 로그-로그 플롯으로 전환하는 기능입니다. 이를 통해 각 통계 분포의 꼬리 특성이 어떻게 변하는지 확인할 수 있습니다.
![](https://img.cointime.com/images/pCWjbp8fEFHvq2XVoGKmDHuK49wDyg9vD0ihKn6j.png)
데이터에 가장 적합한 분포를 비교하려면 Kolmogorov-Smirnov 테스트를 사용하여 누적 분포 함수를 경험적 누적 히스토그램 데이터와 비교할 수 있습니다. 그러나 아래에서는 최악의 분포를 가정하는 간단한 접근 방식을 사용할 수도 있습니다.
미래에 대해 아무것도 모른다면? 글쎄, 우리는 가격 공간에서 가능한 최악의 분포가 무엇인지 생각해 볼 수 있는데, 이는 끝없이 확장되는 꼬리를 갖는 거듭제곱의 법칙입니다. 그러한 분포 중 하나가 Cauchy 분포입니다(가격 공간에서 이에 상응하는 것은 log-Cauchy 분포입니다).
![](https://img.cointime.com/images/9V9x7hnQ8e0MsqfRs9rLJCVdC7E8BNguUq9IOxsv.gif)
코시 분포는 대수의 법칙을 따르지 않고 그 자체의 의지를 가지고 있습니다. Cauchy 분포의 특성에 대해 알아보려면 https://en.wikipedia.org/wiki/Cauchy_distribution#/media/File:Mean_estimator_consistency.gif 링크를 참조하세요.
코시 분포의 한 가지 특성은 대수의 법칙을 따르지 않는다는 것입니다. 지난 30일 동안의 평균을 계산해 보면 패턴이 있다고 생각할 수도 있지만 사실은 그것이 당신을 속일 수도 있습니다. 흥미로운 예는 유동성 부족으로 인해 이러한 행동을 보일 수 있는 DOGE/ETH 거래 쌍의 평균입니다.
![](https://img.cointime.com/images/3YirQSoFyyn6L8UlgvTogvi0FxrdZu5GITYplQqS.png)
Dogecoin과 Ethereum이 7년 이상 존재했음에도 불구하고 거래 쌍의 호핑 프로세스에는 고유한 특성이 있어 통계적 근사 방법을 적용하기가 어렵습니다.
Dogecoin과 Ethereum이 7년 이상 존재했음에도 불구하고 거래 쌍의 호핑 프로세스에는 고유한 특성이 있어 통계적 근사 방법을 적용하기가 어렵습니다.
![](https://img.cointime.com/images/9U4RFeRk33CEMF1M4UqEbhNnFekRKH6AOb3nK2wA.png)
오른쪽의 로그 로그 히스토그램에는 이상치가 증가하고 있습니다. 로그 로그 플롯에서 이상값이 증가하는 분포가 로그 코시 분포라는 것을 배웠습니다.
가격 공간의 로그 정규 분포와 비교하여 Cauchy 분포가 어떻게 보이는지 확인할 수 있습니다.
![](https://img.cointime.com/images/wwOtdzLu1CprqEniGprcqwzYBzjc2U4uLzmNPOtr.png)
왼쪽: 로그 정규 분포의 로그 로그 그래프는 포물선형이며, 코시 거듭제곱 법칙의 선형 꼬리는 빨간색으로 표시되고 검은 점선은 로그-코시 분포를 나타냅니다. 오른쪽: 가격 공간에서 [ 0, 거대).
log-Cauchy 분포는 Uniswap v2 위치의 전체 범위만큼 나쁘지는 않지만 두 번째로 최악의 경우입니다. 1 부와 2부 에서 자본 효율성 최적화에 대해 배운 내용을 바탕으로 하한을 80~90% 정도 설정하면 가격이 하한에 가까워질수록 분배가 커지기 시작하므로 하한을 80~90% 정도로 설정하면 개선에 도움이 될 수 있습니다. 0까지 유동성을 제공합니다.
![](https://img.cointime.com/images/k6K3SREaTOJ4QGtLHhsQe1TCLGKnvfZmSFbBzr5P.png)
현재 가격 1부터 시작하여 80~90%의 하한선을 설정하는 것은 범위 제한의 출발점으로 사용될 수 있지만 그러한 역학을 기반으로 한 자산의 투자/매수/매도는 권장하지 않으며 이는 금융 조언이 아닙니다. 가장 좋은 방법은 기다려서 자산에 대해 자세히 알아보는 것입니다.
복잡한 시스템의 거듭제곱 분포에 대해
그러나 Cauchy 분포와 같은 거듭제곱 법칙 분포는 시간이 지남에 따라 꼬리가 짧아지나요? 암호화폐와 같이 진화하고 복잡한 시스템에서는 멱함수 법칙 현상(부록 참조)을 완전히 제거하기는 어렵지만 불확실성을 줄이는 것은 가능합니다.
생각해보면 모든 자산은 초기 단계에서 불확실성의 순간을 경험합니다. 실제로 AMM(Automated Market Maker)의 개발과 함께 우리는 전통적인 금융 시장에서는 예측할 수 없는 흥미로운 연관성을 발견했습니다. 사람들은 가격 효과를 통계적으로 추정하기 위해 제곱근 법칙을 사용합니다. AMM을 사용하면 집중된 유동성의 함수로서 가격이 어떻게 영향을 받는지 정확하게 예측할 수 있으며 특정 순간의 가격 영향을 정의하기 위해 거래량이나 변동성을 고려할 필요가 없습니다. 극단적인 주장을 펼치면, Jerome Powell이 MetaMask를 다운로드하고 DOGE/ETH로 유동성 자금을 조달하고 수조 달러의 유동성을 제공하기로 결정했다고 가정해 보겠습니다. DOGE를 매도하려는 각 사람은 가격에 거의 무시할 만큼 부정적인 영향을 미치며, 수익률 분포에서 볼 수 있듯이 시간이 지남에 따라 변동성은 감소하여 점차 Cauchy 분포와 비슷해집니다.
따라서 AMM에 장기간 초과 유동성을 제공할 만큼 용감한 충분한 자금을 갖춘 유동성 공급자를 보유하면 자산의 변동성을 줄일 수 있습니다. 용기를 키우기 위해 디지털 화폐 프린터를 사용할 수 있는 사람은 거의 없을 것이라고 생각합니다.
디지털 화폐 프린터가 없는 상황에서 암호화폐 산업이 이 문제를 극복하는 한 가지 방법은 유동성 공급자에게 지속적인 구매 보장을 제공할 수 있는 블록체인 자산을 도입하는 것입니다. 이러한 자산에는 다음이 포함될 수 있습니다: 대규모 배당 주식(은퇴자를 위한 연금 기금에서 구매), 채권(단기 자금 조달을 위해 은행 및 기업에서 구매), 외환(단일 글로벌 중앙집중식 법정 화폐는 달성하기 어렵기 때문에 중국은 위안화, 미국 달러, 유로와 같은 통화 쌍은 계속 사용됩니다.) 및 상품(음식과 난방은 항상 수요가 있습니다). 유동성 공급자로서 귀하는 맥도날드/옥수수와 같은 거래쌍에 유동성을 제공할 때 항상 약간의 수요가 있을 것이라는 것을 알기 때문에 유동성을 두려워하지 않고 더 안심할 수 있습니다. 편차 손실이 발생하더라도 유동성 공급자로서 해피밀 메이커의 주인이 되거나 옥수수 한 뭉치의 주인이 되므로 안심할 수 있습니다.
부록
멱법칙과 이러한 현상이 암호화폐와 전통 금융에 계속해서 존재하는 이유에 대해:
![](https://img.cointime.com/images/gDYSHHk8T9imhnQzSPFvwEWcjXbmjN2GUdtVw5PM.jpg)
최근의 좋은 예는 공동 진화하는 DeFi 시스템(2023년 1월 8일)입니다. Curve는 Vyper를 통해 공격을 받았고 이는 Aave와 같은 다른 프로토콜에 영향을 미쳤으며 이는 다시 다른 사용자의 인출 결정에 영향을 미쳤습니다. 제로데이 취약점이 존재하면 시스템이 지속적으로 발전하고 불균형을 이루게 되어 테일 이벤트가 발생합니다.
다음은 인터넷에서 기록 데이터를 가져오는 코드입니다.
수학 가져오기
numpy를 np로 가져오기
yfinance를 yf로 가져오기 #'pip install yfinance'를 확인하세요.
팬더를 PD로 가져오기
matplotlib.pyplot을 plt로 가져오기
matplotlib.animation을 애니메이션으로 가져오기
#BTC/EUR을 기본으로 다운로드
matplotlib.animation을 애니메이션으로 가져오기
#BTC/EUR을 기본으로 다운로드
ticket1="BTC-USD" #^GSPC, ^IXIC, CL=F,^OVX, GC=F, BTC-USD, JPY=X, EURUSD=X, ^TNX, TLT, SHY, ^VIX, LLY, XOM
ticket2="EURUSD=X"
t_0="2017-07-07"
t_f="2023-07-07"
data1=yf.download(ticker1, 시작=t_0, 끝=t_f)
data2=yf.download(ticker2, 시작=t_0, 끝=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)
무화과, (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)
# 두 번째 서브플롯에서 로지스틱 지도의 반복 플롯을 만듭니다.
R = np.zeros((n_end, n_end))
범위(n_end)에 있는 i의 경우:
범위(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)
그림, 도끼 = plt.subplots()
밀도 = stats.gaussian_kde(시리즈)
series.hist(ax=ax, bins=400, edgecolor='black',color='#25a0e8', linewidth=.2,figsize=(6.5,2),histtype=u'step', 밀도=True)
ax.set_xlabel('로그 반환')
ax.set_ylabel('로그 빈도')
ax.set_title('수익의 LogLog 히스토그램 ' +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', 밀도=True)
ax2.set_xlabel('로그 반환')
ax2.set_ylabel('로그 빈도')
ax2.set_title('수익률의 로그-y 히스토그램 ' +str(ticker1)+'/'+str(ticker2))
ax2.set_yscale('로그')
ax2.grid(없음)
plt.scatter(계열, 밀도(계열), c='#25a0d8', s=6)
plt.show()
双曲线分布화混합模型
numpy를 np로 가져오기
matplotlib에서 plot을 plt로 가져오기
scipy 가져오기 통계에서
p, a, b, loc, 스케일 = 1, 1, 0, 0, 1
rnge=15
x = np.linspace(-rnge, rnge, 1000)
#꼬리용 혼합 모델
rnge=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(그림 크기=(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, scale),
색상 = '빨간색', 알파 = .5, 라벨='GH(p=1, 0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
np.linspace(1, 2, 10)]의 경우 색상 = '빨간색', 알파 = 0.2)
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, 스케일),
색상 = '파란색', 알파 = 0.2, label='GH(p=1, a=1, -1
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, 스케일),
색상 = '녹색', 알파 = 0.2, label='GH(p=1, a=1, 0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
np.linspace(-10, 0, 100)의 b에 대한 색상 = '파란색', 알파 = .2)]
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
np.linspace(0, 10, 100)의 b에 대한 색상 = '녹색', 알파 = .2)]
plt.plot(x, stats.norm.pdf(x, loc, scale), label = 'N(loc=0, scale=1)', color='purple', dashes=[3])
plt.plot(x, stats.laplace.pdf(x, loc, scale), label = 'Laplace(loc=0, scale=1)', color='black',dashes=[1])
plt.plot(x, mix, label = 'Cauchy(loc=0, scale=1)', color='blue',dashes=[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, scale),
색상 = '빨간색', 알파 = .5, 라벨='GH(p=1, 0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
np.linspace(1, 2, 10)]의 경우 색상 = '빨간색', 알파 = 0.2)
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, 스케일),
색상 = '파란색', 알파 = 0.2, label='GH(p=1, a=1, -1
plt.plot(x, stats.genhyperbolic.pdf(x, p,a,b,loc, 스케일),
색상 = '녹색', 알파 = 0.2, label='GH(p=1, a=1, 0
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
np.linspace(-10, 0, 100)의 b에 대한 색상 = '파란색', 알파 = .2)]
[plt.plot(x, stats.genhyperbolic.pdf(x, p, a, b, loc, scale),
np.linspace(0, 10, 100)의 b에 대한 색상 = '녹색', 알파 = .2)]
plt.plot(x, stats.norm.pdf(x, loc, scale), label = 'Gaussian', color='purple', dashes=[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, mix, 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(오른쪽=1)
모든 댓글