1. 국내주식/1-1. 국내주식 연구일지

(파이썬) 주식 자동 매매를 위한 알고리즘 패턴 찾기 (1) 엑셀 이용

봄이오네 2022. 10. 2. 08:10
반응형

1. 들어가며

주식 차트를 계속 보고 있으면,
느낌 때문일까? 반복되는 패턴이 눈에 보인다.
그 패턴에서만 매매를 하면 좋을텐데,
사람의 마음이 어디 한결 같으랴...

알고리즘 패턴 찾기 글을 총 3회에 걸쳐 올리려고 한다.
1편에서는 1분봉 데이터를 이용하여 엑셀 파일 편집하기
2편에서는 1분봉 데이터를 엑셀에서 패턴 만들기
3편에서는 파이썬의 1분봉 데이터의 패턴에 해당하면,
매수/매도를 할 수 있도록 코드를 짜보고자 한다.

왜 하필 1분봉 데이터로 판단할까?
개인적으로 키움증권에서 얻어올 수 있는 정보 중
변화가 가장 심하고, 1분봉 안에는 투자자의 심리가 담겨있다고 생각한다.
1분봉 데이터를 분석하여, 익절과 손절을 위한 매수/매도 타점을 찾고자 한다.

알고리즘이라고 부를 수는 없겠지만,
필자같은 코딩초보에게 이 이상의 패턴을 코드로 구현하는 것은 어려워 보인다.
이 글에서는 알고리즘과 패턴찾기를 혼용하여 사용할 예정이오니,
이 점 넓은 마음으로 양해해 주시리라 믿는다.


2. 패턴찾기 착상 포인트

1) 패턴 찾기는 반드시 케라스 혹은 머신러닝을 배워야 할까?

딥러닝, 머신러닝, AI 등 과거 로데이터를 활용하여,
미래 주가를 예측하는 프로그램이 최근 각광을 받으면서
AI 분야의 인기가 하늘을 찌른다.

필자도 GPU 등을 구입할 생각도 해보고, 딥러닝, 머신러닝 등 화려한 프로그램에 관심많았으나,
GPU의 가격을 보고나서 포기했다.
가격에서 놀랐고, 딥러닝 등을 익혀야 하는데 개념이 너무 어렵다. @@

이 글에서는 AI 및 머신러닝 같은 화려한 개념은 쓰지 않는다.
오로지 엑셀 수작업이오니, 큰 기대는 하지 않으셨으면 한다.

슈퍼컴퓨터처럼 자동으로 계산해주면 얼마나 고마울까?
그럴 경제적 환경도, 실력도 아쉬운 관계로,
엑셀에서 수작업을 하려고 한다. ㅠㅠ

2) AI를 이용한 음악 작곡

최근 AI를 이용하여 베토벤 10번 교향곡 연주를
선보였다는 기사를 2021년 연말에 들었다.

"유명 음악인이 살았으면 이렇게 음악을 작곡했을 것이다."라고 하여
유명 음악인의 패턴에 맞는 음악을 만들고 있다는 뉴스가
생각보다 많이 나오고 있다.

주식으로 돌아와본다면,
장 시작(09:00) ~ 장 종료(15:19)분까지 380개 1분봉이 있다.
* 장 마감(15:30) 및 장 종료(18:00)이나, 이 글에서는 장 종료를 15:19으로 글을 쓰겠다.

하루 380개 1분봉은 반복이 되지 않더라도,
열흘 정도면 1번 정도는 반복되지 않을까?

반복되는 패턴에서
이전 패턴에 대해 향후 20분간 고점(익절)과 저점(손절)을 설정하여,
익절/손절의 근거로 삼으면 어떨까 생각이 들어서,
그 이후 키움증권 영웅문에서 1분봉을 다운받게 되었다.

※ 키움증권 영웅문에서 1분봉 다운로드 받는 방법
https://springcoming.tistory.com/28

(주식 자동매매) 키움증권 영웅문4에서 1분봉 엑셀로 받는 방법

1. 들어가며 키움증권의 영웅문4은 사용자에게 각종 데이터를 제공한다. 사용자는 종목차트, 보조지표, 주식 현재가 등 주식 매매를 위해 필요한 정보를 얻을 수 있다. 이번 시간에는 영웅문4에

springcoming.tistory.com

< 그림1-1. 키움증권 영웅문에서 1분봉 다운받은 파일 모음 >

< 그림1-2. 1분봉 데이터 내용 >

3-1. 1분봉 데이터 가공 1단계 (패턴 만들기)

1) 필요없는 데이터 삭제하자.

① 순수하게 4개(시가, 고가, 저가, 종가)만 필요하다. (필요없는 내용은 지우자)
→ 노란색 셀은 다 삭제한다.

< 그림3-1. 필요없는 G열 이후는 삭제 >


② 날짜/시간이 내림차 순으로 정렬되어 있는데,
올림차 순으로 정렬해 준다.
- 날짜별로 별도로 복사하여 2번 시트로 붙여넣어주고,
같은 날짜에서도 가장 과거 시간이 위로 가도록 만들어 주자.
* 이유는 매수 후 20분 이내 고점 등 확인한다.
* 키움증권에 접속하면, 1분봉을 다운 받을 수 있다.

