import sqlite3,csv,statistics as st
db=sqlite3.connect("file:/opt/sw/v3live.db?mode=ro",uri=True,timeout=30)
C=0.99*0.98;STOP=.6;TR=.5;HOLD=6*3600
T=[x for x in csv.DictReader(open('/root/tm/v3vearly/trades.csv')) if x['arm']=='A' and float(x['net_x'])>=2]
out=[]
for t in T:
    pool=t['pool'];et=int(t['entry_t'])
    cr=db.execute("select creator from pools where pool=?",(pool,)).fetchone()[0]
    S=db.execute("select t,px_eth,mcap_usd,side,eth,usd,signer,pool_eth_after,b,li from swaps where pool=? order by b,li",(pool,)).fetchall()
    ent=next((s for s in S if s[0]==et or s[0]>=et),None)
    # find entry as in script: first swap >= trig+15 -> t==et
    ent=next(s for s in S if s[0]==et)
    pk=ent[1];ex=None
    for s in S:
        if (s[8],s[9])<=(ent[8],ent[9]):continue
        pk=max(pk,s[1]);v=s[1]/ent[1]
        if v<=STOP or s[1]<=TR*pk: ex=s;break
    if not ex: out.append((pool,t['net_x'],'noexit'));continue
    # usd per eth
    ue=ex[5]/ex[4] if ex[4] else 3500
    pos_usd=10*C*ex[1]/ent[1]; pos_eth=pos_usd/ue
    W=[s for s in S if abs(s[0]-ex[0])<=120]
    sells=[s for s in W if s[3]==-1 or s[3]==1 and False]
    # side convention check below
    sl=[s for s in W if s[3]<0]
    outs=set(s[6] for s in sl if s[6]!=cr)
    sell_eth=sum(s[4] for s in sl)
    imp=pos_eth/ex[7] if ex[7] else 9
    out.append((pool[:10],t['src'],float(t['net_x']),int(t['cap_buy_usd']),round(ex[7],1),round(pos_usd,0),round(imp*100,1),len(outs),round(sell_eth,2),ex[0]-et))
for o in out:print(o)
