"""R621:已有不同覆盖期运行,恢复共同平仓初态重跑,不能仅裁曲线。""" from math import isclose PRICES = [100,110,90,95,105,100] def run(start,end,threshold): cash,shares=1000,0 rows=[] for t in range(start,end+1): target=int(PRICES[t-1]>=threshold) qty=target-shares cash-=qty*PRICES[t];shares=target rows.append((t,cash,shares,cash+shares*PRICES[t])) return rows def common(a,b): sessions=sorted(set(a)&set(b)) if not sessions: raise ValueError('no common period') return sessions a=run(1,5,100);b=run(2,5,105) shared=common(range(1,6),range(2,6)) aa=run(shared[0],shared[-1],100);bb=run(shared[0],shared[-1],105) assert a[-1][-1]==985 and b[-1][-1]==1005 assert aa[-1][-1]==bb[-1][-1]==1005 cropped=a[-1][-1]/next(row[-1] for row in a if row[0]==2)-1 assert not isclose(cropped,.005,abs_tol=1e-9) try:common([1],[4,5]) except ValueError:pass else:raise AssertionError('disjoint coverage ranked') print('full_A_sessions=1..5 equity=985 full_B_sessions=2..5 equity=1005') print('common_sessions='+str(shared)+' reset_cash=1000 reset_shares=0 ending=1005,1005') print('cropped_A_return='+format(cropped,'.8%')+' rerun_A_return=0.50000000% no_intersection=rejected')