AUTO TRADE
좌측 카테고리를 눌러서 주제를 선택하시기 바랍니다.
-
지난 게시글에서는 SendOrder 메서드를 통해 주문을 접수하는 함수를 제작했고, 이번 게시글에서는 해당 함수를 활용해서 매수 매도 함수가 정상적으로 동작하도록 하기 위한 함수를 구현할 예정이다. def algo1_buy_1():을 제작해보자. 지난 게시글에서 작성했던 부분에 이어, def algo1_buy_1() 함수 내에 self._send_order() 함수를 추가해주도록 하자. """알고리즘 매수함수1""" def algo1_buy_1(): print("알고리즘1의 첫 번째 매수함수를 실행합니다.") self._send_order(): 우리는 지난 게시글에서 def _send_order() 함수를 제작하면서 SendOrder 메서드는 상당히 많은 파라미터를 요구한다는 점을 확인할 수 있었는데, ..
[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (3) - 매수 매도 함수 발생 시 디테일한 데이터 처리 구현하기 ②지난 게시글에서는 SendOrder 메서드를 통해 주문을 접수하는 함수를 제작했고, 이번 게시글에서는 해당 함수를 활용해서 매수 매도 함수가 정상적으로 동작하도록 하기 위한 함수를 구현할 예정이다. def algo1_buy_1():을 제작해보자. 지난 게시글에서 작성했던 부분에 이어, def algo1_buy_1() 함수 내에 self._send_order() 함수를 추가해주도록 하자. """알고리즘 매수함수1""" def algo1_buy_1(): print("알고리즘1의 첫 번째 매수함수를 실행합니다.") self._send_order(): 우리는 지난 게시글에서 def _send_order() 함수를 제작하면서 SendOrder 메서드는 상당히 많은 파라미터를 요구한다는 점을 확인할 수 있었는데, ..
2022.12.29 -
지난 게시글에서는 매수 함수와 매도 함수가 동작하는 그 로직에 대해 살펴봤고, 이번 게시글에서는 직접 매수 함수와 매도 함수를 만들어볼 예정이다. 물론 알고리즘은 어떻게 동작하는지 알고리즘은 어떤 로직으로 동작해야 하는지 등에 대해 모두 살펴봤었지만 아직은 그 내용이 익숙하지 않을 수 있다. 그래도 일단은 한 번 만들어 보고 그 후에 오류가 발생한다면 그 내용을 수정하는 방향으로 진행해보고자 한다. (물론 제작 과정에서 본인이 직접 겪은 오류들은 발생하지 않도록 할 것이다.) 제목에서 일단 매수와 매도를 따로 구분해놓긴 했지만, 실질적으로 두 함수는 모두 SendOrder 라는 하나의 메서드를 통해 동작한다. 차이점이 있다면 단순하게 매수를 실행할 함수에서 사용되는가 아니면 매도를 실행할 함수에서 사용되..
[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (2) - 매수 매도 함수 발생 시 디테일한 데이터 처리 구현하기 ①지난 게시글에서는 매수 함수와 매도 함수가 동작하는 그 로직에 대해 살펴봤고, 이번 게시글에서는 직접 매수 함수와 매도 함수를 만들어볼 예정이다. 물론 알고리즘은 어떻게 동작하는지 알고리즘은 어떤 로직으로 동작해야 하는지 등에 대해 모두 살펴봤었지만 아직은 그 내용이 익숙하지 않을 수 있다. 그래도 일단은 한 번 만들어 보고 그 후에 오류가 발생한다면 그 내용을 수정하는 방향으로 진행해보고자 한다. (물론 제작 과정에서 본인이 직접 겪은 오류들은 발생하지 않도록 할 것이다.) 제목에서 일단 매수와 매도를 따로 구분해놓긴 했지만, 실질적으로 두 함수는 모두 SendOrder 라는 하나의 메서드를 통해 동작한다. 차이점이 있다면 단순하게 매수를 실행할 함수에서 사용되는가 아니면 매도를 실행할 함수에서 사용되..
2022.12.29 -
실제로 여러 프로그래밍 프로그램(python, C++ 등)들을 사용하다보면 오류가 발생하는 것을 어렵지 않게 확인할 수 있다. 사실 파이썬에 대한 얕은 지식을 바탕으로 한 아주 작고 개인적인 견해를 내놓자면 프로그래밍은 사실 오류를 찾아내고 오류가 없도록 버그를 정리하는 일이 모두라고 봐도 무방하다고 본다. 그렇기 때문에 어떤 오류가 발생했을 경우에 그것을 보다 편리하고 직관적으로 확인할 수 있도록 하는 작업이 필요하다. 하지만 파이썬을 시작한지 얼마 지나지 않은 입문 개발자의 경우에는 아래와 같은 코드를 자주 사용할 것이다. print("여기에요?") ##### 코드 ##### print("아님 여기에요?") ##### 코드 ##### 이와 같은 코드를 작성해놓고, '여기에요?'가 잘 출력되었다면 그 ..
파이썬 로그(log)와 포매터 사용하기실제로 여러 프로그래밍 프로그램(python, C++ 등)들을 사용하다보면 오류가 발생하는 것을 어렵지 않게 확인할 수 있다. 사실 파이썬에 대한 얕은 지식을 바탕으로 한 아주 작고 개인적인 견해를 내놓자면 프로그래밍은 사실 오류를 찾아내고 오류가 없도록 버그를 정리하는 일이 모두라고 봐도 무방하다고 본다. 그렇기 때문에 어떤 오류가 발생했을 경우에 그것을 보다 편리하고 직관적으로 확인할 수 있도록 하는 작업이 필요하다. 하지만 파이썬을 시작한지 얼마 지나지 않은 입문 개발자의 경우에는 아래와 같은 코드를 자주 사용할 것이다. print("여기에요?") ##### 코드 ##### print("아님 여기에요?") ##### 코드 ##### 이와 같은 코드를 작성해놓고, '여기에요?'가 잘 출력되었다면 그 ..
2022.12.24 -
어느 날 갑자기 발생한 오류이다. 본인은 기본적으로 카카오톡 나와의 채팅방을 통해 압축 파일을 업로드한 후 데스크탑과 노트북에 파일을 옮기며 코드를 수정하고 수저이 완료되면 다시 데스크탑으로 옮기는 등의 복잡한 수작업을 통해 작업하고 있었다. 하지만 여느 때처럼 노트북으로 파일을 가져와 코드를 수정하려던 차에 다음과 같은 오류가 발생했다. 별 짓을 다 해봐도 고쳐지지 않는 오류라 그런지 열이 잔뜩 받았다. 세 줄 요약 환경 변수니 뭐니 다 하라 하는데, 변경사항도 없었는데 갑자기 안 됐다. 그렇다보니 재설치해도 안 되더라. 오류가 발생한 py 파일의 코드를 그대로 다른 파일로 복붙해서 사용하니 되더라. 이름도 재지정해도 된다. 근데 당신에게 발생한 오류의 원인은 확실하게 모르니 다른 방법들도 시도해보기 ..
[PyCharm] CreateProcess error=2, 지정된 파일을 찾을 수 없습니다.어느 날 갑자기 발생한 오류이다. 본인은 기본적으로 카카오톡 나와의 채팅방을 통해 압축 파일을 업로드한 후 데스크탑과 노트북에 파일을 옮기며 코드를 수정하고 수저이 완료되면 다시 데스크탑으로 옮기는 등의 복잡한 수작업을 통해 작업하고 있었다. 하지만 여느 때처럼 노트북으로 파일을 가져와 코드를 수정하려던 차에 다음과 같은 오류가 발생했다. 별 짓을 다 해봐도 고쳐지지 않는 오류라 그런지 열이 잔뜩 받았다. 세 줄 요약 환경 변수니 뭐니 다 하라 하는데, 변경사항도 없었는데 갑자기 안 됐다. 그렇다보니 재설치해도 안 되더라. 오류가 발생한 py 파일의 코드를 그대로 다른 파일로 복붙해서 사용하니 되더라. 이름도 재지정해도 된다. 근데 당신에게 발생한 오류의 원인은 확실하게 모르니 다른 방법들도 시도해보기 ..
2022.12.10 -
이번 게시글에서부터는 실시간으로 등록되어 있는 데이터를 기반으로 매수와 매도 함수가 동작하도록 하는 로직을 구현하는 방법에 대해 살펴볼 예정이다. 특정 종목을 실시간으로 등록하는 방법은 실시간 데이터 얻기 (1) 게시글부터 다루고 있으니, 아직 구현하지 않았다면 해당 게시글을 바탕으로 기능을 구현하고 나서 넘어 오도록 하자. 실시간 데이터를 기반으로 한 거래의 방법 실시간 데이터를 기반으로 거래를 진행하는 방법은 의외로 단순하다. 현재가 데이터가 발생했을 때, 해당 가격이 기존에 설정한 매수 가격의 범위 내에 들어가 있다면 매수 함수가 동작하도록 하면 된다. 매수 함수는 기본적으로 SendOrder 함수를 통해 동작하게 되는데, 아직은 함수를 구현하지 않은 상태일 것이다. 그렇다면 기존에 설정한 매수 가..
[자동 매매 시스템 구축하기] 매수 매도 함수 구현하기 (1) - 실시간 등록을 기반으로 한 매수 매도 함수의 동작 방법이번 게시글에서부터는 실시간으로 등록되어 있는 데이터를 기반으로 매수와 매도 함수가 동작하도록 하는 로직을 구현하는 방법에 대해 살펴볼 예정이다. 특정 종목을 실시간으로 등록하는 방법은 실시간 데이터 얻기 (1) 게시글부터 다루고 있으니, 아직 구현하지 않았다면 해당 게시글을 바탕으로 기능을 구현하고 나서 넘어 오도록 하자. 실시간 데이터를 기반으로 한 거래의 방법 실시간 데이터를 기반으로 거래를 진행하는 방법은 의외로 단순하다. 현재가 데이터가 발생했을 때, 해당 가격이 기존에 설정한 매수 가격의 범위 내에 들어가 있다면 매수 함수가 동작하도록 하면 된다. 매수 함수는 기본적으로 SendOrder 함수를 통해 동작하게 되는데, 아직은 함수를 구현하지 않은 상태일 것이다. 그렇다면 기존에 설정한 매수 가..
2022.12.08 -
지난 게시글에서 종목코드와 전일 종가 데이터를 인자로 전달받아 상한가와 하한가를 계산해내는 함수를 구현했다. 그렇다면 이제 실제 데이터를 입력해봄으로써 상하한가 데이터를 올바르게 계산하고 있는지를 확인해보도록 하자. 여태까지 제작했던 게시글을 새로운 파일에서 새로운 클래스 내에 입력해서 테스트해볼 것인데, 그 코드는 아래와 같다. def __init__(self): 부분에서는 해당 클래스가 실행되었을 때 실행되는 부분을 의미한다. 즉, test라는 클래스가 호출됐을 때 self.kospi_code_list 와 self.kosdaq_code_list 변수 내에 각각 ['005930', '066580'], ['000020', '000040']이라는 데이터를 입력하도록 하는 것이다. 다만 우리는..
[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (4) - 실제 데이터 확인해보기지난 게시글에서 종목코드와 전일 종가 데이터를 인자로 전달받아 상한가와 하한가를 계산해내는 함수를 구현했다. 그렇다면 이제 실제 데이터를 입력해봄으로써 상하한가 데이터를 올바르게 계산하고 있는지를 확인해보도록 하자. 여태까지 제작했던 게시글을 새로운 파일에서 새로운 클래스 내에 입력해서 테스트해볼 것인데, 그 코드는 아래와 같다. def __init__(self): 부분에서는 해당 클래스가 실행되었을 때 실행되는 부분을 의미한다. 즉, test라는 클래스가 호출됐을 때 self.kospi_code_list 와 self.kosdaq_code_list 변수 내에 각각 ['005930', '066580'], ['000020', '000040']이라는 데이터를 입력하도록 하는 것이다. 다만 우리는..
2022.12.03 -
지난 게시글에서 호가가격단위 미만 절사를 적용하는 함수를 구현했으니, 이번에는 전달받은 종목코드를 기반으로 시장을 구분하고 그 시장 구분에 따라 각기 달리 적용되는 가격 범위 내에서 각기 다른 measure 값을 전달하도록 하는 함수를 구현해보도록 하자. 상하한가 계산 함수 생성하기 이번에 생성할 함수는 종목코드와 전일 종가(이하 기준 가격) 데이터를 받아온 후에 그 데이터를 기반으로 코스피와 코스닥 등의 시장 구분을 하고, 시장 구분에 따라 각기 다른 함수를 적용하여 상하한가를 계산하는 함수이다. def cal_limit(self, item_code, yclose): yclose = int(yclose) price_range = float(yclose * 0.3) 가장 먼저 cal_limit 이라는 이..
[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (3) - 상하한가 계산 함수 생성하기지난 게시글에서 호가가격단위 미만 절사를 적용하는 함수를 구현했으니, 이번에는 전달받은 종목코드를 기반으로 시장을 구분하고 그 시장 구분에 따라 각기 달리 적용되는 가격 범위 내에서 각기 다른 measure 값을 전달하도록 하는 함수를 구현해보도록 하자. 상하한가 계산 함수 생성하기 이번에 생성할 함수는 종목코드와 전일 종가(이하 기준 가격) 데이터를 받아온 후에 그 데이터를 기반으로 코스피와 코스닥 등의 시장 구분을 하고, 시장 구분에 따라 각기 다른 함수를 적용하여 상하한가를 계산하는 함수이다. def cal_limit(self, item_code, yclose): yclose = int(yclose) price_range = float(yclose * 0.3) 가장 먼저 cal_limit 이라는 이..
2022.11.27 -
지난 게시글에서는 주식시장에서 상하한가 데이터가 어떠한 절차로 계산되는지에 대해 살펴보았다. 이번 게시글에서는 그 개념을 함수를 생성하고 함수 내에 계산 로직을 추가하는 등의 기능을 구현함으로써 상하한가 데이터를 자동적으로 계산하도록 할 것이다. 코스피와 코스닥을 먼저 구분해주자. 코스피와 코스닥을 구분하여 종목코드 리스트를 얻어오는 이유는 단순하다. 해당 종목이 상장된 시장이 코스피인가 코스닥인가에 따라 호가가격단위 미만 절사 기준 금액이 달라지기 때문이다. 실제로 대한민국 증권시장에는 약 2,000개가 넘는 종목이 상장되어 있는데, 다행히도 그 데이터를 매일매일 저장해줄 필요는 없다. 왜나하면 키움증권 Open API 내에서는 코스피 시장에 상장된 종목 리스트와 코스닥 시장에 상장된 종목 리스트를 반..
[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (2) - 호가가격단위 절사 함수 생성하기지난 게시글에서는 주식시장에서 상하한가 데이터가 어떠한 절차로 계산되는지에 대해 살펴보았다. 이번 게시글에서는 그 개념을 함수를 생성하고 함수 내에 계산 로직을 추가하는 등의 기능을 구현함으로써 상하한가 데이터를 자동적으로 계산하도록 할 것이다. 코스피와 코스닥을 먼저 구분해주자. 코스피와 코스닥을 구분하여 종목코드 리스트를 얻어오는 이유는 단순하다. 해당 종목이 상장된 시장이 코스피인가 코스닥인가에 따라 호가가격단위 미만 절사 기준 금액이 달라지기 때문이다. 실제로 대한민국 증권시장에는 약 2,000개가 넘는 종목이 상장되어 있는데, 다행히도 그 데이터를 매일매일 저장해줄 필요는 없다. 왜나하면 키움증권 Open API 내에서는 코스피 시장에 상장된 종목 리스트와 코스닥 시장에 상장된 종목 리스트를 반..
2022.11.27 -
키움증권 Open API는 상하한가 데이터를 조회할 수 있는 트랜잭션으로 OPT10001 기능을 제공하고 있긴 하지만, 사실상 실시간 데이터를 수신하는 도중에 별도로 서버와의 통신을 시도해야 한다는 점을 고려하면 이 기능이 그렇게 달갑지 않게 다가올 수도 있다. 그렇다면 우리가 직접 상하한가를 계산하는 기능을 만들어주면 될 일이다. 그렇다면 우리는 상하한가 데이터가 언제 필요할까? 얼핏 생각해보면 굳이 필요할 것 같진 않다. 하지만 키움증권 Open API의 경우 정정 주문을 접수할 때, 시장가 주문과 지정가 주문 간에는 정정 주문이 접수되지 않는다는 점을 고려하면 반드시 필요한 기능이다. 결론부터 얘기하자면 시장가 주문을 접수했는데 체결되지 않고 지정가 주문으로 접수할 일은 없다. 다만 반대의 경우, ..
[자동 매매 시스템 구축하기] 상하한가 데이터 계산하기 (1) - 계산 방법 이해하기키움증권 Open API는 상하한가 데이터를 조회할 수 있는 트랜잭션으로 OPT10001 기능을 제공하고 있긴 하지만, 사실상 실시간 데이터를 수신하는 도중에 별도로 서버와의 통신을 시도해야 한다는 점을 고려하면 이 기능이 그렇게 달갑지 않게 다가올 수도 있다. 그렇다면 우리가 직접 상하한가를 계산하는 기능을 만들어주면 될 일이다. 그렇다면 우리는 상하한가 데이터가 언제 필요할까? 얼핏 생각해보면 굳이 필요할 것 같진 않다. 하지만 키움증권 Open API의 경우 정정 주문을 접수할 때, 시장가 주문과 지정가 주문 간에는 정정 주문이 접수되지 않는다는 점을 고려하면 반드시 필요한 기능이다. 결론부터 얘기하자면 시장가 주문을 접수했는데 체결되지 않고 지정가 주문으로 접수할 일은 없다. 다만 반대의 경우, ..
2022.11.27 -
이번 게시글에서는 키움증권 Open API를 활용한 주문 데이터 관리 기능을 구현하기 위해 꼭 알고 있어야 하는 필요한 요소에 대해 살펴보고자 한다. 첫째, 원주문번호 데이터를 관리해야 한다. 앞서 주문 데이터를 관리하기 위한 기능을 구현하는 과정에서 살펴봤듯이, 신규 주문과 정정 주문 등 주문의 유형 별로 발생하는 데이터의 형태가 다르고 해당 데이터를 처리해야 하는 방법도 상이하다. 따라서 어떤 주문이 되었든 간에 주문이 접수되었다면 해당 주문의 원주문번호를 반드시 기록해야 하고, 해당 원주문번호는 다른 곳에서 쉽게 찾아서 사용할 수 있도록 종목코드 및 주문 수량 등과 같은 데이터와 함께 하나의 몸처럼 움직이도록 관리해줘야 한다. 둘째, 주문은 1초에 5회까지만 가능하다. 이 내용은 특히 장이 시작되면..
[자동 매매 시스템 구축하기] 주문 정보 관리하기 (8) - 주문 관련 기능 구현 시 주의할 점이번 게시글에서는 키움증권 Open API를 활용한 주문 데이터 관리 기능을 구현하기 위해 꼭 알고 있어야 하는 필요한 요소에 대해 살펴보고자 한다. 첫째, 원주문번호 데이터를 관리해야 한다. 앞서 주문 데이터를 관리하기 위한 기능을 구현하는 과정에서 살펴봤듯이, 신규 주문과 정정 주문 등 주문의 유형 별로 발생하는 데이터의 형태가 다르고 해당 데이터를 처리해야 하는 방법도 상이하다. 따라서 어떤 주문이 되었든 간에 주문이 접수되었다면 해당 주문의 원주문번호를 반드시 기록해야 하고, 해당 원주문번호는 다른 곳에서 쉽게 찾아서 사용할 수 있도록 종목코드 및 주문 수량 등과 같은 데이터와 함께 하나의 몸처럼 움직이도록 관리해줘야 한다. 둘째, 주문은 1초에 5회까지만 가능하다. 이 내용은 특히 장이 시작되면..
2022.09.25 -
지난 게시글에서는 정정 주문이 발생했을 때 어떠한 절차에 따라 데이터가 발생하는지에 대해 살펴보고 프로그램이 그 순서에 따라 오류 없이 동작하도록 구현하기 위해 고려해야 하는 부분에 대해 살펴보았다. 그러면서 원주문 번호가 0000000일 때 해당 종목 코드 데이터가 self.order_info 변수 내에 입력되어 있는지 아닌지를 기준으로 신규 주문인가 정정 주문인가를 구분하여 각각 데이터를 다르게 입력하도록 구현하였다. 이번 게시글에서는 지난 번에 다루지 않은 원주문 번호가 000000이 아닌 경우에는 어떻게 데이터를 입력할 것인지에 대해 살펴보고, 마찬가지로 오류 없이 데이터를 입력하도록 하기 위한 코드를 구현할 계획이다. 원주문번호가 0000000이 아닌 경우 앞서 설명했듯이, 원주문번호가 0000..
[자동 매매 시스템 구축하기] 주문 정보 관리하기 (7) - 정정 주문 데이터 로직 확인하기 ②지난 게시글에서는 정정 주문이 발생했을 때 어떠한 절차에 따라 데이터가 발생하는지에 대해 살펴보고 프로그램이 그 순서에 따라 오류 없이 동작하도록 구현하기 위해 고려해야 하는 부분에 대해 살펴보았다. 그러면서 원주문 번호가 0000000일 때 해당 종목 코드 데이터가 self.order_info 변수 내에 입력되어 있는지 아닌지를 기준으로 신규 주문인가 정정 주문인가를 구분하여 각각 데이터를 다르게 입력하도록 구현하였다. 이번 게시글에서는 지난 번에 다루지 않은 원주문 번호가 000000이 아닌 경우에는 어떻게 데이터를 입력할 것인지에 대해 살펴보고, 마찬가지로 오류 없이 데이터를 입력하도록 하기 위한 코드를 구현할 계획이다. 원주문번호가 0000000이 아닌 경우 앞서 설명했듯이, 원주문번호가 0000..
2022.09.25 -
지난 게시글에서는 사전에 생성했던 tableWidget 객체이며 주문 정보 데이터를 입력할 객체인 tableWidget_2 에 주문과 관련된 정보를 입력하는 기능을 구현했다. 사실 주문의 접수와 체결로 인해 발생하는 여러 데이터를 처리하고 GUI를 통해 나타내도록 하는 기능은 지금까지 모두 구현했다고 봐도 무방하지만, 이번 게시글에서는 더 나아가 단순한 주문 접수 외에 정정 주문과 취소 주문이 이루어졌을 때 데이터가 어떤 절차를 거쳐 발생하게 되며 우리는 그 데이터를 어떻게 처리해야 하는지에 대해 살펴볼 예정이다. 정정 주문과 취소 주문의 동작 로직 def recieve_chejandata 함수 내에서, 1차적으로 sGubun 에 의해 국내주식 잔고통보인가 아니면 주식체결통보인가를 구분해낸다. 이후 sG..
[자동 매매 시스템 구축하기] 주문 정보 관리하기 (6) - 정정 주문 데이터 로직 확인하기 ①지난 게시글에서는 사전에 생성했던 tableWidget 객체이며 주문 정보 데이터를 입력할 객체인 tableWidget_2 에 주문과 관련된 정보를 입력하는 기능을 구현했다. 사실 주문의 접수와 체결로 인해 발생하는 여러 데이터를 처리하고 GUI를 통해 나타내도록 하는 기능은 지금까지 모두 구현했다고 봐도 무방하지만, 이번 게시글에서는 더 나아가 단순한 주문 접수 외에 정정 주문과 취소 주문이 이루어졌을 때 데이터가 어떤 절차를 거쳐 발생하게 되며 우리는 그 데이터를 어떻게 처리해야 하는지에 대해 살펴볼 예정이다. 정정 주문과 취소 주문의 동작 로직 def recieve_chejandata 함수 내에서, 1차적으로 sGubun 에 의해 국내주식 잔고통보인가 아니면 주식체결통보인가를 구분해낸다. 이후 sG..
2022.09.19