최초 프로젝트 업로드 (Script Auto Commit)

This commit is contained in:
2025-12-03 22:36:00 +09:00
commit 4745ab3c28
33 changed files with 4251 additions and 0 deletions

70
compare_logs.py Normal file
View File

@@ -0,0 +1,70 @@
import re
from datetime import datetime
from typing import List, Tuple
def parse_trades_from_log(path: str) -> Tuple[List[Tuple], List[Tuple]]:
"""로그 파일에서 매수/매도 거래를 파싱합니다.
Args:
path: 로그 파일 경로
Returns:
(매수 리스트, 매도 리스트) 튜플
"""
buys = []
sells = []
with open(path, encoding='utf-8', errors='ignore') as f:
for line in f:
line=line.strip()
if not line: continue
# BUY lines
m = re.match(r"\[(\d{4}-\d{2}-\d{2})\] BUY: (.*)\(([^)]+)\) @ ([\d,\.]+) / ([\d,\.]+)주 \(SL: ([\d,\.]+)\)", line)
if m:
date, name, ticker, price, shares, sl = m.groups()
price=float(price.replace(',',''))
shares=float(shares.replace(',',''))
sl=float(sl.replace(',',''))
buys.append((date,ticker,price,shares,sl,line))
continue
# SELL lines
m2 = re.match(r"\[(\d{4}-\d{2}-\d{2})\] SELL \(([^)]+)\): (.*)\(([^)]+)\) @ ([\d,\.]+) / ([\d,\.]+)주 \(([-\d\.]+)%\)", line)
if m2:
date,reason,name,ticker,price,shares,pct = m2.groups()
price=float(price.replace(',',''))
shares=float(shares.replace(',',''))
pct=float(pct)
sells.append((date,ticker,price,shares,reason,pct,line))
continue
return buys,sells
pre_buys,pre_sells = parse_trades_from_log('pre_opt_log.txt')
cur_buys,cur_sells = parse_trades_from_log('current_log.txt')
print('pre buys:', len(pre_buys), 'pre sells:', len(pre_sells))
print('cur buys:', len(cur_buys), 'cur sells:', len(cur_sells))
# Compare buy sets by (date,ticker,price)
pre_buy_set = set((d,t,p) for (d,t,p,_,_,_) in pre_buys)
cur_buy_set = set((d,t,p) for (d,t,p,_,_,_) in cur_buys)
only_pre = pre_buy_set - cur_buy_set
only_cur = cur_buy_set - pre_buy_set
print('only in pre buys:', len(only_pre))
for x in list(only_pre)[:10]: print(' PRE_ONLY', x)
print('only in cur buys:', len(only_cur))
for x in list(only_cur)[:10]: print(' CUR_ONLY', x)
# Show some differing SL at same date/ticker
common = set((d,t) for (d,t,_,_,_,_) in pre_buys).intersection(set((d,t) for (d,t,_,_,_,_) in cur_buys))
print('common buy dates:', len(common))
count_sl_diff=0
for (d,t) in list(common)[:100]:
pre = [b for b in pre_buys if b[0]==d and b[1]==t][0]
cur = [b for b in cur_buys if b[0]==d and b[1]==t][0]
if abs(pre[2]-cur[2])>0.001 or abs(pre[4]-cur[4])>0.001:
print('DIFF', d,t,'pre_price',pre[2],'cur_price',cur[2],'pre_SL',pre[4],'cur_SL',cur[4])
count_sl_diff+=1
if count_sl_diff>20:
break
print('done')