작성자: admin 작성일시: 2016-08-24 11:51:22 조회수: 230 다운로드: 38
카테고리: 금융 공학 태그목록:

델타 헤지

델타 헤지(Delta Hedge)는 블랙-숄즈-머튼 방정식의 유도에서 보인바와 같이 기초 자산이 되는 주식의 가격 변화에 따른 옵션 가치의 변화 즉, 델타와 같은 수의 주식을 보유하도록 헤지 포트폴리오를 운용하여 옵션의 가치 변화를 헤지 포트폴리오가 추종하도록 하는 운용 전략을 말한다.

만약 모든 주가의 움직임이 처음에 가정한 모형과 파라미터를 모두 정확히 따른다고 가정하면 델타 헤지의 결과로 만들어지는 포트폴리오는 옵션의 가격 변화를 정확하게 추종한다.

유러피안 바닐라 콜 옵션의 델타 헤지

유러피안 바닐라 콜 옵션을 매도한 후에 이를 헤지하는 과정을 생각해 보자.

In:
def call_value(S, T, sigma, r, K):
    if not hasattr(T, "__len__") and T == 0:
        return np.maximum(S - K, 0)
    d1 = ((np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T)))
    d2 = ((np.log(S / K) + (r - 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T)))
    value = (S * sp.stats.norm.cdf(d1, 0, 1) - K * np.exp(-r * T) * sp.stats.norm.cdf(d2, 0, 1))
    return value
In:
def call_delta(S, T, sigma, r, K):
    if not hasattr(T, "__len__") and T == 0:
        return int(S > K)
    d1 = ((np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T)))
    delta = sp.stats.norm.cdf(d1, 0, 1)
    return delta
In:
r = 0.05
sigma = 0.04 * np.sqrt(256)  # 0.64 or 64% pa
K = 100
T = 1/12.0
In:
prices = np.linspace(95, 105, 21)
values = np.zeros_like(prices)
for i, s in enumerate(prices):
    values[i] = call_value(s, T, sigma, r, K)

s0 = 100
v0 = call_value(s0, T, sigma, r, K)
d0 = call_delta(s0, T, sigma, r, K)

plt.plot(prices, values, 'g-')
plt.plot(prices, (prices - s0)* d0 + v0, 'b-')
plt.plot(s0, v0, 'ro')
plt.xlabel('prices')
plt.ylabel('European call value')
plt.show()

헤지 수익 분석

$dt$기간 동안 주가가 $dS = \sigma \sqrt{dt}$만큼 움직였다고 가정하자

옵션의 가치는 헤지 포트폴리오와 달리 곡선성(convexity)를 가지고 있기 때문에 헤지 포트폴리오보다 더 가치가 오르게 된다. 이 때 델타 헤지 리밸런싱을 하면 이 이익은 확정(fixed)된다.

그러나 옵션은 음(minus)의 theta 도 가지고 있으므로 theta에 의해 줄어드는 가치, 즉 손실도 존재한다.

따라서 헤지를 하게되면 매 헤지 구간마다 (리벨런싱으로 인한 이익 - 손실) 만큼의 수익이 발생한다.

만약 주가의 움직임이 처음 가정한 주가 모형과 파라미터와 완전히 일치한다면 전체 수익의 누적은 통계적으로 0으로 수렴하게 된다.

In:
T1 = 1/12.0 - 1 * 1/256
T2 = 1/12.0 - 2 * 1/256

prices = np.linspace(95, 105, 21)
values1 = np.zeros_like(prices)
values2 = np.zeros_like(prices)
for i, s in enumerate(prices):
    values1[i] = call_value(s, T1, sigma, r, K)
    values2[i] = call_value(s, T2, sigma, r, K)

s1 = s0 + sigma * np.sqrt(1/256) * s0
v1 = call_value(s1, T1, sigma, r, K)
d1 = call_delta(s1, T1, sigma, r, K)
s2 = s1 - sigma * np.sqrt(1/256) * s1
v2 = call_value(s2, T2, sigma, r, K)

plt.plot(prices, values, 'g-')
plt.plot(prices, values1, 'g-')
plt.plot(prices, values2, 'g-')
plt.plot(prices, (prices - s0)* d0 + v0, 'b--')
plt.plot(prices, (prices - s1)* d1 + v1, 'b--')
plt.plot(s0, v0, 'ro')
plt.plot(s1, v1, 'ro')
plt.plot(s2, v2, 'ro')
plt.xlabel('prices')
plt.ylabel('European call value')
plt.xlim([99, 105])
plt.ylim([6, 11])
plt.show()

만약 주가의 변동성이 옵션 가치를 계산하는데 사용된 변동성 파라미터보다 작다면 theta는 변함없지만 곡선성으로 인해 얻을 수 있는 수익이 감소하기 때문에 손실이 누적된다.

In:
new_sigma = sigma * 0.6

s1 = s0 + new_sigma * np.sqrt(1/256) * s0
v1 = call_value(s1, T1, sigma, r, K)
d1 = call_delta(s1, T1, sigma, r, K)
s2 = s1 - new_sigma * np.sqrt(1/256) * s1
v2 = call_value(s2, T2, sigma, r, K)

plt.plot(prices, values, 'g-')
plt.plot(prices, values1, 'g-')
plt.plot(prices, values2, 'g-')
plt.plot(prices, (prices - s0)* d0 + v0, 'b--')
plt.plot(prices, (prices - s1)* d1 + v1, 'b--')
plt.plot(s0, v0, 'ro')
plt.plot(s1, v1, 'ro')
plt.plot(s2, v2, 'ro')
plt.xlabel('prices')
plt.ylabel('European call value')
plt.xlim([99, 105])
plt.ylim([6, 11])
plt.show()

델타 헤지는 변동성 베팅

만약 옵션을 매도하고 델타 헤지를 한다면 사실은 변동성이 오르는 사건에 베팅(betting)한 것과 같다. 실제로 변동성이 상승한다면 델타 헤지를 하면서 변동성 차이와 Vega를 곱한만큼 이익이 누적된다.

반대로 옵션을 매도하고 델타 헤지를 한면 변동성이 내리는 사건에 베팅한 것과 같으므로 만약 반대로 변동성이 상승한다면 손실을 입게 된다.

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!