엄청 오랜만에 글을 써봅니다.
그동안 다른일이 바빠서 글을 못썼네요.
틈틈이 그동안 진행한 프로젝트를 소개해보려 합니다.
그동안 한 것
(ssh 접속키를 잃어버려서 시작화면 캡쳐본만 남긴채 장렬히 전사한 내 첫 서버.. )
그동안 비트코인 매매전략을 짜고, 백테스팅하고,
괜찮은 전략을 클라우드 컴퓨터에 올려 24시간 테스트 해봤습니다.
결론적으론
지속적으로 수익을 내거나, 승률이 70%를 넘는 전략은 거의 없더군요.
그래서 떠오른 생각이
"매수매도 타이밍을 찾으려하지말고 가격 변동성을 이용해서 수익 확률을 구할 수 있는 매매는 없을까?"
있었습니다.
옵션이 바로 제가 생각하던 상품이더군요.
콜옵션 매도시
일정한 수수료를 받아 자산가격 하락을 어느정도 헤징 할 수 있고
자산 가격이 상승하면 상승분의 일부를 누릴 수 있는
또한 상품 가격에 변동성이 반영되어 구간 별 확률을 구할 수 있는
콜옵션 매도
(물론 제 설명이 정확하진 않습니다. 옵션에 대한 깊은 이해를 위해서는 저보다
훨씬 전문적인 블로거 분들이 많으므로 참고해 주시길...)
네...
이렇게 생겼습니다.
생긴것에 비해 고정된 상수가 많아 풀기 어렵지 않습니다.
C : 콜 프리미엄(콜 옵션 가격)
P : 풋 프리미엄(풋 옵션 가격)
S : 기초자산 가격
K : 행사가격(옵션 만기시 실행 가격)
r : 무위험 이자율(기준금리, 또는 단기채 금리)
: 기초자산의 변동성(또다른 식으로 구해야하는 것)
T : 잔존만기(옵션 행사까지 남은 기간)
N(x) : 표준정규분포의 누적밀도 함수, 표준정규분포를 따르는 변수가 x보다 작을 확률
정말 쉽죠?
프로그래밍 중 이런 어려운 이론을 이용해야할떄
쉽다고 생각하면서 접근하면 겁이 나지 않습니다
또 우리에겐 이제 ChatGPT가 있습니다.
ChatGPT에게 옵션 공식 내의 변수중 하나인 내재변동성을 계산하는 코드를 작성해달라고 해봅시다.
일단 ChatGPT 가입 및 사용법입니다.
https://gaesung.tistory.com/300
나의 요구:
Write python code to calculate option implied volatility
(옵션 내재변동성을 계산하는 파이썬 코드를 만들어줘)
한글로 말해도 알아듣긴 하지만 영어를 더 잘 알아듣는다해서 영어로 물어봤습니다.
import math
# Define the Black-Scholes function
def black_scholes(sigma, S, K, T, r, call_put):
d1 = (math.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * math.sqrt(T))
d2 = d1 - sigma * math.sqrt(T)
if call_put == 'call':
return S * math.norm.cdf(d1) - K * math.exp(-r * T) * math.norm.cdf(d2)
elif call_put == 'put':
return K * math.exp(-r * T) * math.norm.cdf(-d2) - S * math.norm.cdf(-d1)
# Define the function to minimize
def function_to_minimize(sigma, S, K, T, r, call_put, option_price):
return black_scholes(sigma, S, K, T, r, call_put) - option_price
# Define the input variables
S = 100 # Underlying asset price
K = 110 # Strike price
T = 0.5 # Time to expiration (in years)
r = 0.05 # Risk-free interest rate
call_put = 'call' # 'call' or 'put' option
option_price = 5 # Market price of the option
# Define the range for the bisection method
a = 0.0001
b = 1
# Implement the bisection method
while (b-a)>0.0001:
sigma = (a+b)/2
if function_to_minimize(sigma,S,K,T,r,call_put,option_price)>0:
a = sigma
else:
b = sigma
# The result is the implied volatility
implied_volatility = sigma
print("Implied volatility is: ", implied_volatility)
이렇게 나옵니다.
위 코드가 어떤걸 의미하는지 알아봅시다.
보다보니 뭔가 이상합니다.
sigma가 내재변동성이라고 결론이 나왔는데,
sigma는 블랙숄츠 방정식과 옵션가격을 이용하여 역계산 한것도 아닌,
a와 b의 평균입니다.
문제가 있습니다.
https://www.ktb.co.kr/html/hts_help/4136.html
코드가 문제가 아니라 제가 문제였습니다.
옵션의 내재 변동성과 역사적 변동성을 헷갈렸네요.
옵션 이론가격을 구하기 위한 변수인 변동성은
과거의 주가 움직임을 계산한 역사적 변동성이였습니다.
(그렇다해도 ChatGPT가 준 코드는 이상한 부분이 있습니다.)
다시 물어봅시다.
Write a code in Python to find the historical volatility of a stock'
"주식의 역사적 변동성을 구하는 코드를 파이썬으로 짜줘"
import numpy as np
import pandas as pd
def historical_volatility(prices, window=252):
log_returns = np.log(prices / prices.shift(1))
vol = log_returns.rolling(window=window).std() * np.sqrt(252)
return vol
# Example usage:
prices = pd.read_csv("stock_prices.csv")["close"]
volatility = historical_volatility(prices)
print(volatility)
적절한 코드가 나온 것 같습니다.
주식은 연중 거래일이 252일 이라서 sqrt(252)로 계산한 것 같습니다.
(암호화폐 옵션 계산에 사용하려면 365로 수정해야겠죠?)
historical_volatility함수에 전달해줄 가격정보는 CCXT모듈로 불러오고요.
오늘 배운 건 이와 같습니다.
- ChatGPT 대단하다!
- 그래도 인간의 손길은 필요하다.
- 필요한걸 질문할 줄 아는 능력이 필요하다.
- 나중에 프로그래밍으로 먹고살 수 있을까..?
- 일론머스크의 말이 갑자기 떠오른다.
"적어도 인간 독재자는 죽음을 피할 수 없다. 그러나 인공지능에게는 죽임이란 없다. 영원이 살 것이며 이는 인간이 피할 수 없는 불멸의 독재자를 접하게 된다는 것"
다음번에는 실제 데이터를 이용하여 이론가격을 도출해보겠습니다.
'코딩 공부 > python' 카테고리의 다른 글
ChatGPT와 함께 커버드 콜 전략 자동실행 알고리즘 짜기 (3) (0) | 2023.01.24 |
---|---|
ChatGPT와 함께 커버드 콜 전략 자동실행 알고리즘 짜기 (2) (0) | 2023.01.24 |
볼린저 밴드와 현금흐름 지표를 이용해 매수, 매도 타이밍 구하기 (1) | 2022.03.02 |
파이썬으로 효율적 투자선 그리기와 최적의 포트폴리오 찾기 (0) | 2022.02.28 |
파이썬 생활 프로그래밍: 파이썬으로 CSV 읽고 쓰기 (0) | 2022.02.25 |
댓글