본문 바로가기

분류 전체보기225

[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.
[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.
포지션 청산 방법 이동평균/지수이동평균선 # 이동평균/지수이동평균(span/com/halflife) df['sma'] = df['close'].rolling(tf).mean() df['ema_span'] = df['close'].ewm(span=tf).mean() df['ema_com'] = df['close'].ewm(com=tf).mean() df['ema_halflife'] = df['close'].ewm(halflife=tf).mean() 큰 변동성 없이 상승하거나 하락하는 경우에 그럭저럭 쓸만하다. 단순이동평균보다는 지수이동평균이 조금 더 빠르게 움직이기 때문에 성과가 더 좋을 것 같지만 가끔은 단순이동평균의 계산대상이 되는 기간을 변경하는 것이 오히려 더 효과적일 때도 있다. 특정 기간 동안의 최저점 # 특정 .. 2023. 6. 15.
DAX 선물 거래시간 2018년 12월 10일을 기점으로 거래가 가능한 시간이 크게 늘어났다. 유럽은 서머타임을 사용하고 있는데 미국과는 기간이 약간 차이가 있다. 어쨌든 서머타임을 사용한다면 개장시간이 차이가 있어야 한다고 생각했는데 왠일인지 한국 관점에서는 개장 시간이 9시 15분으로 고정되어 있다. https://www.eurex.com/ex-en/find/kr/products/mini-dax 데이터가 잘못된 것이 아닐까 한참 찾아봤는데 EUREX 거래소 사이트에 가보니 "08:15 싱가포르 / 홍콩 시간" 으로 명시해 놓은 걸 보니 개장 시간은 아시아의 시간대로 고정해 놓은 듯하다. 2023. 6. 14.
Drawdown에 대한 고민과 해결방법 최근 하방 레이저빔을 크게 맞고 나서 스트레스가 이만저만이 아니었다. 최근 몇 주 동안 뭐가 문제였던 것인지? 앞으로는 어떻게 해야 할 것인지 고민했고 나름 결론을 냈다. "괜찮은 수준으로 분산된 투자하고 있다고 생각했지만 결과적으로 충분한 분산 투자가 되어있지 않았다." 수익률을 극대화 하려고 하다 보니 그동안 성과를 잘 내어준 전략들에 비중이 높았는데 이게 독이 되었다. 그럼에도 그 전략들의 Drawdown을 줄일 수 있는 방법만 미친 듯이 고민하고 테스트해 봤는데 더 이상의 드라마틱한 개선점은 찾아볼 수가 없었다. 합리적으로 생각해 보면 가지고 있는 괜찮은 전략들의 언더워터 기간도 45 ~ 90일가량인데 그렇다면 반대로 이 전략들에 비중이 큰 상황이라면 전체 포트폴리오가 그 정도의 언더워터 기간을 .. 2023. 6. 13.
국내 파생상품 개장시간 변경예정 (09:00 -> 08:45) https://v.daum.net/v/20230608153000636 7월말부터 파생상품시장 15분 일찍 개장…"국제적 정합성 제고"[한국경제TV 오민지 기자] 다음달 말부터 파생상품시장이 15분 일찍 개장한다. 8일 한국거래소는 주식시장 개장 초 변동성 완화와 국제적 정합성 제고를 위해 오는 7월 31일부터 파생상품시장을 15v.daum.net 변동성완화와 국제적 정합성 제고라.... 문득 예전에 다니던 회사에서 경영진들이 무언가를 새롭게 할 때마다 들먹이곤 했던 그놈의 지긋지긋한 스마트가 떠오른다. 스마트 워크, 스마트 잡, 뭐만 하면 죄다 스마트 어쩌고저쩌고... 어쩔 수 없이 7월 말부터 15분 일찍 개장이 된다면 이후 장초반의 변동성이 어느 순간 어떻게 바뀔지 몰라서 한동안 거래 비중을 줄여야 .. 2023. 6. 9.
국내 ETF 시장 거래금액 추이 (feat. 2차전지) 국내 ETF시장은 2002년 10월 14일에 코스피 200과 코스피 50을 추종하는 4개의 종목으로 시작해서 2023년 현재는 719개의 종목이 거래되고 있다. 거래대금은 2020년을 기점으로 크게 상승했는데 이전과는 다르게 한 단계 높은 수준을 꾸준하게 유지하고 있다. 사실 전체 거래대금 중 업종 지수가 아닌 코스피200, 코스닥 150, Total Return과 같은 지수들을 추종하고 있는 ETF의 거래대금이 차지하는 비중이 오랫동안 높은 수준으로 유지되어 왔다. 그러다가 2021년부터는 의외로 지수추종 ETF의 거래대금이 전체 거래대금에서 차지하는 비중이 급격하게 감소하고 있는데 주된 원인은 2차 전지 혹은 전기차와 관련된 ETF들의 거래가 엄청난 기세로 성장해오고 있기 때문이다. 2018년 9월 .. 2023. 6. 9.
[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.
코스닥ETF전략 운영성과 (2023년 5월) 거의 지난달 수익의 절반 가량의 손실을 입었다. 앞으로 전략들의 운영방향에 대해서 고민을 많이 했는데 MDD을 지나치게 낮추려는 시도들이 오히려 수익을 낼 수 있는 시장 참여 기회를 제한하는 효과로 작용하고 있는 듯한 기분이 들어서 전략들을 조금 더 공격적으로 튜닝해서 운영해보려고 한다. 2023. 6. 1.