본문 바로가기

Python, API32

[Python-telegram-bot] bot.sendMessage - RuntimeWarning: coroutine 'Bot.send_mes Python-telegram-bot을 쓰고 있다가 최근에 일부 실행환경에서 메시지가 전달되지 않는 현상이 있다는 걸 뒤늦게 알게 되었다. 전체 프로그램 자체는 별다른 문제가 없어서 몰랐는데 아래와 같이 coroutine이 awaited 되지 않았다는 경고 메시지가 발생하고 메시지가 텔레그램으로 전달되지 않는다. 메인 PC에 Python 3.11을 새롭게 설치하면서 기존에는 13.15 버전을 쓰다가 최신버전인 20.0을 자연스럽게 설치하게 되었는데 그 이후로 예전 코드가 먹통이 된 것 같다. 20.0 버전에서 뭐가 바뀌었나 해서 홈페이지(https://docs.python-telegram-bot.org/en/stable/)를 가보았더니 20.0 버전부터 Since v20.0, Python-Telegram-.. 2023. 2. 4.
Python 3.11의 속도개선 (feat. 5950X vs 7950X) 작년 상반기쯤 Python 3.11b의 퍼포먼스 개선에 관한 기사들을 우연히 보게 되었다. 그 당시에 여러 가지 자료들이 있었지만 PyPerformance 자료만 봐도 기존 버전 대비 엄청난 성능향상을 보여줬다. 단순히 Python 버전업만 하더라도 프로그램들의 속도가 엄청나게 개선될 것이라고 생각해서 출시일을 손꼽아 기다려왔다. 그리고 작년 10월 24일, Python 3.11의 정식버전으로 출시되자마자 찍먹을 해봤다. 퍼포먼스 측면에서는 체감이 될 정도로 개선됨이 느껴졌다. 그런데 그 당시에는 내가 사용 중이던 라이브러리들과 여러 가지 문제점들이 발견되어서 제대로 사용해볼 수가 없었고 아쉽지만 결국 Anaconda3의 최종 배포버전(Python 3.9)으로 돌아왔다. 그리고 이번에 5950X의 메인 .. 2023. 1. 7.
투자 관련 API를 사용할 때 조심해야 할 점 잠수함 패치 키움증권 OpenAPI/OpenAPIG, 대신증권 CreonAPI, 이베스트 투자증권 XINGAPI, 빗썸, BYBIT, Binance, 업비트... 최근 3년 사이에 그래도 꽤 많은 API들을 써본 사용자의 입장에서 가장 고민스러운 것은 API가 언제 어떻게 업데이트될지 알 수가 없다는 것이다. 다행히 주력으로 사용하고 있는 키움증권 OpenAPI/OpenAPIG의 경우에는 중요한 업데이트 전에는 이와 관련된 문자메시지를 사전에 몇 번 받았던 좋은 경험이 있었다. 처음 어떤 API를 사용할까 고민도 많이 했는데 가장 큰 증권사이고 사용자가 많아서 Trouble shooting도 어렵지 않다는 점에서 키움증권을 선택했는데 중요한 업데이트 시에도 미리 알려주는 점은 만족스러웠다. 가끔 뜬금없이.. 2022. 11. 28.
백테스트의 속도개선(2) 2022.11.16 - [Python, API] - 백테스트의 속도 개선 백테스트의 속도개선 일전에 포스팅한 내용대로 백테스트 프로그램의 개선 작업을 거의 완료했다. 2022.11.13 - [Python, API] - DataFrame의 Loop속도 비교 (iloc, iat, iterrows, itertuples) [AS-IS] Df.iat 함수를 사용해서 Loop를 생성한다 toniteifly.tistory.com 어느 정도 완성된 줄 알았는데 몇 가지 문제가 생겨서 해결하는데 꽤 많은 시간이 걸렸다. 1. 메모리 부족 문제 해외선물 쪽에 바뀐 코드를 적용하다가 CPU가 사용률이 100%가 나오지도 않고 속도도 너무 안 나와서 봤더니 32기가인 메모리 사용량이 100%를 찍고 있었다. 파이썬을 써온지 .. 2022. 11. 27.
백테스트의 속도개선 일전에 포스팅한 내용대로 백테스트 프로그램의 개선 작업을 거의 완료했다. 2022.11.13 - [Python, API] - DataFrame의 Loop속도 비교 (iloc, iat, iterrows, itertuples) [AS-IS] Df.iat 함수를 사용해서 Loop를 생성한다 가격, 거래시간, 포지션 정보 등을 DataFrame의 현재 및 직전 행을 Df.iat로 인덱싱하여 정보를 가져온다. 계산된 결과를 현재 행의 DataFrame에 Df.iat 함수를 사용하여 업데이트한다. [To-Be] Df.itertuples로 Loop를 생성한다. Df.itertuples 실행으로 출력되는 DataFrame 현재 행의 Namedtuples을 Dictionary형태로 변환하고 CurrentDict라는 변수.. 2022. 11. 16.
DataFrame의 Loop속도 비교 (iloc, iat, iterrows, itertuples) DataFrame의 Loop 방법에 대한 고민 백테스트를 하다 보면 DataFrame자료를 가지고 Loop를 돌려야 할 때가 많아서 어떻게 하면 코드를 더 빠르게 만들 수 있을까 하는 고민을 하게 된다. "무식하게 Loop를 돌리지 말고 Vectorization을 해!" 라고 반문할 수도 있겠지만 Vectorization이 가능한 형태의 코드는 복잡하고 다양한 조건들을 반영해갈 수 없는 것 같다. 실전에서 사용할 트레이딩 전략들은 보통 여러 가지 진입 및 청산 조건들을 동시에 가지고 가면서 직전 시점에서의 단가를 포함한 포지션 정보를 반영해서 다시 roll-forward 방식으로 계산해나갈 수밖에 없는 구조를 가지고 있어서 쉽지가 않다. 준비된 자료는 238674행과 5개의 열을 가진 분봉데이터로 Dat.. 2022. 11. 13.
[XINGAPI] 주식차트조회(일주월) - t8413 t8413으로 주식일봉차트를 조회하는 코드를 구성했다. OutBlock이 두개가 있으며 첫번째 OutBlock으로 cts_date가 나오므로 이걸 이용해서 연속조회를 하면 된다. 결국 기존에 쓰던 o3123의 해외선물 분봉조회 코드와 거의 유사하다. 2022.06.29 - [코딩] - [XINGAPI] 해외선물 분봉데이터 조회 - o3123 조회갯수제한은 총 500개로 동일하나 압축기능을 활용할 경우 2000개까지 조회가 가능하고 압축된 데이터가 포함된 Outblock1 내의 데이터들은 제대로 표시가 되지 않기 때문에 GetFieldData를 실행하기 직전에 한꺼번에 OutBlock1의 압축을 해제하는 코드를 한줄 추가해줘야한다. (98, 130행 참조) 삼성전자(005930)의 일봉데이터를 연속조회한 .. 2022. 7. 7.
[XINGAPI] 이베스트투자증권의 분봉 표시 항셍 틱 데이터를 실시간으로 받아오면서 5분 봉을 만드는 코드를 구성했는데 장이 끝나고 비교해보면 묘하게 틱 데이터가 누락되는 것 같기도 하고 가격이 밀리기도 하고 당겨지기도 하는 것 같은 이상한 기분이 들어서 차트를 열어놓고 하나씩 비교해봤다. 일단 항셍은 9시 15분에 장이 시작되고 거래가 집중되는데 그 바로 1분 전인 14분부터 동시호가가 1분 동안 진행된다. 당연하지만 이 동시호가에 거래되는 가격은 모두 동일하다. 아래는 키움증권과 이베스트투자증권의 HTS에서의 1분 봉이고 최초 9시 14분에 거래된 88 계약의 가격은 모두 21,366원이다. 그런데 언뜻 보면 두 차트가 동일해 보이지만 9시 15분부터 분봉을 유심히 관찰해보면 약간씩 차이가 발생하기 시작한다. 5분 봉으로 비교해보면 확연한 차이.. 2022. 7. 7.
[XINGAPI] 해외선물 실시간 주문접수/응답/체결 정보 가져오기 - TC1/TC2/TC3 지난 포스팅에서 실시간 체결정보(OVC)를 가져오는 코드를 구성해봤는데 실제로 주문이 발생했을 경우 각각 접수(TC1), 응답(TC2), 체결(TC3)의 실시간 정보를 가져오는 코드를 추가해봤다. 2022.06.29 - [코딩] - [XINGAPI] 해외선물 실시간체결정보 가져오기 - OVC [XINGAPI] 해외선물 실시간체결정보 가져오기 - OVC XINGAPI로 실시간데이터를 가져오는 코드를 구성해봤다. 일단 Devcenter를 실행한 후 Real 목록에 있는 항목 중 원하는 것들을 골라서 코드를 구성하면 된다. 해외선물은 아래와 같이 7개의 항목이 있 toniteifly.tistory.com DevCenter를 실행해보면 아래와 같이 Real목록에서 TC1 ~ TC3가 있는데 당연한 것이겠지만 별.. 2022. 6. 30.