Metadata-Version: 2.0
Name: Mini-Exchange
Version: 0.0.5
Summary: Time based strategy back testing system
Home-page: UNKNOWN
Author: Yili Peng
Author-email: yili_peng@outlook.com
License: UNKNOWN
Keywords: quant
Platform: UNKNOWN
Requires-Dist: plotly

This project is to simulate an exchange in order to bakc test quant strategies.

### Dependencies

- python 3.5
- pandas 0.23.0
- spyder 3.2.8
- plotly 2.7.0

### Installation
```bash
pip install mini_exchange
```

### Usage
```bash
# 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
```         

