def _getBenchmarkData(self, indexID, startTimeStamp, endTimeStamp): self.logger.info( "Starting load benchmark {0:s} daily bar data from DX data center..." .format(indexID)) indexIDComp = indexID.split('.') if indexIDComp[1] == 'zicn': indexData = api.GetIndexBarEOD(indexIDComp[0], startDate=startTimeStamp, endDate=endTimeStamp, forceUpdate=self.forceUpdate) elif indexIDComp[1] == 'ccfx' or indexIDComp[ 1] == 'xzce' or indexIDComp[1] == 'xdce' or indexIDComp[ 1] == 'xsge': indexData = api.GetFutureBarEODContinuing( indexIDComp[0], startDate=startTimeStamp, endDate=endTimeStamp, forceUpdate=self.forceUpdate) elif indexIDComp[1] == 'xshg' or indexIDComp[1] == 'xshe': indexData = api.GetEquityBarEOD(indexIDComp[0], startDate=startTimeStamp, endDate=endTimeStamp, forceUpdate=self.forceUpdate, baseDate='end') indexData = indexData[['closePrice']] indexData.columns = ['close'] indexData.index = pd.to_datetime(indexData.index.date) indexData['return'] = np.log(indexData['close'] / indexData['close'].shift(1)) indexData = indexData.dropna() self.benchmarkData = indexData self.logger.info("Benchmark data loading finished!")
def get_equity_eod(instruments, start_date, end_date): if Settings.data_source == DataSource.DXDataCenter: data = api.GetEquityBarEOD(instrumentIDList=instruments, startDate=start_date, endDate=end_date, field='closePrice', instrumentIDasCol=True, baseDate='end') elif Settings.data_source == DataSource.DataYes: import os import tushare as ts try: ts.set_token(os.environ['DATAYES_TOKEN']) except KeyError: raise mt = ts.Market() res = [] for ins in instruments: data = mt.MktEqud(ticker=ins, beginDate=start_date.replace('-', ''), endDate=end_date.replace('-', ''), field='tradeDate,ticker,closePrice') res.append(data) data = pd.concat(res) data['tradeDate'] = pd.to_datetime(data['tradeDate'], format='%Y-%m-%d') data['ticker'] = data['ticker'].apply(lambda x: '{0:06d}'.format(x)) data.set_index(['tradeDate', 'ticker'], inplace=True, verify_integrity=True) data = data.unstack(level=-1) return data
turnOverRate.name = 'turnover_rate' turnOverRate.index.name = 'date' return pd.DataFrame(turnOverRate) @plotting_context def createAllTearSheet(positions, transcations=None, prices=None, returns=None, benchmark=None, turn_over=None, tc_cost=0., freq='M', plot=True): perf_metric, perf_df, rollingRisk = createPerformanceTearSheet(prices=prices, returns=returns, benchmark=benchmark, turn_over=turn_over, tc_cost=tc_cost, plot=plot) createPostionTearSheet(positions=positions, plot=plot, freq=freq, convert='raw') if transcations is not None or turn_over is not None: createTranscationTearSheet(positions=positions, transactions=transcations, turn_over=turn_over, freq=freq, plot=plot) return perf_metric, perf_df, rollingRisk if __name__ == "__main__": from DataAPI import api from VisualPortfolio import Settings from VisualPortfolio import DataSource Settings.set_source(DataSource.DXDataCenter) data = api.GetEquityBarEOD('600000', '2012-01-01', '2015-10-01') createPerformanceTearSheet(data['closePrice'], benchmark='000300.zicn') plt.show()