커뮤니티

함수요청

프로필 이미지
흰둥이아빠
2024-07-05 13:42:02
745
글번호 181236
답변완료
안녕하세요? 아래 스크립트는 챗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()