diff --git a/vnpy/trader/data_source.py b/vnpy/trader/data_source.py new file mode 100644 index 00000000..fa28798f --- /dev/null +++ b/vnpy/trader/data_source.py @@ -0,0 +1,73 @@ +# 国内商品期货数据源 +# 华富资产 李来佳 + +import pandas as pd +import json +import requests +from datetime import datetime + +import os,sys +ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) +if ROOT_PATH not in sys.path: + sys.path.append(ROOT_PATH) + +from vnpy.trader.vtGlobal import globalSetting + +class DataSource: + def __init__(self): + self.bar_url = None + + if globalSetting['dataSource']: + self.bar_url = globalSetting['dataSource'] + self.headers = {} + + requests.adapters.DEFAULT_RETRIES = 5 + session = requests.session() + session.keep_alive = False + + def get_price(self, order_book_id, start_date, end_date, frequency, fields=[], + skip_suspended=True, include_now=True, + adjust_type='pre', adjust_orig=None): + + if frequency not in ('1m', '5m', '15m', '30m', '60m', '1d'): + raise NotImplementedError + if self.bar_url is None: + raise NotImplementedError + + fields_str = fields if isinstance(fields, str) else ",".join(fields) + values = {"order_book_id": order_book_id, "frequency": frequency, "include_now": include_now, + "start_date": start_date, "end_date": end_date, "fields": fields_str} + + rsp_data = '' + try: + rsp_data = requests.get(self.bar_url, params=values) + except Exception as e: + print( str(e),file=sys.stderr) + + json_data = json.loads(rsp_data.content.decode("utf-8")) + + df = pd.read_json(json_data, orient="index", typ="frame") + df.index.names = ['datetime'] + if fields_str.strip() and fields_str.find(",") < 0: + df = df[fields_str] + + #print df.columns + #print df + #print type(df) + + return df + +if __name__ == '__main__': + + + d = DataSource() + fields = ['open', 'close', 'high', 'low', 'volume', 'open_interest', 'limit_up', 'limit_down', 'trading_date'] + df = d.get_price('I1809',start_date='2018-02-01',end_date='2018-04-17',frequency='5m',fields = fields) + #df = d.get_price('ZC99', start_date='2017-01-01', end_date=datetime.now().strftime('%Y-%m-%d'), frequency='1m', fields=fields) + + for idx in df.index: + row = df.loc[idx] + bartime = str(idx) + dt_timestamp = df['trading_date'].loc[idx] + #dt_bartime = df['datetime'].loc[idx] + print('bartime:{},trading_date:{}'.format(bartime,datetime.fromtimestamp(dt_timestamp/1e3).strftime('%Y-%m-%d')))