본문 바로가기

Python, API32

[Python] SuperTrend 인터넷에 돌아다니는 코드를 조금 바꿨다.데이터의 상황에 따라서는 compute_supretrend 함수를 numba로 처리하는 것이 더 빠를 수 있다. def supertrend(df, atr_period=14, atr_multiplier=3.0, source='HL'): prev_close = df['close'].shift(1) tr_a = df['high'] - df['low'] tr_b = abs(df['high'] - prev_close) tr_c = abs(df['low'] - prev_close) tr_temp = np.maximum(tr_a, tr_b) df['tr'] = np.maximum(tr_temp, .. 2025. 5. 18.
[Python] is/==/not - True/False/None value를 각각 True, False, None으로 지정하고 각각 8개의 표현식을 돌려보면 결과는 아래 같다. for value in [True, False, None]: print(value) if value is True: print('1. if value is True') if value is False: print('2. if value is False') if value is None: print('3. if value is None') if value == True: print('4. if value == True') if value == False: print('5. if value == Fals.. 2025. 1. 11.
Rolling.mean/max/in - Talib vs Pandas 50부터 10000까지 period에 대해서 전체 데이터를 rolling하면서 mean, max, min을 계산해봤다.내가 사용할 범위 내에서는 Talib가 대부분 빠르지만 Max, Min 의 경우 rolling하는 peirod가 늘어날수록 talib 소요시간이 선형으로 증가하는 경향이 있다. 2025. 1. 9.
백테스트 프로그램 개선 (feat. ChatGPT) 며칠째 백테스트 프로그램의 코드를 리팩터링 하고 최적화하는 작업을 했고 거의 마무리 작업에 이르렀다. 코드 한줄한줄 시간을 측정해 가면서 어떤 함수를 개선할 수 있을지 고민했다. ChatGPT의 도움이 없었다면 단 며칠 만에 가능했을까? 애초에 여기까지 오는 것도 불가능했을지도?       아래는 작업하던 과정에서 기억에 남는 것들을 정리해봤다. 물론 대부분 단일 작업들로만 보면 차이는 0.n초 이내이지만 백테스트의 성격 상 그 과정에서 수백 ~ 수천번 반복하는 경우에는 꽤 큰 차이를 만들어냈다.  1. ZeroDivisionError 처리 try / except 로 처리를 했었는데 분모가 0인지를 확인하는 방법이 더 빠르다.# beforedef zerodiv_cover(value1, value2): .. 2025. 1. 8.
[Python] 가까운 호가 단위의 가격으로 조정 (np.ceil, np.floor) import numpy as npdef conv_price(price, hoga, upside): # 올림처리 if upside: price = np.ceil(price / hoga) * hoga # 내림처리 else: price = np.floor(price / hoga) * hoga print(price)# 예시1price = 19500.2124conv_price(price, 0.25, True) # 19500.25conv_price(price, 0.25, False) # 19500.0# 예시2price1 = 2523.483conv_price(price, 5, True) # 2525.0conv_price(price, 5, False) # 25.. 2024. 6. 27.
[Python][Bitstamp API] OHLCV 요청 https://www.bitstamp.net/api/#tag/Market-info/operation/GetOHLCData Bitstamp Trusted Crypto Exchange | Buy & Sell CryptocurrenciesBuy and sell leading cryptocurrencies at Bitstamp – the world's longest-standing crypto exchange. Low fees, reliable service and simple setup. Open a free account.www.bitstamp.net  import requestsimport pandas as pddef get_ohlcv_data(symbol, step, start=None, end=None.. 2024. 6. 7.
[Python][Bybit V5 API] Private/Public Websocket 접속 import asyncioimport websocketsimport jsonimport hmacfrom datetime import *import timeclass Main(): # Private Websocket에 접속하기 위한 인증준비 def send_auth(self): api_key = 'USER_API_KEY' api_secret = 'USER_API_SECRET' expires = int((time.time() + 10) * 1000) _val = f'GET/realtime{expires}' signature = str(hmac.new( bytes(api_secret, 'utf-8'), .. 2024. 5. 27.
[Python] os.walk - 하위폴더 내의 모든 파일 리스트 검색하기 https://docs.python.org/3/library/os.html#os.walk os — Miscellaneous operating system interfacesSource code: Lib/os.py This module provides a portable way of using operating system dependent functionality. If you just want to read or write a file see open(), if you want to manipulate paths, s...docs.python.org  import ossummary_filelist = []for path, dir, files in os.walk(".."): for filename .. 2024. 5. 3.
[Python] 분봉데이터로 당일의 누적OHLCV 계산하기 여러 개의 날짜에 해당하는 분봉 데이터가 포함된 자료에서 해당 일자의 특정 시각대에 당일의 시가, 고가, 저가, 종가, 거래량을 계산하는 코드다. 이를테면 증시가 마감되지 않은 상황에서 IBS (Internal Bar Strength)를 계산하기 위해서는 개장 초부터 특정 시각대까지의 시가, 고가, 저가, 종가 값이 있어야 하는데 이런 경우에 활용할 수 있다. import pandas as pd df = pd.read_csv('test_sample.csv') # datetime 컬럼 type변경 후 groupby를 위해 date 컬럼 생성 df['datetime'] = pd.to_datetime(df['datetime']) df['date'] = df['datetime'].dt.date # 각 시간대별 .. 2023. 6. 22.