본문 바로가기
코딩 공부/python

ChatGPT와 함께 커버드 콜 전략 자동실행 알고리즘 짜기

by Camel_coding_food 2023. 1. 22.
반응형

프로그래밍, 주식 하시는 여러분, 햇빛도 쬐고, 산책도 하시고 그러시길

엄청 오랜만에 글을 써봅니다.

그동안 다른일이 바빠서 글을 못썼네요.

 

틈틈이 그동안 진행한 프로젝트를 소개해보려 합니다.

 


그동안 한 것

mobaXterm 최고~

(ssh 접속키를 잃어버려서 시작화면 캡쳐본만 남긴채 장렬히 전사한 내 첫 서버.. )

 

 

그동안 비트코인 매매전략을 짜고, 백테스팅하고,

괜찮은 전략을 클라우드 컴퓨터에 올려 24시간 테스트 해봤습니다.

 

  결론적으론

지속적으로 수익을 내거나, 승률이 70%를 넘는 전략은 거의 없더군요.

 

 

 

그동안 짠 수많은 코드 중 일부


그래서 떠오른 생각이

"매수매도 타이밍을 찾으려하지말고 가격 변동성을 이용해서 수익 확률을 구할 수 있는 매매는 없을까?"

 

있었습니다.

옵션이 바로 제가 생각하던 상품이더군요.

 

 

콜옵션 매도시

일정한 수수료를 받아 자산가격 하락을 어느정도 헤징 할 수 있고

자산 가격이 상승하면 상승분의 일부를 누릴 수 있는

또한 상품 가격에 변동성이 반영되어 구간 별 확률을 구할 수 있는

콜옵션 매도

 

(물론 제 설명이 정확하진 않습니다. 옵션에 대한 깊은 이해를 위해서는 저보다

훨씬 전문적인 블로거 분들이 많으므로 참고해 주시길...)

 


블랙-숄츠-머튼 옵션 가격 결정 모델

네...

이렇게 생겼습니다.

 

생긴것에 비해 고정된 상수가 많아 풀기 어렵지 않습니다.

 

 

C : 콜 프리미엄(콜 옵션 가격)

P : 풋 프리미엄(풋 옵션 가격)

S : 기초자산 가격

K : 행사가격(옵션 만기시 실행 가격)

r : 무위험 이자율(기준금리, 또는 단기채 금리)

: 기초자산의 변동성(또다른 식으로 구해야하는 것)

T : 잔존만기(옵션 행사까지 남은 기간)

N(x) : 표준정규분포의 누적밀도 함수, 표준정규분포를 따르는 변수가 x보다 작을 확률

 

 

정말 쉽죠?

 

프로그래밍 중 이런 어려운 이론을 이용해야할떄

쉽다고 생각하면서 접근하면 겁이 나지 않습니다

 


 

또 우리에겐 이제 ChatGPT가 있습니다.

 

ChatGPT에게 옵션 공식 내의 변수중 하나인 내재변동성을 계산하는 코드를 작성해달라고 해봅시다.

 

 

 

일단 ChatGPT 가입 및 사용법입니다.

https://gaesung.tistory.com/300

 

OpenAI 채팅 인공지능 ChatGPT 사용방법

최근 OpenAI에서 개발한 AI 채팅봇인 ChatGPT가 무료로 공개되었습니다. 딥러닝 알고리즘을 비롯한 AI 기술이 발전하면서 대화형AI도 매우 빠른 속도로 성장하고 있습니다. 텍스트 기반의 AI 특성상

gaesung.tistory.com

 

 

 

나의 요구:

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

 

옵션변동성차트 [4136]

화면개요 옵션의 가격을 결정하고, 고평가 또는 저평가 여부를 판단하는 데에 가장 큰 변수인 옵션의 변동성의 추이를 서로 비교하여 분석할 수 있는 분석 그래프를 조회할 수 있는 화면입니다.

www.ktb.co.kr

코드가 문제가 아니라 제가 문제였습니다.

 

옵션의 내재 변동성과 역사적 변동성을 헷갈렸네요.

 

옵션 이론가격을 구하기 위한 변수인 변동성은

과거의 주가 움직임을 계산한 역사적 변동성이였습니다.

(그렇다해도 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모듈로 불러오고요.

 

오늘 배운 건 이와 같습니다.

 

  1. ChatGPT 대단하다!
  2. 그래도 인간의 손길은 필요하다.
  3. 필요한걸 질문할 줄 아는 능력이 필요하다.
  4. 나중에 프로그래밍으로 먹고살 수 있을까..?
  5. 일론머스크의 말이 갑자기 떠오른다.

"적어도 인간 독재자는 죽음을 피할 수 없다. 그러나 인공지능에게는 죽임이란 없다. 영원이 살 것이며 이는 인간이 피할 수 없는 불멸의 독재자를 접하게 된다는 것"

 

 

 

다음번에는 실제 데이터를 이용하여 이론가격을 도출해보겠습니다.

반응형

댓글