"""Verify the fixed 5.3 zone-selection exercise. Standard library; offline; no trading.""" from pathlib import Path from decimal import Decimal import csv,json,hashlib def sha(b):return hashlib.sha256(b).hexdigest() def load(path): with Path(path).open(encoding='utf-8-sig',newline='') as f:raw=list(csv.DictReader(f)) rows=[] for r in raw: q={'time':r['time_mt5']} for k in ('open','high','low','close'): d=Decimal(r[k])*100000;q[k]=int(d.to_integral_value());assert abs(d-q[k])=a['lower']),None) if overlap: rejected.append(dict(q,reason='overlap',retained_anchor=overlap['i']));continue episodes=[];previous_contact=False for i in range(q['known']+1,len(rows)): contact=rows[i]['low']<=q['upper'] and rows[i]['high']>=q['lower'] if contact and not previous_contact: last=i+3 if last=q['upper']+50),None) episodes.append({'start':i,'complete_at':last,'reaction':reaction}) previous_contact=contact successes=[e for e in episodes if e['reaction'] is not None] kept.append(dict(q,episodes=episodes,reactions=len(successes),latest_reaction=max((e['reaction'] for e in successes),default=-1))) eligible=[q for q in kept if q['reactions']>=2] ranked=sorted(eligible,key=lambda q:(-q['reactions'],-q['latest_reaction'],q['price'],q['i'])) return {'kept':kept,'rejected_overlap':rejected,'ranked':ranked,'selected':ranked[:3]} def main(): here=Path(__file__).parent;m=json.loads((here/'zone-selection.json').read_text('utf8'));p=here/'zone-selection.csv' assert sha(p.read_bytes())==m['excerpt_sha256'] result=select(load(p));assert result==m['result'] print(json.dumps({'status':'PASS','bars':120,'selected_centres':[q['price']/100000 for q in result['selected']],'zones_before_overlap_filter':len(result['kept'])+len(result['rejected_overlap']),'future_records_used':0})) if __name__=='__main__':main()