투자정보

선물 옵션가격을 예측하는 각종지표를 활용하여 변수로 사용하는 함수

aiproductmanager 2025. 3. 16. 15:48
728x90
반응형
선물 옵션가격을 예측하는 각종지표를 활용하여 변수로 사용하는 함수

 

다음은 선물 옵션가격 예측에 활용할 수 있는 여러 지표(예: 선물가격, 행사가격, 잔여 만기, 무위험이자율, 역사적 변동성, 암시적 변동성, 기술적 지표(RSI, MACD) 등)를 변수로 받아 Black 모델 기반의 옵션가격을 예측하는 Python 함수 예시입니다.
python
복사편집
import math
from scipy.stats import norm

def predict_futures_option_price(futures_price, strike_price, time_to_expiry, risk_free_rate, 
                                 historical_vol, implied_vol, weight_implied=0.7, 
                                 rsi=None, macd=None):
    """
    선물 옵션가격 예측 함수 (콜 옵션 기준)
    
    Parameters:
      - futures_price: 현재 선물 가격
      - strike_price: 옵션의 행사가격
      - time_to_expiry: 만기까지 남은 시간 (연 단위)
      - risk_free_rate: 무위험 이자율 (연 단위)
      - historical_vol: 역사적 변동성 (연 단위)
      - implied_vol: 암시적 변동성 (연 단위)
      - weight_implied: 암시적 변동성이 차지하는 비중 (0~1, 기본값 0.7)
      - rsi: 상대강도지수 (Optional, 기술적 조정용)
      - macd: MACD 값 (Optional, 기술적 조정용)
    
    Returns:
      - option_price: 예측된 콜 옵션 가격
    """
    # 1. 효과적 변동성 계산: 암시적 변동성과 역사적 변동성의 가중 평균
    effective_vol = weight_implied * implied_vol + (1 - weight_implied) * historical_vol

    # 2. Black 모델(선물 옵션 버전)을 이용한 기본 옵션가격 산출
    d1 = (math.log(futures_price / strike_price) + 0.5 * effective_vol**2 * time_to_expiry) / (effective_vol * math.sqrt(time_to_expiry))
    d2 = d1 - effective_vol * math.sqrt(time_to_expiry)
    base_price = math.exp(-risk_free_rate * time_to_expiry) * (futures_price * norm.cdf(d1) - strike_price * norm.cdf(d2))
    
    # 3. 기술적 지표(RSI, MACD)를 활용한 가격 조정 (가중치는 예시)
    adjustment = 1.0
    if rsi is not None:
        # RSI 30 이하이면 과매도 신호로 약간 상승 효과, 70 이상이면 과매수 신호로 약간 하락 효과 적용
        if rsi < 30:
            adjustment += 0.02  # 약 2% 상승 조정
        elif rsi > 70:
            adjustment -= 0.02  # 약 2% 하락 조정
    if macd is not None:
        # MACD가 양수이면 상승 모멘텀, 음수이면 하락 모멘텀을 반영 (예: 0.01 배율 적용)
        adjustment += 0.01 * macd

    # 최종 옵션가격 산출
    option_price = base_price * adjustment
    return option_price

# 예시: 함수 사용
if __name__ == "__main__":
    price = predict_futures_option_price(
        futures_price=100.0,
        strike_price=105.0,
        time_to_expiry=0.5,
        risk_free_rate=0.02,
        historical_vol=0.25,
        implied_vol=0.30,
        weight_implied=0.7,
        rsi=28,
        macd=0.5
    )
    print("예측된 옵션가격:", price)

 

 

이 함수는 기본적으로 선물 옵션의 가격을 Black 모델을 사용해 계산하며, 암시적 및 역사적 변동성의 가중 평균을 효과적 변동성으로 산출합니다. 추가적으로 RSI와 MACD 같은 기술적 지표를 간단한 가중치 조정을 통해 반영하여 옵션 가격에 약간의 조정을 적용합니다.
물론 실제 적용 시에는 각 지표의 가중치나 조정 계수는 데이터 분석 및 백테스트를 통해 최적화할 필요가 있습니다.

 

