71 lines
2.7 KiB
Python
71 lines
2.7 KiB
Python
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')
|