AUTO TRADE
좌측 카테고리를 눌러서 주제를 선택하시기 바랍니다.
-
가끔 데이터프레임 내에서 특정 값이 존재하는 행의 인덱스 번호를 얻어와야 할 때가 있다. 왜냐하면 데이터프레임의 특정 값에 접근하기 위해서는 인덱스 번호가 무엇보다도 가장 기본적으로 사용되는 방법이기도 하며, 무엇보다도 가장 간단한 접근 방법이기 때문이다. 예를 들어, 아래와 같은 데이터프레임이 있다고 가정해보자.codeopenhighlowclosepre_closevix00010010001300 00030013001350 우리가 이 때 종목코드가 000100인 데이터가 데이터프레임의 몇 번째 행에 입력되어 있는지를 알아야 000100 종목코드가 입력되어 있는 행의 다른 데이터(시가, 고가, 저가 등)에도 접근할 수 있다. 특정 칼럼의 특정 값이 위치한 인덱스 번호 얻어오기이해를 돕기 위해, 위..
데이터프레임 인덱스 값 얻어오기가끔 데이터프레임 내에서 특정 값이 존재하는 행의 인덱스 번호를 얻어와야 할 때가 있다. 왜냐하면 데이터프레임의 특정 값에 접근하기 위해서는 인덱스 번호가 무엇보다도 가장 기본적으로 사용되는 방법이기도 하며, 무엇보다도 가장 간단한 접근 방법이기 때문이다. 예를 들어, 아래와 같은 데이터프레임이 있다고 가정해보자.codeopenhighlowclosepre_closevix00010010001300 00030013001350 우리가 이 때 종목코드가 000100인 데이터가 데이터프레임의 몇 번째 행에 입력되어 있는지를 알아야 000100 종목코드가 입력되어 있는 행의 다른 데이터(시가, 고가, 저가 등)에도 접근할 수 있다. 특정 칼럼의 특정 값이 위치한 인덱스 번호 얻어오기이해를 돕기 위해, 위..
2021.07.22 -
지난 게시글에서는 데이터프레임을 제작하는 방법에 대해 알아보았으니, 이번 게시글에서는 데이터프레임 안에 입력되어 있는 데이터에 접근하는 방법을 살펴보도록 하자. 데이터에 접근하는 방법으로는 크게 iloc과 loc이 있다. 지난 시간에 제작했던 데이터프레임 자료는 아래와 같다. 인덱스 번호 칼럼 1(열 1) 칼럼 2(열 2) 칼럼 3(열 3) 칼럼 4(열 4) 행 1 a b c d 행 2 g h i j 행 3 m n o p 행 4 s t u v 데이터에 접근하는 방법 중 iloc은 주로 인덱스 번호를 통해 데이터에 접근하고, loc은 칼럼명을 통해 데이터에 접근한다고 설명하는 게시글들이 많아서 본인도 처음에는 수많은 차이점이 있을 줄 알았는데, 막상 여러 번 사용해보니 딱히 그렇지도 않았다. 데이터 접근 ..
데이터프레임 사용하기 - iloc, loc지난 게시글에서는 데이터프레임을 제작하는 방법에 대해 알아보았으니, 이번 게시글에서는 데이터프레임 안에 입력되어 있는 데이터에 접근하는 방법을 살펴보도록 하자. 데이터에 접근하는 방법으로는 크게 iloc과 loc이 있다. 지난 시간에 제작했던 데이터프레임 자료는 아래와 같다. 인덱스 번호 칼럼 1(열 1) 칼럼 2(열 2) 칼럼 3(열 3) 칼럼 4(열 4) 행 1 a b c d 행 2 g h i j 행 3 m n o p 행 4 s t u v 데이터에 접근하는 방법 중 iloc은 주로 인덱스 번호를 통해 데이터에 접근하고, loc은 칼럼명을 통해 데이터에 접근한다고 설명하는 게시글들이 많아서 본인도 처음에는 수많은 차이점이 있을 줄 알았는데, 막상 여러 번 사용해보니 딱히 그렇지도 않았다. 데이터 접근 ..
2021.07.20 -
데이터프레임은 크게 칼럼(열)과 인덱스(행)으로 구분되어 있으며, 각 위치에 접근하는 방법으로 iloc과 loc을 가장 흔히 사용한다. 아래와 같은 데이터프레임이 있다고 가정해보도록 하자. 아래와 같은 데이터프레임을 제작하는 방법으로는 가장 크게 두 가지 방법이 있다. 첫 번째 방법은 딕셔너리를 통해 데이터프레임을 제작하는 것이고, 두 번째 방법은 하나의 행을 제작한 후에 기존에 있는 데이터프레임에 합치는 것이다. index 칼럼 1(열 1) 칼럼 2(열 2) 칼럼 3(열 3) 칼럼 4(열 4) 칼럼 5(열 5) 칼럼 6(열 6) 1(행 1) a b c d e f 2(행 2) g h i j k l 3(행 3) m n o p q r 4(행 4) s t u v w x 데이터프레임 제작하기 - (1) 딕셔너리..
데이터프레임 만들기데이터프레임은 크게 칼럼(열)과 인덱스(행)으로 구분되어 있으며, 각 위치에 접근하는 방법으로 iloc과 loc을 가장 흔히 사용한다. 아래와 같은 데이터프레임이 있다고 가정해보도록 하자. 아래와 같은 데이터프레임을 제작하는 방법으로는 가장 크게 두 가지 방법이 있다. 첫 번째 방법은 딕셔너리를 통해 데이터프레임을 제작하는 것이고, 두 번째 방법은 하나의 행을 제작한 후에 기존에 있는 데이터프레임에 합치는 것이다. index 칼럼 1(열 1) 칼럼 2(열 2) 칼럼 3(열 3) 칼럼 4(열 4) 칼럼 5(열 5) 칼럼 6(열 6) 1(행 1) a b c d e f 2(행 2) g h i j k l 3(행 3) m n o p q r 4(행 4) s t u v w x 데이터프레임 제작하기 - (1) 딕셔너리..
2021.07.19 -
[ 오류 코드 ] Traceback (most recent call last): File " ~~ ", ok_packet['info_msg'] = op_packet['info_msg'].decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 38: invalid start byte 또는 mysql.connector.errors.InterfaceError: Failed parsing OK packet. [ 결론 ] 테이블 또는 데이터베이스의 이름이 utf-8 형식을 지원하지 않아 발생하는 문제로, 인식할 수 있게 변경해주면 된다. Table name : 000020 → s000020 DataBase name :..
MySQL 오류 : UnicodeDecodeError: 'utf-8' codec can't decode byte ~~ invalid start byte[ 오류 코드 ] Traceback (most recent call last): File " ~~ ", ok_packet['info_msg'] = op_packet['info_msg'].decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 38: invalid start byte 또는 mysql.connector.errors.InterfaceError: Failed parsing OK packet. [ 결론 ] 테이블 또는 데이터베이스의 이름이 utf-8 형식을 지원하지 않아 발생하는 문제로, 인식할 수 있게 변경해주면 된다. Table name : 000020 → s000020 DataBase name :..
2021.07.13 -
[오류 코드] PermissionError: [Errno 13] Permission denied: [발생 원인] 파이썬을 통해 엑셀 파일에 접근할 때, 엑셀 파일이 열려 있을 때 발생하는 오류 [해결 방법] 엑셀 파일을 끄고 코드 실행
PermissionError: [Errno 13] Permission denied:[오류 코드] PermissionError: [Errno 13] Permission denied: [발생 원인] 파이썬을 통해 엑셀 파일에 접근할 때, 엑셀 파일이 열려 있을 때 발생하는 오류 [해결 방법] 엑셀 파일을 끄고 코드 실행
2021.07.13 -
지난 게시글을 마지막으로 백테스팅 코드 구축을 마무리할 수 있을 거라 생각했지만, 거래 데이터 상에서 존재하는 오류가 있어서 다시 글을 게시하게 되었다. 일단 오류부터 살펴보도록 하자. 그렇게 고쳤는데 오류가 아직도 있다고? 바로 특정 종목 코드가 거래 데이터 변수인 self.df_tracking_data 안에서 몇 번째 인덱스에 위치해 있는지를 얻어오는 코드를 실행하는 과정에서 발생하는 오류이다. 예를 들어, 000100이라는 코드를 가진 종목을 2020년 1월 3일에 매수했고 2020년 1월 5일에 첫 번째 매도, 2020년 1월 10일에 손절매를 했다. 이후 2020년 3월 10일에 그 종목을 다시 매수했고, 2020년 3월 15일에 첫 번째 매도, 2020년 3월 20일에 두 번재 매도를 했다고 ..
백테스팅 구축 (25) - 거래별 고유정보 입력하기지난 게시글을 마지막으로 백테스팅 코드 구축을 마무리할 수 있을 거라 생각했지만, 거래 데이터 상에서 존재하는 오류가 있어서 다시 글을 게시하게 되었다. 일단 오류부터 살펴보도록 하자. 그렇게 고쳤는데 오류가 아직도 있다고? 바로 특정 종목 코드가 거래 데이터 변수인 self.df_tracking_data 안에서 몇 번째 인덱스에 위치해 있는지를 얻어오는 코드를 실행하는 과정에서 발생하는 오류이다. 예를 들어, 000100이라는 코드를 가진 종목을 2020년 1월 3일에 매수했고 2020년 1월 5일에 첫 번째 매도, 2020년 1월 10일에 손절매를 했다. 이후 2020년 3월 10일에 그 종목을 다시 매수했고, 2020년 3월 15일에 첫 번째 매도, 2020년 3월 20일에 두 번재 매도를 했다고 ..
2021.07.12 -
지난 게시글에서 전체적인 백테스팅 결과값을 확인했으니, 이번 게시글에서는 그 결과는 어떻고 중간에 추가적으로 수정할 사항이 있는지 등에 대해 확인해보도록 하겠다. 이전에도 한번 해봤던 데이터 분석 방법이므로 크게 걱정할 것은 없고, 단순히 ① 수익 거래와 손실 거래의 비율은 어떤지, ② 손익 비율은 어떻게 되는지 그리고 ③ 어떻게 하면 손실을 줄일 수 있는지에 대해 살펴보도록 하겠다. 전체 종목 수익금액 및 수익률 계산하기 수익금액의 경우에는 우리가 첫 번째 매도와 두 번째 매도, 세 번째 매도 금액을 합한 금액이고 손절 금액은 맨 마지막에 있는 매도 금액이다. 어찌됐든 간에 해당 거래를 통해서 얻어들인 수익금액은 수익 매도 금액과 손절 매도 금액을 합한 금액이기 때문에, 그 값을 모두 더해주도록 하자...
백테스팅 구축 (24) - 결과 데이터 확인하기지난 게시글에서 전체적인 백테스팅 결과값을 확인했으니, 이번 게시글에서는 그 결과는 어떻고 중간에 추가적으로 수정할 사항이 있는지 등에 대해 확인해보도록 하겠다. 이전에도 한번 해봤던 데이터 분석 방법이므로 크게 걱정할 것은 없고, 단순히 ① 수익 거래와 손실 거래의 비율은 어떤지, ② 손익 비율은 어떻게 되는지 그리고 ③ 어떻게 하면 손실을 줄일 수 있는지에 대해 살펴보도록 하겠다. 전체 종목 수익금액 및 수익률 계산하기 수익금액의 경우에는 우리가 첫 번째 매도와 두 번째 매도, 세 번째 매도 금액을 합한 금액이고 손절 금액은 맨 마지막에 있는 매도 금액이다. 어찌됐든 간에 해당 거래를 통해서 얻어들인 수익금액은 수익 매도 금액과 손절 매도 금액을 합한 금액이기 때문에, 그 값을 모두 더해주도록 하자...
2021.07.11 -
지난 게시글에서 백테스팅 결과값들을 확인해보니 002320 종목이 수익권에 도달했음에도 불구하고 매도가 이루어지지 않은 모습을 확인할 수 있었다. 따라서 이번 게시글에서는 어떤 부분이 문제였는지 확인하고, 그 부분을 수정한 후에 전체적인 백테스팅 결과를 확인해보도록 하겠다. 매도 함수 수정하기 바로 아래와 같은 부분 때문에 발생한 오류였다. 즉, 첫 번째 매도 조건을 판단하는 데에 있어서 수익률 조건이 5% float(self.chart_data['high'].iloc[1]) >= (float(row[3]) * float(self.first_sellprofit)): ## 두 번째 수익률 조건 if float(self.chart_data['high'].iloc[1]) >= (float(row[3]) * f..
백테스팅 구축 (23) - 매도 함수 수정하기 ⑦지난 게시글에서 백테스팅 결과값들을 확인해보니 002320 종목이 수익권에 도달했음에도 불구하고 매도가 이루어지지 않은 모습을 확인할 수 있었다. 따라서 이번 게시글에서는 어떤 부분이 문제였는지 확인하고, 그 부분을 수정한 후에 전체적인 백테스팅 결과를 확인해보도록 하겠다. 매도 함수 수정하기 바로 아래와 같은 부분 때문에 발생한 오류였다. 즉, 첫 번째 매도 조건을 판단하는 데에 있어서 수익률 조건이 5% float(self.chart_data['high'].iloc[1]) >= (float(row[3]) * float(self.first_sellprofit)): ## 두 번째 수익률 조건 if float(self.chart_data['high'].iloc[1]) >= (float(row[3]) * f..
2021.07.11 -
지난 게시글에서도 이야기했듯이 아직 수정해야 할 부분이 하나 있는데, 그 내용은 단순한 내용이다. 바로 현재 보유 수량에 따른 거래 진행 방법의 수정인데, 아래의 사진을 참고하도록 하자. 작아서 잘 안 보일 수도 있으니 간단하게 설명을 해보자면 초기 매수 수량은 3주인데 반해, 첫 번째 매도 조건에서는 20%에 해당하는 1주를 매도했고, 두 번째 매도 조건에서는 50%에 해당하는 2주를 매도했다. 지금까지의 상황으로 보면 3주를 매수했고 이후에는 3주를 매도했기 때문에 추가적인 매도는 이루어지지 않아야 하지만, t_sell_quantity 칼럼에도 2라는 값이 입력되어 있는 것으로 보아 3주를 매수했음에도 5주를 매도했음을 확인할 수 있다. 즉, 없는 주식을 판 것이다. 매도 좀 똑바로 해라 이제 문제가..
백테스팅 구축 (22) - 매도 함수 수정하기 ⑥지난 게시글에서도 이야기했듯이 아직 수정해야 할 부분이 하나 있는데, 그 내용은 단순한 내용이다. 바로 현재 보유 수량에 따른 거래 진행 방법의 수정인데, 아래의 사진을 참고하도록 하자. 작아서 잘 안 보일 수도 있으니 간단하게 설명을 해보자면 초기 매수 수량은 3주인데 반해, 첫 번째 매도 조건에서는 20%에 해당하는 1주를 매도했고, 두 번째 매도 조건에서는 50%에 해당하는 2주를 매도했다. 지금까지의 상황으로 보면 3주를 매수했고 이후에는 3주를 매도했기 때문에 추가적인 매도는 이루어지지 않아야 하지만, t_sell_quantity 칼럼에도 2라는 값이 입력되어 있는 것으로 보아 3주를 매수했음에도 5주를 매도했음을 확인할 수 있다. 즉, 없는 주식을 판 것이다. 매도 좀 똑바로 해라 이제 문제가..
2021.07.11 -
이전 게시글에서는 백테스팅 결과를 확인했는데, 두 번째 매도 조건인 10% 수익과 세 번째 매도 조건인 15% 수익이 발생했음에도 불구하고 매도가 이뤄지지 않았다는 사실을 확인했다. 그렇다면 왜 매도 조건이 충족됐지만 매도할 수 없었는지 다시 확인해보도록 하자. 첫 번째 매도는 잘 된 거야? 일단 가장 먼저, 첫 번째 매도는 제대로 이뤄진 것인지 확인하기 위해 매도 가격( f_sell_price )이 매수 가격( buy_price ) 대비 5%의 수익이 발생한 가격인지 그리고 매도 비율은 0.2 비율에 맞춰서 잘 이뤄진 것인지 확인해보도록 하자. 수익률은 매도 가격 나누기 매수 가격이고, 매도 비율은 매도 수량 나누기 매수 수량이다. 데이터를 보니 수익률이 정확하게 1.05, 즉 5%의 수익률을 거둔 경..
백테스팅 구축 (21) - 매도 전략 수정하기 ⑤이전 게시글에서는 백테스팅 결과를 확인했는데, 두 번째 매도 조건인 10% 수익과 세 번째 매도 조건인 15% 수익이 발생했음에도 불구하고 매도가 이뤄지지 않았다는 사실을 확인했다. 그렇다면 왜 매도 조건이 충족됐지만 매도할 수 없었는지 다시 확인해보도록 하자. 첫 번째 매도는 잘 된 거야? 일단 가장 먼저, 첫 번째 매도는 제대로 이뤄진 것인지 확인하기 위해 매도 가격( f_sell_price )이 매수 가격( buy_price ) 대비 5%의 수익이 발생한 가격인지 그리고 매도 비율은 0.2 비율에 맞춰서 잘 이뤄진 것인지 확인해보도록 하자. 수익률은 매도 가격 나누기 매수 가격이고, 매도 비율은 매도 수량 나누기 매수 수량이다. 데이터를 보니 수익률이 정확하게 1.05, 즉 5%의 수익률을 거둔 경..
2021.07.10 -
지난 게시글에서는 첫 번째 매도 조건이 충족됐을 경우 어떻게 코드를 구축하는지에 대해 살펴봤었으니, 이번 게시글에서는 두 번째 매도 조건과 세 번째 매도 조건이 충족됐을 때에는 어떤 방식으로 매도를 진행해야 하는지에 대해 살펴보도록 하자. 두 번쨰 매도 조건 수정하기 두 번째 매도 조건부터는 남아 있는 수량을 확실하게 계산해주어야 한다. 즉, 현재 보유 종목 데이터가 포함되어 있는 변수에서 현재 보유 중인 주식수에서 첫 번째 매도 조건에서 매도한 수량만큼을 제외한 나머지 수량 안에 우리가 매도할 수 있는 수량이 충분히 포함되어 있는지를 확인해주어야 한다는 것이다. 일단 첫 번째 매도 조건문 하에서 제작했던 코드를 그대로 가지고 와서 두 번째 매도 조건에도 제작해주도록 하자. 변경해주어야 할 부분은 sel..
백테스팅 구축 (20) - 매도 전략 수정하기 ④지난 게시글에서는 첫 번째 매도 조건이 충족됐을 경우 어떻게 코드를 구축하는지에 대해 살펴봤었으니, 이번 게시글에서는 두 번째 매도 조건과 세 번째 매도 조건이 충족됐을 때에는 어떤 방식으로 매도를 진행해야 하는지에 대해 살펴보도록 하자. 두 번쨰 매도 조건 수정하기 두 번째 매도 조건부터는 남아 있는 수량을 확실하게 계산해주어야 한다. 즉, 현재 보유 종목 데이터가 포함되어 있는 변수에서 현재 보유 중인 주식수에서 첫 번째 매도 조건에서 매도한 수량만큼을 제외한 나머지 수량 안에 우리가 매도할 수 있는 수량이 충분히 포함되어 있는지를 확인해주어야 한다는 것이다. 일단 첫 번째 매도 조건문 하에서 제작했던 코드를 그대로 가지고 와서 두 번째 매도 조건에도 제작해주도록 하자. 변경해주어야 할 부분은 sel..
2021.07.10 -
지난 게시글에서는 분할 매도 과정에서 발생할 수 있는 문제점을 어떻게 처리해야 하는지 그리고 조건문 아래에는 어떤 조건을 설정해두어야 오류 없이 데이터를 저장할 수 있는지에 대해 살펴보았다. 따라서 이번 게시글에서는 조건문 아래를 제작한 후 전체 코드를 디버그함으로써 결과값을 확인해보도록 하겠다. 손절 조건 수정하기 일단 기본적으로 우리는 이전에 5일 이동평균선과 20일 이동평균선의 데드 크로스가 발생했을 경우 수익 실현을 하는 코드를 제작했었는데, 저번 게시글에서 이 전략을 수정해서 데드 크로스가 발생했을 경우에는 보유 수량을 모두 매도하는 방향으로 설정했고 수익 실현 구간이 아닌 손절매 구간으로 수정했다. 따라서 해당 코드를 손절매 구간으로 설정했기 때문에 데이터를 입력하는 지점 역시 기존의 칼럼이 ..
백테스팅 구축 (19) - 매도 전략 수정하기 ③지난 게시글에서는 분할 매도 과정에서 발생할 수 있는 문제점을 어떻게 처리해야 하는지 그리고 조건문 아래에는 어떤 조건을 설정해두어야 오류 없이 데이터를 저장할 수 있는지에 대해 살펴보았다. 따라서 이번 게시글에서는 조건문 아래를 제작한 후 전체 코드를 디버그함으로써 결과값을 확인해보도록 하겠다. 손절 조건 수정하기 일단 기본적으로 우리는 이전에 5일 이동평균선과 20일 이동평균선의 데드 크로스가 발생했을 경우 수익 실현을 하는 코드를 제작했었는데, 저번 게시글에서 이 전략을 수정해서 데드 크로스가 발생했을 경우에는 보유 수량을 모두 매도하는 방향으로 설정했고 수익 실현 구간이 아닌 손절매 구간으로 수정했다. 따라서 해당 코드를 손절매 구간으로 설정했기 때문에 데이터를 입력하는 지점 역시 기존의 칼럼이 ..
2021.07.10