주식 가격을 예측하는 각종지표를 활용하여 변수로 사용하는 함수
 

 

주식 가격을 예측하기 위해 다양한 지표를 활용하여 변수를 입력받아 예측하는 함수를 Python으로 구현할 수 있습니다. 아래는 기술적 지표와 기본적 지표를 모두 고려한 예측 함수의 예시입니다.

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler

def predict_stock_price(data):
    """
    주식 가격을 예측하는 함수

    Parameters:
    - data: DataFrame, 주식의 과거 데이터와 다양한 지표를 포함한 데이터프레임
      필요한 열: ['Close', 'Volume', 'PER', 'PBR', 'RSI', 'MACD', 'OBV', 'News_Sentiment']

    Returns:
    - predicted_price: float, 예측된 다음 날의 주가
    """

    # 필요한 열이 모두 있는지 확인
    required_columns = ['Close', 'Volume', 'PER', 'PBR', 'RSI', 'MACD', 'OBV', 'News_Sentiment']
    for col in required_columns:
        if col not in data.columns:
            raise ValueError(f"데이터프레임에 '{col}' 열이 필요합니다.")

    # 결측치 처리
    data = data.dropna()

    # 피처와 타겟 변수 정의
    X = data[required_columns[1:]]  # 'Close'를 제외한 나머지 열을 피처로 사용
    y = data['Close']  # 'Close' 열을 타겟 변수로 사용

    # 데이터 스케일링
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

    # 모델 학습
    model = LinearRegression()
    model.fit(X_scaled, y)

    # 가장 최근 데이터로 다음 날 주가 예측
    latest_data = X_scaled[-1].reshape(1, -1)
    predicted_price = model.predict(latest_data)[0]

    return predicted_price

# 사용 예시
if __name__ == "__main__":
    # 예시 데이터 생성
    data = pd.DataFrame({
        'Close': np.random.rand(100) * 100000,  # 종가
        'Volume': np.random.rand(100) * 1000000,  # 거래량
        'PER': np.random.rand(100) * 15,  # 주가수익비율
        'PBR': np.random.rand(100) * 3,  # 주가순자산비율
        'RSI': np.random.rand(100) * 100,  # 상대강도지수
        'MACD': np.random.rand(100) * 2 - 1,  # 이동평균수렴·발산지수
        'OBV': np.random.rand(100) * 1000000,  # 거래량지표
        'News_Sentiment': np.random.rand(100) * 2 - 1  # 뉴스 감성 지수
    })

    predicted_price = predict_stock_price(data)
    print(f"예측된 다음 날 주가: {predicted_price:.2f}원")

 

 

이 함수는 주식의 종가(Close), 거래량(Volume), 주가수익비율(PER), 주가순자산비율(PBR), 상대강도지수(RSI), 이동평균수렴·발산지수(MACD), 거래량지표(OBV), 뉴스 감성 지수(News_Sentiment) 등의 지표를 입력으로 받아 다음 날의 주가를 예측합니다. 모델로는 선형 회귀(LinearRegression)를 사용하였으며, 입력 데이터는 표준화(StandardScaler)를 통해 스케일링하였습니다.

실제 적용 시에는 더 많은 데이터와 다양한 지표를 수집하고, 복잡한 모델(예: LSTM, GRU 등)을 활용하여 예측 정확도를 높일 수 있습니다. 또한, 뉴스 감성 지수는 자연어 처리 기법을 통해 뉴스 헤드라인이나 본문의 감성 분석을 수행하여 산출할 수 있습니다.

주가 예측은 매우 복잡한 작업으로, 다양한 요인과 불확실성이 존재하므로, 예측 결과를 투자 결정의 유일한 기준으로 삼기보다는 참고 자료로 활용하시기 바랍니다.

더 자세한 주가 예측에 필요한 핵심 변수에 대한 논의는 아래 영상을 참고하시기 바랍니다.

https://www.youtube.com/watch?v=Ng_tvSN6lXw

 

728x90
반응형