일일 주가자료의 일부 기간의 값들을 추출한 뒤 시가, 고가, 저가, 종가, 그리고 거래량을 다시 계산 하기 위해 여러 방법이 있을 수 있다.
일반적으로 어떤 기간의 자료를 정리하기 위해서는 다음과 같이 산정한다.
시가: 그 기간이 시작되는 시초값(시가중 최초값)
고가: 그 기간의 고가중 최고값
저가: 그 기간의 저가중 최저값
종가: 그 기간에서의 최종값(종가들 중 최종값)
거래량: 그 기간의 거래량의 합(그 기간의 거래량의 평균치를 사용할 수도 있지만 다음 함수에서 거래량의 합을 사용)
이러한 계산을 위해 다음과 같이 UDF를 작성하였다.
포스트에서 소개한 방법으로 일정기간의 kospi 일일자료를 호출하여 사용한다.
위 UDF에 적용하여 보자.
일반적으로 어떤 기간의 자료를 정리하기 위해서는 다음과 같이 산정한다.
시가: 그 기간이 시작되는 시초값(시가중 최초값)
고가: 그 기간의 고가중 최고값
저가: 그 기간의 저가중 최저값
종가: 그 기간에서의 최종값(종가들 중 최종값)
거래량: 그 기간의 거래량의 합(그 기간의 거래량의 평균치를 사용할 수도 있지만 다음 함수에서 거래량의 합을 사용)
이러한 계산을 위해 다음과 같이 UDF를 작성하였다.
def ohlcInGroupS(dat):
day=dat.index[0]
op=dat.ix[0,0]
hp=max(dat.ix[:,1])
lp=min(dat.ix[:,2])
cp=dat.ix[len(dat)-1, 3]
vol=sum(dat.ix[:,4])
re=pd.DataFrame([op, hp, lp, cp, vol], index=['op', 'hp','lp','cp','vol'], columns=[day]).T
return(re)
우선 이 지정된 기간의 인덱스로 그 기간이 시작되는 날짜를 사용한다. 위 함수의 처음 코드는 그 인덱스를 추출하기 위해 작성하였다.
In [1]: from googlefinance.client import get_price_data, get_prices_data, get_prices_time_data
In [2]: p={'q':'KOSPI', 'x':'KRX', 'i':60*60*24, 'p': '1Y'}
In [3]: kos=get_price_data(p)
이 자료 중 2007-10월 자료를 위의 적용하여 보자.
In [4]: kos10=kos.ix[(kos.index>='2017-10-01') & (kos.index<='2017-10-31'),:]
In [5]: print(kos10)
Open High Low Close Volume
2017-10-10 15:30:00 2425.63 2443.20 2421.10 2433.81 221744000
...
2017-10-27 15:30:00 2485.44 2499.15 2479.67 2496.63 511225000
2017-10-30 15:30:00 2513.87 2513.87 2497.42 2501.93 342006000
2017-10-10 15:30:00 2425.63 2443.20 2421.10 2433.81 221744000
...
2017-10-27 15:30:00 2485.44 2499.15 2479.67 2496.63 511225000
2017-10-30 15:30:00 2513.87 2513.87 2497.42 2501.93 342006000
위 추출된 자료의 처음 인덱스(날짜)를 생성되는 데이터의 인덱스로 하자.
In [6]: day=kos.index[0]
In [7]: day
Out[7]: Timestamp('2016-11-01 15:30:00')
다음의 max(), min()은 최대값과 최소값을 계산하기 위한 파이썬의 내장함수이다. 이 함수는 전달하는 객체의 모든 값들을 대상으로 한다. 즉, 행과 열로 구성되어 있는 numpy, 또는 pandas 구조의 행 또는 열을 구분하지 않는다. 그러므로 이 함수를 사용하기 위해서는 한 행 또는 한 열을 구분하여 대상객체로 전달하여야 한다. 각 행 또는 열의 값들을 별도로 계산하기 위해서는 np.max(), np.min() 함수를 사용한다. sum() 함수 역시 같은 방식으로 계산한다. np.sum()을 고려할 수도 있다.
이 함수 내의 len()은 객체의 길이를 나타내는데 행렬 구조일 경우는 행의 길이를 나타낸다.
In [8]: op=kos10.ix[0,0]
In [9]: hp=max(kos10.ix[:,1])
In [10]: lp=min(kos10.ix[:,2])
In [11]: cp=kos10.ix[len(kos10)-1, 3]
In [12]: vol=sum(kos10.ix[:,4])
In [13]: pd.DataFrame([op,hp, lp, cp, vol], index=['op', 'hp','lp','cp','vol'], columns=[day]).T
Out[13]:
op | hp | lp | cp | vol | |
---|---|---|---|---|---|
2016-10-10 15:30:00 | 2425.63 | 2513.87 | 2421.1 | 2501.93 | 4.737824e+09 |
위 UDF에 적용하여 보자.
In [14]: ohlcInGroupS(kos10)
op | hp | lp | cp | vol | |
---|---|---|---|---|---|
2017-10-10 15:30:00 | 2425.63 | 2513.87 | 2421.1 | 2501.93 | 4.737824e+09 |
댓글
댓글 쓰기