PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 알고리즘 구축하기 (14) - 매수 예정 종목 데이터프레임 확인하기 ③

  • -

지난 게시글에서는 차트 데이터를 알고리즘 파일에 전달한 후 계산 절차를 거쳐 매수 예정 가격 데이터를 얻어오는 기능까지 모두 구현했다. 이번 게시글에서는 종목별로 계산된 매수 예정 가격 데이터 데이터프레임을 모두 합쳐서 하나의 파일로 만든 후에, 그 결과 데이터를 확인하는 것까지 구현할 예정이다.

 

 

합칠 대상이 되는 데이터프레임 변수 생성하기

algorithm_1.py 파일 내에서는 _df.py 파일 내에 있는   def algo1_df()  를 호출해서 함수에서 반환되는 데이터프레임에 데이터를 입력했었다. 이와 마찬가지로 main.py 파일 내에서도 동일한 변수를 호출해서 algorithm_1.py 파일로부터 전달받은 데이터를 입력할 변수를 생성한 후에 해당 변수에 매수 예정 가격 데이터가 담긴   result[1]  변수를 concat 메서드를 활용하여 합치고 전체 데이터를 확인해볼 예정이다.
※ Line : 2, 11~15

    def _pushbtn_7(self):
        total_df = _df.algo1_df()

        for item_code in self.code_list:
            if item_code != "":
                min5_chart_data = self.request_opt10080(item_code, 5)
                print(min5_chart_data)

                result = algo1(min5_chart_data, "20220826", item_code).run()

                if result[0]:
                    total_df = pd.concat([total_df, result[1]], ignore_index=True).reset_index(drop=True)

        print("total_df")
        print(total_df)

 

가장 먼저   Line 2  에서는 algorithm_1.py 파일에서 사용했던 방식과 동일한 방식으로 데이터프레임 변수(  total_df  )를 생성해준다. 그 후에   Line 11  에서는   result[0]  의 값이 True인 경우에만   total_df  라는 데이터프레임 변수에   result[1]  을 입력하도록 했다. 마지막으로   Line 14, 15  에서는 반복문이 종료된 후에   total_df  변수를 출력하도록 함으로써 최종 결과 데이터를 확인하면 된다.

아래의 결과를 확인해보니, 지난 게시글에서 확인했던 네 개 종목의 매수 예정 가격 데이터가 잘 계산되어 출력되고 있음을 확인할 수 있다.

>>>
total_df
  item_code  first_buy_price  second_buy_price
0    042670           6695.0               NaN
1    044060           2187.5               NaN
2    048410          32700.0               NaN
3    095910           6460.0               NaN

 

 


728x90

 

 

매수 예정 가격 데이터 관리하기

사실 데이터 관리라 함은 상당히 복잡하고 어려우며, 성공적으로 관리하기 위해서는 상당히 디테일한 요소들을 함께 고려해야 한다. 세부적으로 설명하자면 설명할 것도 상당히 많으니, 일단 오늘은 당일 당일 조건검색식 데이터를 저장하는 방법에 대해서만 언급하도록 하고, 다음 게시글에서는 데이터베이스의 데이터를 불러와서 실시간으로 등록하는 방법에 대해 살펴볼 예정이다.

그러기 위해서는 일단 condition(조건)이라는 데이터베이스를 생성한 후, 그 안에서 일자별로 집계된 종목코드를 저장하도록 해야 한다. 먼저, manage_db.py 파일 내에서 condition과 연결할   engine  을 생성해주도록 하자.
※ Line : 2, 3

"""manage_db.py"""
engine_condition = create_engine('mysql+mysqldb://root:{password}@127.0.0.1:3306/condition', encoding='utf-8')
connection_contiion = engine_condition.connect()

 

그 후 다시 main.py 파일로 돌아와서,   total_df  변수를   to_sql  을 이용해서 데이터를 저장해주면 된다.
※ Line : 17

    def _pushbtn_7(self):
        total_df = _df.algo1_df()

        for item_code in self.code_list:
            if item_code != "":
                min5_chart_data = self.request_opt10080(item_code, 5)
                print(min5_chart_data)

                result = algo1(min5_chart_data, "20220826", item_code).run()

                if result[0]:
                    total_df = pd.concat([total_df, result[1]], ignore_index=True).reset_index(drop=True)

        print("total_df")
        print(total_df)

        total_df.to_sql(name="today_condition", con=manage_db.engine_condition, index=False, if_exists='replace')

 

현재로서는 데이터베이스의 이름이   "today_condition"  이긴 하나, 추후 일자 데이터를 얻어오는 기능을 구현하면 그 때 다시 수정할 예정이므로 일단은 임의의 이름으로 저장하도록 하여 기능이 정상적으로 동작하는지만 확인하도록 하자.

잘 저장하고 있다.

 

이제 다음 게시글에서는 일자 정보를 얻어올 수 있는 기능을 구현할 예정이다.

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.