본문 바로가기

Python, API32

[Python] Sharp Ratio / Sortino Ratio / Carmar Ratio 계산 [샘플데이터 준비] date,log_plr,equity 2008-12-31,0,1 2009-01-02,0,1 2009-01-05,0,1 2009-01-06,-0.0091,0.9909 2009-01-07,0,0.9909 ...... 2023-06-12,0,3.7086 2023-06-13,0.0244,3.733 2023-06-14,-0.0022,3.7309 2023-06-15,0,3.7309 2023-06-16,0,3.7309 [Sharp Ratio / Sortino Ratio / Carmar Ratio 계산] import pandas as pd # 사전데이터의 log_plr과 equity는 로그수익률을 기반으로 계산됨 df = pd.read_csv('sample.csv', index_col='date') .. 2023. 6. 19.
[Python] 체결데이터로 분봉(OHLCV) 만들기 1. 가상의 체결데이터 준비 Random 함수를 사용해서 임의의 시간대와 가격, 거래량 자료를 생성하기 # 틱데이터 저장용 변수 tick_data = {'000000': {}} # 가상의 틱데이터 생성 start_ts = 1685750400 # 2023-06-03 09:00:00 end_ts = 1685774700 # 2023-06-03 15:45:00 for i in range(10): # 테스트 10개 생성 timestamp = random.randrange(start_ts, end_ts) datetime_item = datetime.fromtimestamp(timestamp) price_item = random.randrange(10000, 11000) volume_item = random.rand.. 2023. 6. 4.
[SQLITE3] column 이름으로 사용하면 안되는 단어 중복된 데이터들을 찾아서 제거하려고 SQL 쿼리문을 만들었는데 실행이 안돼서 설마 하는 마음에 구글링을 해봤더니 칼럼명에 "index"를 포함한 어떤 특정 단어를 쓰면 안 된다는 걸 깨달았다. https://www.sqlite.org/lang_keywords.html SQLite Keywords The SQL standard specifies a large number of keywords which may not be used as the names of tables, indices, columns, databases, user-defined functions, collations, virtual table modules, or any other named object. The list of keywo.. 2023. 5. 31.
Numba 0.57 Release (Support for Python 3.11) 드디어 Python 3.11에서는 사용할 수 있는 Numba 0.57이 공식 발표되었다. https://numba.readthedocs.io/en/stable/release-notes.html Release Notes — Numba 0.57.0+0.g4fd4e39c6.dirty documentation Version 0.54.1 (7 October, 2021) This is a bugfix release for 0.54.0. It fixes a regression in structured array type handling, a potential leak on initialization failure in the CUDA target, a regression caused by Numba’s vendore.. 2023. 5. 3.
[Python/키움API] 주식 틱차트 조회요청 (OPT10079) 및 저장 아래는 ETF의 틱데이터를 키움 API로 내려받을 때 사용한 Python 코드를 정리한 것이다. '틱범위'를 변경하면 다른 단위의 틱차트도 조회가 가능하다. (1:1틱, 3:3틱, 5:5틱, 10:10틱, 30:30틱) 2023.04.24 - [시스템트레이딩] - ETF의 체결오차(슬리피지)는 얼마나 될까? ETF의 체결오차(슬리피지)는 얼마나 될까? 산업과 섹터들에 투자하는 ETF들을 묶어서 포트폴리오에 넣고 각각의 모멘텀에 따라 비중을 조절해 가며 트레이딩 하면 어떨까 하는 생각을 꽤 오랫동안 해왔다. 그런데 실천으로 옮기지 못한 toniteifly.tistory.com import sys from PyQt5.QtWidgets import * from PyQt5.QAxContainer import *.. 2023. 4. 24.
[Python] DataFrame에 필터 적용 후 여러 개로 쪼개기 1995년부터 현재까지 모든 종목들의 가격데이터를 한 테이블에 욱여넣었는데 종목별로 하나씩 DataFrame을 생성한 후에 수정주가를 일괄적으로 계산하려고 하는데 예상치 못한 난관에 처했다. 과거 시점에 상장폐지 되거나 코드가 바뀐 것들까지 다 포함하면 4863개의 종목코드가 존재하는데 테이블 크기가 워낙 크다 보니 극악의 퍼포먼스가 나왔다. 처음엔 아래와 같이 sql로 종목코드를 지정해서 하나씩 데이터를 가져오려고 했는데 너무 시간이 많이 소요됐다. 어쩔 수 없이 전체 테이블을 한꺼번에 가져와서 DataFrame을 종목코드로 필터를 건 후에 하나씩 처리해 보기로 했다. query = f"SELECT * FROM stock WHERE code == '{code}'" df = pd.read_sql(quer.. 2023. 3. 26.
[Python] KRX 주가데이터로 수정주가 계산 2023.03.25 - [시스템트레이딩] - KRX 수정주가 조회 및 계산방법 KRX 수정주가 조회 및 계산방법 분명히 예전에는 KRX 정보데이터 시스템에서 종목들의 일일 주가를 조회할 때 수정주가가 적용되지 않았는데 오랜만에 한국거래소 사이트에 들어갔더니 [12003] 개별종목 시세 추이에 수정주가 toniteifly.tistory.com 이전 글에 남긴 것처럼 KRX에서 수정주가를 조회할 수 있으니까 큰 의미는 없지만 나처럼 만들어놓은 데이터베이스가 [12001] 전종목 시세를 매일 크롤링해서 업데이트하고 있다면 특정 종목의 과거 가격 데이터를 긁어 와서 수정주가로 다시 변환하는 작업이 필요하다. 또한 수정주가라는 것이 현재 또는 미래에 벌어질 이벤트에 따라 과거 데이터를 모두 수정해야 되는 문제가 .. 2023. 3. 25.
Pandas.read_sql 속도 비교 (chunksize, connectorx) 1995년 5월 2일부터 상장된 모든 주식 종목들의 일별 가격 정보가 저장된 SQLITE 데이터베이스인데 크기가 만만치 않아서 Pandas로 불러오는데 시간이 꽤나 걸려서 몇 가지 방법을 찾아봤다. 그냥 Pandas.read_sql을 실행하는 것보다는 적절한 chunksize를 지정해서 불러오는 것이 더 나은 선택이었다. 그보다 더 좋은 방법이 뭐가 있을까 하다가 찾게 된 것이 connectorx라는 라이브러리다. https://github.com/sfu-db/connector-x GitHub - sfu-db/connector-x: Fastest library to load data from DB to DataFrames in Rust and Python Fastest library to load dat.. 2023. 2. 26.
[Telegram API] pyTelegramBotAPI로 메시지 보내기 python-telegram-bot을 쓰다가 다른 API를 써보려고 검색하다보니 telegram 사이트에 언어별로 라이브러리를 정리해둔 웹페이지를 발견했다. https://core.telegram.org/bots/samples Bot API Library Examples A full tutorial covering everything from configuring your environment to deploying your finished bot is available here.… core.telegram.org 아래의 라이브러리들이 Python을 위한 대표적인 라이브러리들로 소개하고 있는데 일단 두번째인 pyTelegramBotAPI가 괜찮을 것 같아서 사용해보기로 했다. https://github... 2023. 2. 8.