AUTO TRADE
좌측 카테고리를 눌러서 주제를 선택하시기 바랍니다.
-
이번 게시글에서는 백테스팅을 진행하는 과정에 있어서 여러 가지 알고리즘들을 생성하게 될텐데, 그 과정에서 고려해야 하는 요소에 대해 다루어보고자 한다. 목차는 다음과 같으며, 목차를 클릭하면 해당하는 내용으로 들어가게 된다. 백테스팅 시에는 예상외로 고려해야 할 부분들이 많고 소제목 하나 하나의 내용이 길기 때문에, 차분하게 천천히 읽어나가길 권합니다. ※ 퍼갈 경우 반드시 출처를 표기해주시기 바랍니다. [목차] 백테스팅의 의의 "시점이 중요하다". 시점을 기준으로 데이터를 나누어 살펴보아야 한다. 백테스팅 시에는 나타나지 않는 실 거래의 문제점 백테스팅 시에 사용하는 알고리즘이 올바르게 동작하는지 확인해야 한다. 필요한 데이터를 모두 입력하고 확인하라. 백테스팅의 의의 백테스트(Back-test)는 기..
백테스팅 방법론이번 게시글에서는 백테스팅을 진행하는 과정에 있어서 여러 가지 알고리즘들을 생성하게 될텐데, 그 과정에서 고려해야 하는 요소에 대해 다루어보고자 한다. 목차는 다음과 같으며, 목차를 클릭하면 해당하는 내용으로 들어가게 된다. 백테스팅 시에는 예상외로 고려해야 할 부분들이 많고 소제목 하나 하나의 내용이 길기 때문에, 차분하게 천천히 읽어나가길 권합니다. ※ 퍼갈 경우 반드시 출처를 표기해주시기 바랍니다. [목차] 백테스팅의 의의 "시점이 중요하다". 시점을 기준으로 데이터를 나누어 살펴보아야 한다. 백테스팅 시에는 나타나지 않는 실 거래의 문제점 백테스팅 시에 사용하는 알고리즘이 올바르게 동작하는지 확인해야 한다. 필요한 데이터를 모두 입력하고 확인하라. 백테스팅의 의의 백테스트(Back-test)는 기..
2022.06.12 -
키움증권에서 제공하는 개발 가이드 내 실시간 데이터 FID 리스트를 살펴보면 여러 가지 FID들이 제공되고 있지만, 8.19 주문 체결과 8.20 잔고는 OnReceiveRealData 이벤트가 아닌 OnReceiveChejanData 내에서 처리해야한다. OnRecieveChejanData 이벤트 처리하기이 부분은 여타 이벤트 처리 방법과 크게 다르지 않다. 키움증권 내에서 발생하는 이벤트는 아래의 7가지로, 그 외에 발생하는 이벤트는 존재하지 않는다. 따라서 아래 7개의 이벤트만 실행할 함수와 연결해주면 된다.self.kiwoom.OnReceiveTrData.connect(self.receive_trdata) self.kiwoom.OnReceiveRealData.connect(self...
키움증권 Open API - 체결 데이터 및 잔고 관리하기 (1)키움증권에서 제공하는 개발 가이드 내 실시간 데이터 FID 리스트를 살펴보면 여러 가지 FID들이 제공되고 있지만, 8.19 주문 체결과 8.20 잔고는 OnReceiveRealData 이벤트가 아닌 OnReceiveChejanData 내에서 처리해야한다. OnRecieveChejanData 이벤트 처리하기이 부분은 여타 이벤트 처리 방법과 크게 다르지 않다. 키움증권 내에서 발생하는 이벤트는 아래의 7가지로, 그 외에 발생하는 이벤트는 존재하지 않는다. 따라서 아래 7개의 이벤트만 실행할 함수와 연결해주면 된다.self.kiwoom.OnReceiveTrData.connect(self.receive_trdata) self.kiwoom.OnReceiveRealData.connect(self...
2022.05.24 -
[ERROR CODE] sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1193, "Unknown system variable 'transaction_isolation'") 노트북을 새롭게 구매한 후에 세팅하던 중 계속 오류가 발생해서 검색해보니, MySQL 8.0 내 변수로 tx_isolation만 존재하는 오류가 발생했다. 원칙 상, MySQL 5.7.20 버전 이후의 버전부터는 tx_isolation을 사용하지 않고 transaction_isolation을 사용하기 때문에, MySQL 8.0을 사용한다면 tx_isolation은 없고 transaction_isolation만 존재해야 한다. MySQL 설치 시에 함꼐 설치되는 MyS..
mysql 8.0 내에서 tx_isolation만 있는 경우[ERROR CODE] sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1193, "Unknown system variable 'transaction_isolation'") 노트북을 새롭게 구매한 후에 세팅하던 중 계속 오류가 발생해서 검색해보니, MySQL 8.0 내 변수로 tx_isolation만 존재하는 오류가 발생했다. 원칙 상, MySQL 5.7.20 버전 이후의 버전부터는 tx_isolation을 사용하지 않고 transaction_isolation을 사용하기 때문에, MySQL 8.0을 사용한다면 tx_isolation은 없고 transaction_isolation만 존재해야 한다. MySQL 설치 시에 함꼐 설치되는 MyS..
2022.05.02 -
여러 컴퓨터에서 코딩을 한다거나, 아니면 제작한 코드를 배포한다거나 할 경우 코드에서 사용한 파이썬 라이브러리를 그대로 설치해주어야 그 코드를 사용할 수 있다. freeze는 많이 떠돌아다니는 정보니 그렇다 치고, 일단 컴퓨터별로 특정 라이브러리가 설치된 경로가 다르다보니 그대로 사용할 경우에 경로를 찾을 수 없다는 오류들이 발견되곤 한다. ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 실제로 설치가 멈추는 부분들을 살펴보면, 그 내용이 아래와 같이 작성되어 있다. 특징이라면, 중간에 골뱅이가 있다는 것. mysqlclient @ file:///C:/Users/nhk49/mysqlclient..
파이썬 라이브러리 한 번에 옮기기 #[Errno2]여러 컴퓨터에서 코딩을 한다거나, 아니면 제작한 코드를 배포한다거나 할 경우 코드에서 사용한 파이썬 라이브러리를 그대로 설치해주어야 그 코드를 사용할 수 있다. freeze는 많이 떠돌아다니는 정보니 그렇다 치고, 일단 컴퓨터별로 특정 라이브러리가 설치된 경로가 다르다보니 그대로 사용할 경우에 경로를 찾을 수 없다는 오류들이 발견되곤 한다. ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 실제로 설치가 멈추는 부분들을 살펴보면, 그 내용이 아래와 같이 작성되어 있다. 특징이라면, 중간에 골뱅이가 있다는 것. mysqlclient @ file:///C:/Users/nhk49/mysqlclient..
2022.04.25 -
자동 매매 프로그램을 제작하는 과정에 있어 얼마 지나지 않아 느꼈던 부분이지만, 이전에 백테스팅을 하는 과정에서 제작해두었던 코드를 그대로 사용하다 보니 실제 거래를 진행하기 위해 필요하지 않은 코드가 있었고, 그 코드로 인해 데이터 수집과 처리에 소모되는 시간이 길어지게 되고 자연스럽게 그에 따라 처리해야 할 오류(발생할 수 있는 오류)가 많아졌다. 오늘은 여러 가지 문제점들 중 하나인 차트 데이터에 대해 이야기해볼 예정이다. 차트 데이터는 본인 역시 여러 개의 게시글을 통해 차트 데이터를 불러오고 저장하는 방법들에 대해 다루었다. 하지만 실질적으로 매매 프로그램은 "저장된 차트 데이터"가 필요하지 않다. 특히 단기 거래라면 더더욱 불필요하다. 물론 거래를 진행하는 관점이 단기가 아닌 중장기라면 일봉 ..
키움증권 Open API. 차트 데이터를 모두 불러올 필요가 있을까?자동 매매 프로그램을 제작하는 과정에 있어 얼마 지나지 않아 느꼈던 부분이지만, 이전에 백테스팅을 하는 과정에서 제작해두었던 코드를 그대로 사용하다 보니 실제 거래를 진행하기 위해 필요하지 않은 코드가 있었고, 그 코드로 인해 데이터 수집과 처리에 소모되는 시간이 길어지게 되고 자연스럽게 그에 따라 처리해야 할 오류(발생할 수 있는 오류)가 많아졌다. 오늘은 여러 가지 문제점들 중 하나인 차트 데이터에 대해 이야기해볼 예정이다. 차트 데이터는 본인 역시 여러 개의 게시글을 통해 차트 데이터를 불러오고 저장하는 방법들에 대해 다루었다. 하지만 실질적으로 매매 프로그램은 "저장된 차트 데이터"가 필요하지 않다. 특히 단기 거래라면 더더욱 불필요하다. 물론 거래를 진행하는 관점이 단기가 아닌 중장기라면 일봉 ..
2022.04.13 -
아마 이번 게시글을 마지막으로 거래일 데이터를 조회하는 코드를 모두 구축할 수 있을 것 같다.(아마도) 키움증권 Open API 거래일자 데이터 얻기 (1) 키움증권 Open API 거래일자 데이터 얻기 (2) 우리가 찾는 날짜가 거래일자인지부터 확인해보자. 지난 게시글에서 우리는 day_data라는 변수 내에 \n을 제거한 일자 데이터만을 입력해주었고, 그 일자 데이터들은 모두 거래일에 해당하는 일자들이었다. 이제 우리는 우리가 확인하고자 하는 일자가 day_data 내에 있는지만 확인해주면 된다. result = read_text("거래일데이터", "trade_date") day_data = [] for i in result: date = i.replace("\n", "") day_data.appen..
키움증권 Open API 거래일자 데이터 얻기 (3)아마 이번 게시글을 마지막으로 거래일 데이터를 조회하는 코드를 모두 구축할 수 있을 것 같다.(아마도) 키움증권 Open API 거래일자 데이터 얻기 (1) 키움증권 Open API 거래일자 데이터 얻기 (2) 우리가 찾는 날짜가 거래일자인지부터 확인해보자. 지난 게시글에서 우리는 day_data라는 변수 내에 \n을 제거한 일자 데이터만을 입력해주었고, 그 일자 데이터들은 모두 거래일에 해당하는 일자들이었다. 이제 우리는 우리가 확인하고자 하는 일자가 day_data 내에 있는지만 확인해주면 된다. result = read_text("거래일데이터", "trade_date") day_data = [] for i in result: date = i.replace("\n", "") day_data.appen..
2022.04.10 -
이번 게시글에서는 trade_date.txt 파일 내에 거래일 데이터를 임의로 직접 입력한 후에 직접 거래일을 계산해보거나 거래일을 찾는 함수를 제작해볼 예정이다. 그 전에 앞서, 지난 게시글에서 def append_text() 함수를 통해 날짜 데이터를 입력해주는 코드를 구축했었는데 입력하는 데이터를 잘 살펴보면 단순하게 "20220101"과 같은 형태로 입력하도록 제작했었다. 단순히 이런 식으로 데이터를 입력하도록 한다면 열흘이 지난 후에 텍스트 파일에는 다음과 같은 텍스트가 입력되어 있을 것이다. "20220101202201022022010320220104202201052022010620220107202201082022010920220110" 프로그래밍에 있어 우리가 사용할 데이터는 우리가 사용하기..
키움증권 Open API 거래일자 데이터 얻기 (2)이번 게시글에서는 trade_date.txt 파일 내에 거래일 데이터를 임의로 직접 입력한 후에 직접 거래일을 계산해보거나 거래일을 찾는 함수를 제작해볼 예정이다. 그 전에 앞서, 지난 게시글에서 def append_text() 함수를 통해 날짜 데이터를 입력해주는 코드를 구축했었는데 입력하는 데이터를 잘 살펴보면 단순하게 "20220101"과 같은 형태로 입력하도록 제작했었다. 단순히 이런 식으로 데이터를 입력하도록 한다면 열흘이 지난 후에 텍스트 파일에는 다음과 같은 텍스트가 입력되어 있을 것이다. "20220101202201022022010320220104202201052022010620220107202201082022010920220110" 프로그래밍에 있어 우리가 사용할 데이터는 우리가 사용하기..
2022.04.10 -
오늘도 역시 결론부터 설명하자면, 키움증권 Open API 내에서는 거래일자를 조회할 수 있는 함수가 제공되지 않고 있다. 그니까, 특정 일자를 변수로 입력해주면 해당 일자가 거래일인지 아닌지를 반환하는 함수가 제공되지 않는다는 것이다. 우리는 간혹 거래를 진행하다 보면 특정 일자가 거래가 진행되는 날인지 아닌지를 파악해야 하는 경우가 분명 존재하는데, 키움증권의 Open API는 그런 기능을 제공하지 않고 있다는 것이다. 물론 그 이유에 대해서는 알 수 없다. 다만 우리가 특정 일자가 거래일자였는지를 확인하고자 하는 이유는 바로 거래일이라는 개념이 거래를 진행하는 데에 있어 생각보다 큰 영향력을 갖기 때문이다. 예를 들어 미수를 통해 특정 종목에 비중을 실어 매수를 하는 알고리즘이 있다고 했을 때 매수..
키움증권 Open API 거래일자 데이터 얻기 (1)오늘도 역시 결론부터 설명하자면, 키움증권 Open API 내에서는 거래일자를 조회할 수 있는 함수가 제공되지 않고 있다. 그니까, 특정 일자를 변수로 입력해주면 해당 일자가 거래일인지 아닌지를 반환하는 함수가 제공되지 않는다는 것이다. 우리는 간혹 거래를 진행하다 보면 특정 일자가 거래가 진행되는 날인지 아닌지를 파악해야 하는 경우가 분명 존재하는데, 키움증권의 Open API는 그런 기능을 제공하지 않고 있다는 것이다. 물론 그 이유에 대해서는 알 수 없다. 다만 우리가 특정 일자가 거래일자였는지를 확인하고자 하는 이유는 바로 거래일이라는 개념이 거래를 진행하는 데에 있어 생각보다 큰 영향력을 갖기 때문이다. 예를 들어 미수를 통해 특정 종목에 비중을 실어 매수를 하는 알고리즘이 있다고 했을 때 매수..
2022.04.10 -
지난 게시글에서 실시간 데이터가 발생한 후 해당 데이터를 기반으로 가격 데이터를 어떻게 비교하여 거래를 진행하게 되는지에 대해 살펴보았고, 마지막에는 "과연 하나의 알고리즘만 사용할 것인가?"하는 소제목과 함께 끝마쳤다. 그럼 이제 그 부분이 뭔 소린지 다시 한 번 살펴보도록 하자. 나는 진짜 하나의 알고리즘만 쓸 건데? 뭐, 백 번 양보해서 정말 하나의 알고리즘만 사용할 것이라고 가정해보도록 하자. 당신은 얼마 가지 않아 "어.. 이런 유형의 주가 흐름은 비중을 조금 더 싣고, 이런 유형의 주가 흐름은 비중을 조금 더 줄이고 싶은데.."하는 생각이 들 것이다. 이럴 때 사용할 수 있는 것이 바로 해당 종목의 거래 유형 번호를 저장하는 것이다. 아래의 도표를 살펴보도록 하자. 만약 당신의 주가 데이터를 ..
자동 매매 프로그램의 가격 데이터 관리 (2)지난 게시글에서 실시간 데이터가 발생한 후 해당 데이터를 기반으로 가격 데이터를 어떻게 비교하여 거래를 진행하게 되는지에 대해 살펴보았고, 마지막에는 "과연 하나의 알고리즘만 사용할 것인가?"하는 소제목과 함께 끝마쳤다. 그럼 이제 그 부분이 뭔 소린지 다시 한 번 살펴보도록 하자. 나는 진짜 하나의 알고리즘만 쓸 건데? 뭐, 백 번 양보해서 정말 하나의 알고리즘만 사용할 것이라고 가정해보도록 하자. 당신은 얼마 가지 않아 "어.. 이런 유형의 주가 흐름은 비중을 조금 더 싣고, 이런 유형의 주가 흐름은 비중을 조금 더 줄이고 싶은데.."하는 생각이 들 것이다. 이럴 때 사용할 수 있는 것이 바로 해당 종목의 거래 유형 번호를 저장하는 것이다. 아래의 도표를 살펴보도록 하자. 만약 당신의 주가 데이터를 ..
2022.04.09 -
이번 게시글에서는 키움증권 Open API를 이용한 자동 매매 시스템을 구축하고자 할 때, 어떠한 로직을 통해 이루어져야 하는지에 대해 간략하게나마 살펴볼 예정이다. 게시글을 통해 "아. 이러이러한 로직을 거쳐 동작하도록 구축하면 되겠구나."하는 정도의 감만 온다면 이 게시글의 목표는 모두 달성한 것이라 볼 수 있다. 키움증권 Open API는 기본적으로 실시간 등록을 통해 데이터 조회가 이루어진다. 그 말인 즉슨, 우리가 거래하고자 하는 종목은 실시간 등록이 되어 있어야 실시간으로 거래를 진행할 수 있다는 것이다. 대략적으로 설명하자면, 실시간 데이터는 아래와 같은 로직으로 이루어진다. SetRealReg(scrno, codelist, fidlist, realtype) : 실시간 조회 종목으로 등록 ↓..
자동 매매 프로그램의 가격 데이터 관리 - (1)이번 게시글에서는 키움증권 Open API를 이용한 자동 매매 시스템을 구축하고자 할 때, 어떠한 로직을 통해 이루어져야 하는지에 대해 간략하게나마 살펴볼 예정이다. 게시글을 통해 "아. 이러이러한 로직을 거쳐 동작하도록 구축하면 되겠구나."하는 정도의 감만 온다면 이 게시글의 목표는 모두 달성한 것이라 볼 수 있다. 키움증권 Open API는 기본적으로 실시간 등록을 통해 데이터 조회가 이루어진다. 그 말인 즉슨, 우리가 거래하고자 하는 종목은 실시간 등록이 되어 있어야 실시간으로 거래를 진행할 수 있다는 것이다. 대략적으로 설명하자면, 실시간 데이터는 아래와 같은 로직으로 이루어진다. SetRealReg(scrno, codelist, fidlist, realtype) : 실시간 조회 종목으로 등록 ↓..
2022.04.09 -
거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 거래 내역 조회하기 (3) 게시글 바로가기 이제 "주문구분"의 값이 무엇인가에 따라 데이터를 다른 곳에 입력하기만 하면 거래 내역은 모두 조회하게 된다. 주문 구분에 따라 데이터 입력하기 : def opw00007(trcode, recordname) 지난 게시글에서 현금 매수와 현금 매도까지 구분해두었다. 다만 이제 본인이 제작한 것은 분할매수의 알고리즘을 가지고 있다고 가정했을 경우에 필요한 데이터들이기 때문에, 매수 데이터가 발생했을 때 해당 매수 거래가 첫 번째 매수인지 두 번째 매수인지를 구분해야 할 것이다. 그러기 위해서는 앞서 제작했던 self.temporary_hold_account 변수의 ['first_b..
키움증권 Open API - 거래 내역 조회하기 (4)거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 거래 내역 조회하기 (3) 게시글 바로가기 이제 "주문구분"의 값이 무엇인가에 따라 데이터를 다른 곳에 입력하기만 하면 거래 내역은 모두 조회하게 된다. 주문 구분에 따라 데이터 입력하기 : def opw00007(trcode, recordname) 지난 게시글에서 현금 매수와 현금 매도까지 구분해두었다. 다만 이제 본인이 제작한 것은 분할매수의 알고리즘을 가지고 있다고 가정했을 경우에 필요한 데이터들이기 때문에, 매수 데이터가 발생했을 때 해당 매수 거래가 첫 번째 매수인지 두 번째 매수인지를 구분해야 할 것이다. 그러기 위해서는 앞서 제작했던 self.temporary_hold_account 변수의 ['first_b..
2022.04.06 -
거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 이번 게시글에서는 "주문구분"의 값이 "매수"인가 "매도"인가를 바탕으로 주문의 성격을 구분하고, 그를 바탕으로 거래 내역 데이터를 데이터프레임에 입력할 것이다. 다만 정말 중요하고 중요한 주의사항이 있다면, 이는 항상 일관적인 거래 방식을 따라 거래가 이루어졌어야 한다는 것이다. 예를 들어, 최대 2번의 분할매수가 이루어질 수 있고 매도는 최대 2번에 걸쳐 분할 매도가 이루어지는 거래 알고리즘이 있다고 가정해보자. 이 때 본인이 장을 보다가 프로그램이 아닌 본인이 "어, 이 종목은 사야겠는데?"하는 생각에 외부의 개입으로 추가적인 매수가 이루어진 경우에는 2번의 분할매수와 2번의 분할매도라는 기존의 알고리즘에서 벗어나..
키움증권 Open API - 거래 내역 조회하기 (3)거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 이번 게시글에서는 "주문구분"의 값이 "매수"인가 "매도"인가를 바탕으로 주문의 성격을 구분하고, 그를 바탕으로 거래 내역 데이터를 데이터프레임에 입력할 것이다. 다만 정말 중요하고 중요한 주의사항이 있다면, 이는 항상 일관적인 거래 방식을 따라 거래가 이루어졌어야 한다는 것이다. 예를 들어, 최대 2번의 분할매수가 이루어질 수 있고 매도는 최대 2번에 걸쳐 분할 매도가 이루어지는 거래 알고리즘이 있다고 가정해보자. 이 때 본인이 장을 보다가 프로그램이 아닌 본인이 "어, 이 종목은 사야겠는데?"하는 생각에 외부의 개입으로 추가적인 매수가 이루어진 경우에는 2번의 분할매수와 2번의 분할매도라는 기존의 알고리즘에서 벗어나..
2022.04.06