안녕하세요?
아래 스크립트는 챗GPT에게 질문하여 도출한 것입니다.
예스트레이더로 국내선물 일봉으로 적용할 수 있도록 스크립트 작성 부탁드립니다.
///////////////////////////////////////////////////////////////////////////
[미분을 사용한 주가 분석]
미분을 통해 주가의 변화를 분석할 수 있습니다. 주가를 시간에 대한 함수로 나타내고, 그 함수의 1차 및 2차 미분을 계산함으로써 주가의 변동성과 추세를 이해할 수 있습니다.
1차 미분 (f'(x)): 주가의 변화율, 즉 주가가 시간에 따라 얼마나 빠르게 변하고 있는지를 나타냅니다. 양수이면 주가가 상승하고, 음수이면 주가가 하락합니다.
2차 미분 (f''(x)): 주가 변화율의 변화율, 즉 주가 변화의 가속도를 나타냅니다. 양수이면 주가 상승이 가속되고 있음을, 음수이면 주가 하락이 가속되고 있음을 의미합니다.
3차 함수 계산
주가의 변화를 3차 함수로 모델링하여 분석할 수 있습니다. 3차 함수는 다음과 같은 형태를 가집니다:f(x)=ax3승+bx2승+cx+d
3차 함수는 더 복잡한 주가 패턴을 캡처할 수 있으며, 곡률의 변화를 포함하여 주가의 여러 변동성을 표현할 수 있습니다.
[매매신호 해석]
매수 신호: 1차 미분(변화율)이 음에서 양으로 변하는 지점. 이는 주가가 하락세에서 상승세로 전환되는 시점을 나타냅니다.
매도 신호: 1차 미분이 양에서 음으로 변하는 지점. 이는 주가가 상승세에서 하락세로 전환되는 시점을 나타냅니다.
---------------------------------------------------------------------------------
import yfinance as yf
# NVIDIA 주식 데이터 다운로드
nvda = yf.download('NVDA', start='2022-01-01', end='2023-01-01', progress=False)
nvda['Close'].plot(title='NVIDIA Closing Prices')
import numpy as np
import matplotlib.pyplot as plt
# 종가 데이터를 기반으로 시간 축 생성
x = np.arange(len(nvda['Close']))
y = nvda['Close'].values
# 3차 다항식 피팅
coefficients = np.polyfit(x, y, 3)
polynomial = np.poly1d(coefficients)
# 원본 데이터와 모델링된 데이터 플롯
plt.plot(x, y, label='Original Data')
plt.plot(x, polynomial(x), label='3rd Degree Polynomial', linestyle='--')
plt.legend()
plt.show()
# 1차 및 2차 미분 계산
first_derivative = np.polyder(polynomial, 1)
second_derivative = np.polyder(polynomial, 2)
# 미분 값 계산
y_prime = first_derivative(x)
y_double_prime = second_derivative(x)
# 미분 그래프 플롯
plt.plot(x, y_prime, label='First Derivative')
plt.plot(x, y_double_prime, label='Second Derivative')
plt.legend()
plt.show()
# 매매신호 초기화
buy_signals = []
sell_signals = []
# 매매신호 생성
for i in range(1, len(x)):
if y_prime[i-1] < 0 and y_prime[i] > 0: # 음에서 양으로 변할 때 (매수 신호)
buy_signals.append((x[i], y[i]))
elif y_prime[i-1] > 0 and y_prime[i] < 0: # 양에서 음으로 변할 때 (매도 신호)
sell_signals.append((x[i], y[i]))
# 매매신호 플롯
plt.plot(x, y, label='Original Data')
plt.scatter(*zip(*buy_signals), color='green', marker='^', label='Buy Signal', alpha=1)
plt.scatter(*zip(*sell_signals), color='red', marker='v', label='Sell Signal', alpha=1)
plt.legend()
plt.show()
답변 1
예스스탁
예스스탁 답변
2024-07-08 15:01:30
안녕하세요
예스스탁입니다.
올려주신 내용은 작성이 어렵습니다.
도움을 드리지 못해 죄송합니다.
즐거운 하루되세요
> 흰둥이아빠 님이 쓴 글입니다.
> 제목 : 함수요청
> 안녕하세요?
아래 스크립트는 챗GPT에게 질문하여 도출한 것입니다.
예스트레이더로 국내선물 일봉으로 적용할 수 있도록 스크립트 작성 부탁드립니다.
///////////////////////////////////////////////////////////////////////////
[미분을 사용한 주가 분석]
미분을 통해 주가의 변화를 분석할 수 있습니다. 주가를 시간에 대한 함수로 나타내고, 그 함수의 1차 및 2차 미분을 계산함으로써 주가의 변동성과 추세를 이해할 수 있습니다.
1차 미분 (f'(x)): 주가의 변화율, 즉 주가가 시간에 따라 얼마나 빠르게 변하고 있는지를 나타냅니다. 양수이면 주가가 상승하고, 음수이면 주가가 하락합니다.
2차 미분 (f''(x)): 주가 변화율의 변화율, 즉 주가 변화의 가속도를 나타냅니다. 양수이면 주가 상승이 가속되고 있음을, 음수이면 주가 하락이 가속되고 있음을 의미합니다.
3차 함수 계산
주가의 변화를 3차 함수로 모델링하여 분석할 수 있습니다. 3차 함수는 다음과 같은 형태를 가집니다:f(x)=ax3승+bx2승+cx+d
3차 함수는 더 복잡한 주가 패턴을 캡처할 수 있으며, 곡률의 변화를 포함하여 주가의 여러 변동성을 표현할 수 있습니다.
[매매신호 해석]
매수 신호: 1차 미분(변화율)이 음에서 양으로 변하는 지점. 이는 주가가 하락세에서 상승세로 전환되는 시점을 나타냅니다.
매도 신호: 1차 미분이 양에서 음으로 변하는 지점. 이는 주가가 상승세에서 하락세로 전환되는 시점을 나타냅니다.
---------------------------------------------------------------------------------
import yfinance as yf
# NVIDIA 주식 데이터 다운로드
nvda = yf.download('NVDA', start='2022-01-01', end='2023-01-01', progress=False)
nvda['Close'].plot(title='NVIDIA Closing Prices')
import numpy as np
import matplotlib.pyplot as plt
# 종가 데이터를 기반으로 시간 축 생성
x = np.arange(len(nvda['Close']))
y = nvda['Close'].values
# 3차 다항식 피팅
coefficients = np.polyfit(x, y, 3)
polynomial = np.poly1d(coefficients)
# 원본 데이터와 모델링된 데이터 플롯
plt.plot(x, y, label='Original Data')
plt.plot(x, polynomial(x), label='3rd Degree Polynomial', linestyle='--')
plt.legend()
plt.show()
# 1차 및 2차 미분 계산
first_derivative = np.polyder(polynomial, 1)
second_derivative = np.polyder(polynomial, 2)
# 미분 값 계산
y_prime = first_derivative(x)
y_double_prime = second_derivative(x)
# 미분 그래프 플롯
plt.plot(x, y_prime, label='First Derivative')
plt.plot(x, y_double_prime, label='Second Derivative')
plt.legend()
plt.show()
# 매매신호 초기화
buy_signals = []
sell_signals = []
# 매매신호 생성
for i in range(1, len(x)):
if y_prime[i-1] < 0 and y_prime[i] > 0: # 음에서 양으로 변할 때 (매수 신호)
buy_signals.append((x[i], y[i]))
elif y_prime[i-1] > 0 and y_prime[i] < 0: # 양에서 음으로 변할 때 (매도 신호)
sell_signals.append((x[i], y[i]))
# 매매신호 플롯
plt.plot(x, y, label='Original Data')
plt.scatter(*zip(*buy_signals), color='green', marker='^', label='Buy Signal', alpha=1)
plt.scatter(*zip(*sell_signals), color='red', marker='v', label='Sell Signal', alpha=1)
plt.legend()
plt.show()