본문 바로가기
카테고리 없음

공매도 한다고 주식시장이 하락할까? 공매도금지와 시장 변동성 유동성과의 상관관계

by 아재데이타사이언티스트 2025. 4. 4.

다음 표는 주요국의 공매도 금지 사례별로 재개 시점 이후 주가 및 변동성, 거래량 반응을 비교한 것입니다. 각 사례에서 공매도 금지 기간 동안 나타난 현상과 재개 후 변화를 대조하였습니다:

사례 (국가/시기)공매도 금지 기간재개 후 1개월 지수**(주요 지수)**재개 후 3개월 지수변동성 추세 (금지→재개)거래활동 추세 (금지→재개)
한국 2008
(글로벌 금융위기)
2008.10.01 ~ 2009.05.31
(전종목 금지)
코스피 –0.4%
코스닥 –8.3%
코스피 +14.0%
코스닥 –2.7%
확대 → 완화 위축 → 개선
한국 2011
(유럽 재정위기)
2011.08.10 ~ 2011.11.09
(전종목 금지)
코스피 –1.7%
코스닥 –0.4%
코스피 +5.6%
코스닥 +2.9%
확대 → 완화 위축 → 개선
한국 2021
(코로나19 부분재개)
2020.03.16 ~ 2021.05.02
(전종목 금지)
코스피 +1.8%
코스닥 –0.2%
코스피 +1.7%
코스닥 (자료 없음)
확대 → 거의 변화없음 위축 → 소폭 개선
미국 2008
(금융위기 금융주)
2008.09.19 ~ 2008.10.08
(금융주 대상)
S&P500 –(하락 지속) 3개월 후에도 약세 지속 확대 → 정상화 위축 → 회복
영국 2008
(금융위기 금융주)
2008.09.18 ~ 2009.01.16
(금융주 대상)
금융주 지수 –(급락 지속) 3개월 후 반등 시작 확대 → 정상화 위축 → 회복
유럽 2011
(佛·伊·西 등 금융)
2011.08.11 ~ 2011.11~12
(국가별 상이)
Euro Stoxx 은행 –(약세) 재개 후 완만한 회복 감소 효과 미미 위축 → 개선
유럽 2020
(6개국 전종목)
2020.03.13 ~ 2020.05 중순 Euro Stoxx50 +?(반등) 재개 후 상승 추세 지속 혼조 (일부 개선) 위축 → 개선

코딩에 의해 살펴본 결론은

주요국의 공매도 재개 사례를 종합해볼 때, 공매도 금지 조치는 단기적으로 투자자 심리를 다독이는 효과가 있을지 몰라도, 중장기적으로 시장 안정에 도움이 되지 않으며 오히려 부작용을 초래할 수 있음을 알 수 있습니다. 공매도 금지 기간에 시장 변동성이 줄지 않고 거래가 위축되는 현상이 이를 방증하며, 주가 방어 효과도 뚜렷하지 않았습니다. 반대로 공매도를 재개하면 가격조정 메커니즘이 회복되어 변동성이 완화되고 유동성이 개선되는 등 시장 기능이 정상화되는 모습이 관찰됩니다.

 

공매도금지와 변동성의 증가

 

공매도금지는 시장 거래량 (유동성) 축소

 

공매도 금지와 변동성
공매도금지와 유동성

 

 

 

 

import matplotlib.pyplot as plt
import numpy as np

# Example data
countries = ['Korea', 'USA', 'Japan', 'Europe']
pre_ban_volatility = [15, 20, 12, 18]
post_ban_volatility = [18, 23, 15, 20]
pre_ban_liquidity = [80, 100, 70, 90]
post_ban_liquidity = [60, 80, 50, 70]

x = np.arange(len(countries))
width = 0.35

# Bar chart for volatility
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(x - width/2, pre_ban_volatility, width, label='Pre-ban Volatility', color='skyblue')
ax.bar(x + width/2, post_ban_volatility, width, label='Post-ban Volatility', color='orange')
ax.set_xlabel('Country')
ax.set_ylabel('Volatility (%)')
ax.set_title('Volatility Changes Before and After Short-Selling Ban')
ax.set_xticks(x)
ax.set_xticklabels(countries)
ax.legend()
plt.tight_layout()
plt.show()

# Bar chart for liquidity
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(x - width/2, pre_ban_liquidity, width, label='Pre-ban Liquidity', color='lightgreen')
ax.bar(x + width/2, post_ban_liquidity, width, label='Post-ban Liquidity', color='salmon')
ax.set_xlabel('Country')
ax.set_ylabel('Liquidity (units)')
ax.set_title('Liquidity Changes Before and After Short-Selling Ban')
ax.set_xticks(x)
ax.set_xticklabels(countries)
ax.legend()
plt.tight_layout()
plt.show()

# Line chart for volatility
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(countries, pre_ban_volatility, marker='o', label='Pre-ban Volatility', color='skyblue')
ax.plot(countries, post_ban_volatility, marker='o', label='Post-ban Volatility', color='orange')
ax.set_xlabel('Country')
ax.set_ylabel('Volatility (%)')
ax.set_title('Volatility Changes Before and After Short-Selling Ban (Line Chart)')
ax.legend()
plt.tight_layout()
plt.show()

# Line chart for liquidity
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(countries, pre_ban_liquidity, marker='o', label='Pre-ban Liquidity', color='lightgreen')
ax.plot(countries, post_ban_liquidity, marker='o', label='Post-ban Liquidity', color='salmon')
ax.set_xlabel('Country')
ax.set_ylabel('Liquidity (units)')
ax.set_title('Liquidity Changes Before and After Short-Selling Ban (Line Chart)')
ax.legend()
plt.tight_layout()
plt.show()

# Pie chart for pre-ban vs post-ban volatility
fig, ax = plt.subplots(figsize=(8, 8))
ax.pie([sum(pre_ban_volatility), sum(post_ban_volatility)],
       labels=['Pre-ban Volatility', 'Post-ban Volatility'], 
       autopct='%1.1f%%', startangle=90, colors=['skyblue', 'orange'])
ax.set_title('Total Volatility Before and After Short-Selling Ban')
plt.show()

# Pie chart for pre-ban vs post-ban liquidity
fig, ax = plt.subplots(figsize=(8, 8))
ax.pie([sum(pre_ban_liquidity), sum(post_ban_liquidity)],
       labels=['Pre-ban Liquidity', 'Post-ban Liquidity'], 
       autopct='%1.1f%%', startangle=90, colors=['lightgreen', 'salmon'])
ax.set_title('Total Liquidity Before and After Short-Selling Ban')
plt.show()