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')