基于时间的策略回溯测试系统
Mini-Exchange的Python项目详细描述
这个项目是为了模拟一个交换来测试数量 策略。
依赖关系
- Python3.5
- 熊猫0.23.0
- Spyder 3.2.8
- 绘图仪2.7.0
安装
pip install mini_exchange
用法
# price: dataframe dt*ticker # signal01: dataframe dt*ticker # signal02: dataframe dt*ticker dates=price.loc[start:end].index tickers=price.columns from mini_exchange import Mini_Exchange,Account,Log MM=Mini_Exchange(price)# create user01 acc01=Account(start_amount=1000)log01=Log() MM.register(user_name='user01',account=acc01,log=log01)# create user02 acc02=Account(start_amount=1000)log02=Log() MM.register(user_name='user02',account=acc02,log=log02)# trade for dt in dates: print('\rrun %d'%dt,end='\r') MM.hold(dt)for ticker in tickers: #user01 if signal01.loc[dt,ticker]==1: #open long MM.long(ticker,amount=10,dt=dt,user='user01')elif signal01.loc[dt,ticker]==-1: #open short MM.short(ticker,amount=10,dt=dt,user='user01')elif signal01.loc[dt,ticker].isin((-2,2)): #close MM.close(dt,ticker, by='ticker',user='user01')#user02 if signal02.loc[dt,ticker]==1: #open long MM.long(ticker,amount=10,dt=dt,user='user02')elif signal02.loc[dt,ticker]==-1: #open short MM.short(ticker,amount=10,dt=dt,user='user02')elif signal01.loc[dt,ticker].isin((-2,2)): #close MM.close(dt,ticker, by='ticker',user='user01') MM.settle(dt)# summary # user01 print(acc01.annual_return(),acc01.sharpe_ratio(rf=0.03)) print(pos01.win_rate()) acc01.plot_history(by_pct=True) pos01.plot_history_position()history_position=pos01.pos history_value=acc01.history_value