diff --git a/ChangeLog.txt b/ChangeLog.md similarity index 90% rename from ChangeLog.txt rename to ChangeLog.md index d3926d7..1056661 100644 --- a/ChangeLog.txt +++ b/ChangeLog.md @@ -1,3 +1,11 @@ +1.24 +------ +* 增加 TdxExHqDailyBarReader ,用于读取扩展行情(如期货,现货,期权等)的盘后日线数据 https://github.com/rainx/pytdx/issues/25 + +1.23 +------ +* 增加历史分时行情,分时成交,历史分时成交 https://github.com/rainx/pytdx/pull/24 wopalm + 1.22 ------ * 解决扩展行情,无法指定数据长度的问题 https://github.com/rainx/pytdx/issues/22 wopalm diff --git a/pytdx/bin/hqreader.py b/pytdx/bin/hqreader.py index 311351c..703a49f 100644 --- a/pytdx/bin/hqreader.py +++ b/pytdx/bin/hqreader.py @@ -9,11 +9,21 @@ from pytdx.reader import TdxDailyBarReader, TdxFileNotFoundException, TdxNotAssignVipdocPathException from pytdx.reader import TdxMinBarReader from pytdx.reader import TdxLCMinBarReader +from pytdx.reader import TdxExHqDailyBarReader + + +Help_Text = ''' +数据文件格式, + - daily 代表日K线 + - ex_daily 代表扩展行情的日线 + - min 代表5分钟或者1分钟线 + - lc 代表lc1, lc5格式的分钟线 +''' @click.command() @click.argument("input", type=click.Path(exists=True)) @click.option("-o", '--output', help="") -@click.option("-d", "--datatype", default="daily", help="数据文件格式, daily 代表日K线, min 代表5分钟或者1分钟线, lc 代表lc1, lc5格式的分钟线") +@click.option("-d", "--datatype", default="daily", help=Help_Text) def main(input, output, datatype): """ 通达信数据文件读取 @@ -21,6 +31,8 @@ def main(input, output, datatype): if datatype == 'daily': reader = TdxDailyBarReader() + elif datatype == 'ex_daily': + reader = TdxExHqDailyBarReader() elif datatype == 'lc': reader = TdxLCMinBarReader() else: diff --git a/pytdx/exhq.py b/pytdx/exhq.py index aa29226..c8a9b99 100644 --- a/pytdx/exhq.py +++ b/pytdx/exhq.py @@ -19,13 +19,17 @@ from pytdx.parser.ex_get_instrument_count import GetInstrumentCount from pytdx.parser.ex_get_instrument_quote import GetInstrumentQuote from pytdx.parser.ex_get_minute_time_data import GetMinuteTimeData +from pytdx.parser.ex_get_history_minute_time_data import GetHistoryMinuteTimeData +from pytdx.parser.ex_get_transaction_data import GetTransactionData +from pytdx.parser.ex_get_history_transaction_data import GetHistoryTransactionData from pytdx.parser.ex_get_instrument_bars import GetInstrumentBars from pytdx.parser.ex_get_instrument_info import GetInstrumentInfo from pytdx.params import TDXParams -import threading,datetime +import threading +import datetime from pytdx.base_socket_client import BaseSocketClient, update_last_ack_time @@ -46,12 +50,13 @@ Out[8]: 64.0 """ + class TdxExHq_API(BaseSocketClient): def setup(self): ExSetupCmd1(self.client).call_api() - ### API LIST + # API LIST @update_last_ack_time def get_markets(self): @@ -81,6 +86,24 @@ def get_minute_time_data(self, market, code): cmd.setParams(market, code) return cmd.call_api() + @update_last_ack_time + def get_history_minute_time_data(self, market, code, date): + cmd = GetHistoryMinuteTimeData(self.client) + cmd.setParams(market, code, date=date) + return cmd.call_api() + + @update_last_ack_time + def get_transaction_data(self, market, code, start=0, count=1800): + cmd = GetTransactionData(self.client) + cmd.setParams(market, code, start=start, count=count) + return cmd.call_api() + + @update_last_ack_time + def get_history_transaction_data(self, market, code, date, start=0, count=1800): + cmd = GetHistoryTransactionData(self.client) + cmd.setParams(market, code, date, start=start, count=count) + return cmd.call_api() + @update_last_ack_time def get_instrument_info(self, start, count=100): cmd = GetInstrumentInfo(self.client) @@ -90,26 +113,37 @@ def get_instrument_info(self, start, count=100): def do_heartbeat(self): self.get_instrument_count() + if __name__ == '__main__': import pprint api = TdxExHq_API() with api.connect('121.14.110.210', 7727): - log.info("获取市场代码") - #pprint.pprint(api.to_df(api.get_markets())) - log.info("查询市场中商品数量") - pprint.pprint(api.get_instrument_count()) - log.info("查询五档行情") + # log.info("获取市场代码") + # pprint.pprint(api.to_df(api.get_markets())) + # log.info("查询市场中商品数量") + # pprint.pprint(api.get_instrument_count()) + # log.info("查询五档行情") #pprint.pprint(api.to_df(api.get_instrument_quote(47, "IF1709"))) #pprint.pprint(api.get_instrument_quote(8, "10000889")) #pprint.pprint(api.get_instrument_quote(31, "00020")) - log.info("查询分时行情") - #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IF1709"))) - #pprint.pprint(api.get_minute_time_data(8, "10000889")) + # log.info("查询分时行情") + #api.get_minute_time_data(47, "IFL0") + #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IFL0"))) + #pprint.pprint(api.to_df(api.get_minute_time_data(8, "10000889")).tail()) #pprint.pprint(api.get_minute_time_data(31, "00020")) + log.info("查询历史分时行情") + pprint.pprint(api.to_df(api.get_history_minute_time_data(31, "00020", 20170811)).tail()) + log.info("查询分时成交") + pprint.pprint(api.to_df(api.get_transaction_data(31, "00020")).tail()) + + log.info("查询历史分时成交") + pprint.pprint(api.to_df(api.get_history_transaction_data(31, "00020", 20170811)).tail()) + #data = api.get_history_minute_time_data(47, 'IFL0', 20170811) + # pprint.pprint(data) - log.info("查询k线") + # log.info("查询k线") #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 8, "10000843"))) #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 31, "00700"))) - log.info("查询代码列表") - pprint.pprint(api.to_df(api.get_instrument_info(10000, 98))) + # log.info("查询代码列表") + #pprint.pprint(api.to_df(api.get_instrument_info(10000, 98))) diff --git a/pytdx/parser/ex_get_history_minute_time_data.py b/pytdx/parser/ex_get_history_minute_time_data.py new file mode 100644 index 0000000..71b9a52 --- /dev/null +++ b/pytdx/parser/ex_get_history_minute_time_data.py @@ -0,0 +1,53 @@ +# coding=utf-8 + +from pytdx.parser.base import BaseParser +from pytdx.helper import get_datetime, get_volume, get_price +from collections import OrderedDict +import struct + + +class GetHistoryMinuteTimeData(BaseParser): + + def setParams(self, market, code, date): + pkg = bytearray.fromhex("01 01 30 00 01 01 10 00 10 00 0c 24") + code = code.encode("utf-8") + pkg.extend(struct.pack("