→ 8/30일 데이터를 시트2로 복사해서, 시간 오름차 순으로 정렬
8/31일 데이터는 9/1 데이터를 다른 곳에 옮겨놓고, 시간을 오름차 순 정렬 후, 2번 시트로 복사
9/1 데이터는 시간을 오름차 순으로 정렬 후, 2번 시트로 복사

※ 키움증권에서 1분봉 다운로드 받기 : https://springcoming.tistory.com/28?category=1025767

(주식 자동매매) 키움증권 영웅문4에서 1분봉 엑셀로 받는 방법

1. 들어가며 키움증권의 영웅문4은 사용자에게 각종 데이터를 제공한다. 사용자는 종목차트, 보조지표, 주식 현재가 등 주식 매매를 위해 필요한 정보를 얻을 수 있다. 이번 시간에는 영웅문4에

springcoming.tistory.com

2) 엑셀의 숫자형과 문자형의 구분

엑셀의 셀 특징은 숫자형(int)는 셀의 오른쪽에 정렬되고,
문자형(str)은 왼쪽에 정렬된다.
또한, 키움증권의 KOA Studio나 OpenAPI에서는 확인했듯이,
문자형으로 제공한다.
→ 결론 : 엑셀의 숫자를 조합을 통해 문자형으로 교체 예정

< 그림2-1. 시트2에서 오름차 순으로 정렬한 내용 >

3) 패턴(pattern)을 구하기 위해 숫자의 조합

엑셀을 사용한 의의가 이번 장에 있다.

① 고가 - 시가 : 무조건 양수 혹은 0이 나온다.
② 저가 - 시가 : 무조건 0 혹은 음수가 나온다.
③ 종가 - 시가 : 양/음수 혹은 0이 나온다

패턴을 ① + ② + ③으로 조합하면 어떨까?
G2의 pattern을 각각의 숫자의 합산을 엑셀의 &로 묶으면
그 결과는 어떻게 될까?

※ 즉, (고가-시가) & (저가-시가) & (종가-시가)를 하나의 패턴으로 만든다.

4) 숫자 조합의 결과

위에서 언급했듯이 문자형은 셀의 왼쪽에 정렬된다.
* 키움증권에서 제공하는 데이터는 "오른쪽" 정렬로 되어 있는데,
엑셀의 G열에서 정렬을 없애면, 자동으로 왼쪽으로 정렬된다.
(& 연결된 엑셀 숫자조합은 문자열이라는 것이다)

< 그림2-4. 시가, 고가 등을 고려하여 패턴을 만든다 >

3-2. 1분봉 데이터 가공 2단계 (패턴 찾기)

1) 패턴 빈도 알아보기

패턴을 만들었으면, 각 패턴이 얼마나 반복되는지 보아야 한다.
위의 G열을 전체 복사하여, 다른 시트(Sheet3)에 붙여준다.

그대로 붙이면, 조건식까지 같이 따라와서 "#REF!" 오류가 뜬다.
"값"으로 붙여넣기를 해야 한다.

< 그림2-5. 그냥 붙여넣기 하면 #REF! 에러가 난다, 값 붙여넣기를 하자 >

< 그림2-6. 값 붙여넣기를 결과 >



B열을 선택하고 복된 패턴을 제거한다.
경로는 엑셀 > 데이터 > "중복된 항목 제거"를 누른다.

< 그림2-7. 중복항목 제거 경로 >

중복항목 제거하는 화면

< 그림2-8. 중복항목을 제거 >

887개 항목이 15개로 줄어든다. (빈도수를 체크하기 위함)

< 그림2-9. 887개 중복항목이 15개로 줄었다 >


중복항목이 제거된 15개를 시트1로 다시 가져온다
M열에 붙여넣기를 하였다.

< 그림2-9. 중복값 제거한 내용을 2번 시트의 M열에 붙여 넣는다 >

3-3. 1분봉 데이터 가공 1단계 (반복 패턴 빈도 구하기)

1) 엑셀의 countif 함수를 이용하여,

빈도 로데이터(G열) 및 (중복 제거한) 순수 패턴(N열)간,
특정 패턴이 몇번 반복되었는지 확인하면 된다.

< 그림2-10. N열에서 패턴의 출현 빈도를 구하고 있다 >

2) 각 패턴별 반복 빈도

발생 빈도는 아래의 N열과 같다.

< 그림2-11. 패턴별 발생빈도는 N열과 같다 >

4. 마치며

필자는 머신러닝 등이 활성화되지 아니한 때에도,
분명 주식 자동 매매는 있었다고 생각한다.

지금의 머신러닝과 딥러닝 등이 활성화된 시점에서
엑셀로 패턴을 찾는 것이 약간은 비효율적으로 보이긴 하나,
하루 종일 차트만 볼 수 없는 처지를 생각하면,
어떻게 해서든 수익을 내고 싶은게 사람의 마음이리라...

이번 시간에는 엑셀을 이용하여 패턴을 만들고 찾는 것까지 알아보았다.
글이 너무 길어질거 같아, 2편에서 계속 쓰려고 한다.

다음 시간에는 1분봉 패턴을 이용하여, 진입/청산 타점을 확인하는 시간을 가질 것이다.

반응형