본문 바로가기
Tech/Database

주식 데이터 이평선 쿼리 구현

by Augustine™ 2018. 7. 10.
반응형

주식의 흐름(추이)를 파악할 때, 이평선이 유용하게 사용된다. 본 포스팅은 주식 포스팅이 아니기에 이평선에 대한 이야기는 다음으로 미루고... 이 이평선을 query로 구현한다면 어떻게 해야할까?

먼저 데이터는 아주 심플하게 아래와 같은 데이터가 있다고 하자.


CREATE TABLE stock_price(
    dt              varchar(255)
  , stock_id         varchar(255)
  , price integer
);
--하 눈물의 유니슨 ㅠㅠ 유니슨 주주로 가슴이 먹먹해진다. 아래 데이터는 실제 데이터는 아님.
INSERT INTO stock_price
VALUES
    ('2014-01-01',  'unison', 3000)
  , ('2014-01-02',  'unison', 3010)
  , ('2014-01-03',  'unison', 3020)
  , ('2014-01-04',  'unison', 3000)
  , ('2014-01-05',  'unison', 2980)
  , ('2014-01-08',  'unison', 3010)
  , ('2014-01-09',  'unison', 3030)
  , ('2014-01-10',  'unison',  3060)
  , ('2014-01-11',  'unison', 3060)
  , ('2014-01-12',  'unison',  3040)
  , ('2014-01-15',  'unison',  3090)
  , ('2014-01-16',  'unison', 3100)
  , ('2014-01-17',  'unison', 3100)
  , ('2014-01-18',  'unison',  3120)
  , ('2014-01-19',  'unison', 3170)
  , ('2014-01-22',  'unison',  3120)
  , ('2014-01-23',  'unison', 3190)
  , ('2014-01-24',  'unison',  3210)
  , ('2014-01-25',  'unison', 3200)
  , ('2014-01-26',  'unison',  3220)
  , ('2014-01-29',  'unison', 3260)
  , ('2014-01-30',  'unison',  3270)
  , ('2014-01-31',  'unison', 3290)
  , ('2014-02-01',  'unison',  3300)
  , ('2014-02-02',  'unison', 3350)
  , ('2014-02-03',  'unison', 3400)
;

현재 기준으로 7일전의 데이터의 평균을 구해야 하므로, 초기 7일의 데이터는 평균값을 구할 수 없다. 실제 주식 차트에서도 그렇게 표현한다.


SELECT
	dt
	--일봉
	,price as 일봉
	--7일 이평선 계산하기
	, ROUND((CASE
		WHEN
			7 = COUNT(*)
			OVER (ORDER BY dt ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
		THEN
			AVG(SUM(price))
			OVER (ORDER BY dt ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
	END), 2)
	AS 일주이평선
	
FROM	stock_price
GROUP BY dt, price
ORDER BY dt
;	


아래와 같은 결과를 얻을 수 있다.


위 집계표를 차트로 옮겨보면 아래와 같이 주식 차트를 뽑아 볼 수 있다.  아래 차트와 같이 우리 니슨이가 천천히 우상향 했으면 하는 소박한 바램을 가져본다. (일봉은 차트로 어떻게 표현해야할지..)




반응형

'Tech > Database' 카테고리의 다른 글

SQLServer Login & User 의 이해  (1) 2018.07.12
누적 데이터 query  (0) 2018.07.11
PostgreSQL for DBA - 작성중  (0) 2018.07.10
PostgreSQL - Record to column  (0) 2018.07.08
PostgreSQL - Window function  (0) 2018.07.06

댓글