"""R647:固定未来机会网格及判断门槛,不按未来赢家筛选。""" from decimal import Decimal as D from collections import Counter import hashlib,json policy={'version':'human-v1','start':1,'end':10,'minimum_coverage':'0.9','minimum_closed':4,'pause_if_net_below':'0'} sealed=hashlib.sha256(json.dumps(policy,sort_keys=True).encode()).hexdigest() ALLOWED={'closed','no_signal','market_blocked','quote_unknown','open'} def evaluate(rows,policy): if type(policy['start']) is not int or type(policy['end']) is not int or type(policy['minimum_closed']) is not int or policy['minimum_closed']<1:raise ValueError('invalid horizon or count') minimum=D(policy['minimum_coverage']);pause=D(policy['pause_if_net_below']) if not minimum.is_finite() or not 0<=minimum<=1 or not pause.is_finite():raise ValueError('invalid decision threshold') if len({r['session'] for r in rows})!=len(rows):raise ValueError('duplicate opportunity') if any(r['version']!=policy['version'] or type(r['session']) is not int or not policy['start']<=r['session']<=policy['end'] or r['status'] not in ALLOWED for r in rows):raise ValueError('wrong window or rule') total=policy['end']-policy['start']+1 if total<=0:raise ValueError('invalid horizon') statuses=Counter();closed=[] by={r['session']:r for r in rows} for session in range(policy['start'],policy['end']+1): row=by.get(session) if row is None:statuses['missing_opportunity']+=1;continue statuses[row['status']]+=1 if row['status']=='closed': entry,exit_price,fee=map(D,[row['entry'],row['exit'],row['fee_each']]) if any(not x.is_finite() for x in [entry,exit_price,fee]) or entry<=0 or exit_price<=0 or fee<0:raise ValueError('invalid closed outcome') closed.append(exit_price-entry-2*fee) coverage=D(total-statuses['quote_unknown']-statuses['missing_opportunity'])/D(total) net=sum(closed,D(0)) if coverage0] selected=evaluate(only_winners,policy) assert selected['coverage']==D('.2') and selected['closed']==2 and selected['decision']=='insufficient' missing=[dict(r,status='quote_unknown') if r['session']==4 else r for r in rows] assert evaluate(missing,policy)['coverage']==D('.8') and evaluate(missing,policy)['decision']=='insufficient' assert evaluate(rows[:5],policy)['decision']=='insufficient' try:evaluate(rows+[rows[0]],policy) except ValueError:pass else:raise AssertionError('duplicate opportunity counted') try:evaluate(rows,dict(policy,minimum_coverage='NaN')) except ValueError:pass else:raise AssertionError('nonfinite acceptance threshold') assert hashlib.sha256(json.dumps(policy,sort_keys=True).encode()).hexdigest()==sealed print('all_opportunities='+str(result)) print('winner_only coverage=0.2 closed=2 decision=insufficient extra_quote_gap coverage=0.8 decision=insufficient') print('policy_frozen=True historical_five_winners_is_not_validation=True no_model_called=True no_portfolio_return_claim=True')