"""R609:独立标准库合成方法样例,不是实际历史绩效。""" from decimal import Decimal as D fills={'A':[(D('600'),D('100'),-1),(D('600'),D('100.2'),1)],'B':[(D('100'),D('100'),-1),(D('100'),D('101'),1)]} gross={key:sum(q*p*side for q,p,side in rows) for key,rows in fills.items()} notional={key:sum(q*p for q,p,side in rows) for key,rows in fills.items()} def net(key,bps,unit='bps'): if unit!='bps': raise ValueError('unit mismatch') return gross[key]-notional[key]*D(str(bps))/D(10000) flip=(gross['A']-gross['B'])*D(10000)/(notional['A']-notional['B']) assert net('A',0)>net('B',0) and net('A',4)D('1000') try: net('A',2,'percent') except ValueError: pass else: raise AssertionError('bad unit accepted') print('gross='+str(gross)+' traded_notional='+str(notional)) print('flip_bps='+format(flip,'.6f')+' net_at_4bps='+str({k:net(k,4) for k in fills})) print('fee_changes_cash_feasibility=rerun_required')