Giter Site home page Giter Site logo

mootdx / mootdx Goto Github PK

View Code? Open in Web Editor NEW
597.0 14.0 240.0 12.01 MB

通达信数据读取的一个简便使用封装

Home Page: https://www.mootdx.com

License: MIT License

Python 96.16% Makefile 0.86% Dockerfile 0.46% JavaScript 2.52%
pytdx tdxpy tdx mootdx

mootdx's Introduction

通达信数据读取接口

image image Documentation Status Updates

如果喜欢本项目可以在右上角给颗⭐!你的支持是我最大的动力😎!

郑重声明: 本项目只作学习交流, 不得用于任何商业目的.

版本更新(倒序)

版本更新日志: https://mootdx.readthedocs.io/zh_CN/latest/history/

运行环境

  • 操作系统: Windows / MacOS / Linux 都可以运行.
  • Python: 3.8 以及以上版本.

安装方法

新手建议使用 pip install -U 'mootdx[all]' 安装

PIP 安装方法

# 包含核心依赖安装
pip install 'mootdx'

# 包含命令行依赖安装, 如果使用命令行工具可以使用这种方式安装
pip install 'mootdx[cli]'

# 包含所有扩展依赖安装, 如果不清楚各种依赖关系就用这个命令
pip install 'mootdx[all]'

升级安装

pip install -U tdxpy mootdx

如果不清楚各种依赖关系就用这个命令 pip install -U 'mootdx[all]'

使用说明

以下只列举一些例子, 详细说明请查看在线文档: https://www.mootdx.com

通达信离线数据读取

from mootdx.reader import Reader

# market 参数 std 为标准市场(就是股票), ext 为扩展市场(期货,黄金等)
# tdxdir 是通达信的数据目录, 根据自己的情况修改

reader = Reader.factory(market='std', tdxdir='C:/new_tdx')

# 读取日线数据
reader.daily(symbol='600036')

# 读取分钟数据
reader.minute(symbol='600036')

# 读取时间线数据
reader.fzline(symbol='600036')

通达信线上行情读取

from mootdx.quotes import Quotes

# 标准市场
client = Quotes.factory(market='std', multithread=True, heartbeat=True)

# k 线数据
client.bars(symbol='600036', frequency=9, offset=10)

# 指数
client.index(symbol='000001', frequency=9)

# 分钟
client.minute(symbol='000001')

通达信财务数据读取

from mootdx.affair import Affair

# 远程文件列表
files = Affair.files()

# 下载单个
Affair.fetch(downdir='tmp', filename='gpcw19960630.zip')

# 下载全部
Affair.parse(downdir='tmp')

加微信交流

常见问题

M1 mac 系统PyMiniRacer不能使用,访问: https://github.com/sqreen/PyMiniRacer/issues/143

Stargazers over time

Stargazers over time

mootdx's People

Contributors

bopo avatar piksou avatar vhjxaa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mootdx's Issues

月线取数出问题

`client = Quotes.factory(market='std')

bar=client.bars(symbol='600664', start=0,adjust='',frequency='mon',offset=800)

print(bar)`
使用上面方法取数的时候报下面的错误,返回日期格式有0000的情况

Traceback (most recent call last):
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 649, in parse
ret = self._build_naive(res, default)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 1235, in _build_naive
naive = default.replace(**repl)
^^^^^^^^^^^^^^^^^^^^^^^
ValueError: month must be in 1..12

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pandas_libs\tslib.pyx", line 605, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslibs\parsing.pyx", line 318, in pandas._libs.tslibs.parsing.parse_datetime_string
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 1368, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 651, in parse
six.raise_from(ParserError(str(e) + ": %s", timestr), e)
File "", line 3, in raise_from
dateutil.parser._parser.ParserError: month must be in 1..12: 0-00-00 15:00

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "pandas_libs\tslib.pyx", line 616, in pandas._libs.tslib.array_to_datetime
TypeError: invalid string coercion to datetime for "0-00-00 15:00" at position 102

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 649, in parse
ret = self._build_naive(res, default)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 1235, in _build_naive
naive = default.replace(**repl)
^^^^^^^^^^^^^^^^^^^^^^^
ValueError: month must be in 1..12

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "E:\OpenSource\books\czsc_all\yijixiuxin\chanlun\trade\test\test5.py", line 12, in
bar=client.bars(symbol='600664', start=0,adjust='',frequency='mon',offset=800)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\mootdx\quotes.py", line 196, in bars
return to_data(result, symbol=symbol, client=self, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\mootdx\utils_init_.py", line 159, in to_data
result.index = pd.to_datetime(result.datetime)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\pandas\core\tools\datetimes.py", line 1068, in to_datetime
values = convert_listlike(arg._values, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\pandas\core\tools\datetimes.py", line 438, in _convert_listlike_datetimes
result, tz_parsed = objects_to_datetime64ns(
^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\pandas\core\arrays\datetimes.py", line 2177, in objects_to_datetime64ns
result, tz_parsed = tslib.array_to_datetime(
^^^^^^^^^^^^^^^^^^^^^^^^
File "pandas_libs\tslib.pyx", line 427, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslib.pyx", line 683, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslib.pyx", line 829, in pandas._libs.tslib._array_to_datetime_object
File "pandas_libs\tslib.pyx", line 819, in pandas._libs.tslib._array_to_datetime_object
File "pandas_libs\tslibs\parsing.pyx", line 318, in pandas._libs.tslibs.parsing.parse_datetime_string
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 1368, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\anaconda3\envs\chanlunpy311\Lib\site-packages\dateutil\parser_parser.py", line 651, in parse
six.raise_from(ParserError(str(e) + ": %s", timestr), e)
File "", line 3, in raise_from
dateutil.parser._parser.ParserError: month must be in 1..12: 0-00-00 15:00 present at position 102

关于ETF基金拆分后前复权失效的问题

client.bars(symbol='159939', adjust='qfq', start=0, offset = 800)

如上代码获取基金日K线数据,在2023.02.16日发生了基金拆分,实际需要进行复权,但获取的数据是无复权的数据。

https://i.imgur.com/QMD3KSp.png

https://i.imgur.com/g1uXdr7.png

 600664取月线报错

month must be in 1..12: 0-00-00 15:00 present at position 102
Traceback (most recent call last):
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 649, in parse
ret = self._build_naive(res, default)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1235, in _build_naive
naive = default.replace(**repl)
ValueError: month must be in 1..12

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pandas_libs\tslib.pyx", line 605, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslibs\parsing.pyx", line 320, in pandas._libs.tslibs.parsing.parse_datetime_string
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1368, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 651, in parse
six.raise_from(ParserError(str(e) + ": %s", timestr), e)
File "", line 3, in raise_from
dateutil.parser._parser.ParserError: month must be in 1..12: 0-00-00 15:00

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "pandas_libs\tslib.pyx", line 616, in pandas._libs.tslib.array_to_datetime
TypeError: invalid string coercion to datetime for "0-00-00 15:00" at position 102

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 649, in parse
ret = self._build_naive(res, default)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1235, in _build_naive
naive = default.replace(**repl)
ValueError: month must be in 1..12

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "E:\OpenSource\books\czsc_all\yijixiuxin\chanlun\cl_v2\exchange_tdx.py", line 202, in batch_bars
data=getTdXCLientInstance().bars(symbol=symbol, frequency=frequency, start=istart, offset=offset)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\mootdx\quotes.py", line 213, in bars
return to_data(result, symbol=symbol, client=self, **kwargs)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\mootdx\utils_init_.py", line 165, in to_data
result.index = pd.to_datetime(result.datetime)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\pandas\core\tools\datetimes.py", line 1068, in to_datetime
values = convert_listlike(arg._values, format)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\pandas\core\tools\datetimes.py", line 438, in _convert_listlike_datetimes
result, tz_parsed = objects_to_datetime64ns(
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\pandas\core\arrays\datetimes.py", line 2177, in objects_to_datetime64ns
result, tz_parsed = tslib.array_to_datetime(
File "pandas_libs\tslib.pyx", line 427, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslib.pyx", line 683, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslib.pyx", line 829, in pandas._libs.tslib._array_to_datetime_object
File "pandas_libs\tslib.pyx", line 819, in pandas._libs.tslib._array_to_datetime_object
File "pandas_libs\tslibs\parsing.pyx", line 320, in pandas._libs.tslibs.parsing.parse_datetime_string
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1368, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 651, in parse
six.raise_from(ParserError(str(e) + ": %s", timestr), e)
File "", line 3, in raise_from
dateutil.parser._parser.ParserError: month must be in 1..12: 0-00-00 15:00 present at position 102

month must be in 1..12: 0-00-00 15:00 present at position 102
Traceback (most recent call last):
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 649, in parse
ret = self._build_naive(res, default)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1235, in _build_naive
naive = default.replace(**repl)
ValueError: month must be in 1..12

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pandas_libs\tslib.pyx", line 605, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslibs\parsing.pyx", line 320, in pandas._libs.tslibs.parsing.parse_datetime_string
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1368, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 651, in parse
six.raise_from(ParserError(str(e) + ": %s", timestr), e)
File "", line 3, in raise_from
dateutil.parser._parser.ParserError: month must be in 1..12: 0-00-00 15:00

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "pandas_libs\tslib.pyx", line 616, in pandas._libs.tslib.array_to_datetime
TypeError: invalid string coercion to datetime for "0-00-00 15:00" at position 102

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 649, in parse
ret = self._build_naive(res, default)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1235, in _build_naive
naive = default.replace(**repl)
ValueError: month must be in 1..12

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "..\exchange_tdx.py", line 284, in bars_history
data=getTdXCLientInstance().bars(symbol=symbol, frequency=freq, start=0, offset=offset)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\mootdx\quotes.py", line 213, in bars
return to_data(result, symbol=symbol, client=self, **kwargs)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\mootdx\utils_init_.py", line 165, in to_data
result.index = pd.to_datetime(result.datetime)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\pandas\core\tools\datetimes.py", line 1068, in to_datetime
values = convert_listlike(arg._values, format)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\pandas\core\tools\datetimes.py", line 438, in _convert_listlike_datetimes
result, tz_parsed = objects_to_datetime64ns(
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\pandas\core\arrays\datetimes.py", line 2177, in objects_to_datetime64ns
result, tz_parsed = tslib.array_to_datetime(
File "pandas_libs\tslib.pyx", line 427, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslib.pyx", line 683, in pandas._libs.tslib.array_to_datetime
File "pandas_libs\tslib.pyx", line 829, in pandas._libs.tslib._array_to_datetime_object
File "pandas_libs\tslib.pyx", line 819, in pandas._libs.tslib._array_to_datetime_object
File "pandas_libs\tslibs\parsing.pyx", line 320, in pandas._libs.tslibs.parsing.parse_datetime_string
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 1368, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "D:\anaconda3\envs\chanlunpy38\lib\site-packages\dateutil\parser_parser.py", line 651, in parse
six.raise_from(ParserError(str(e) + ": %s", timestr), e)
File "", line 3, in raise_from
dateutil.parser._parser.ParserError: month must be in 1..12: 0-00-00 15:00 present at position 102

关于client.quotes 请求000003代码时出现报错

Traceback (most recent call last):
File "D:/pythonProject/vnpy/vnpy_ths/mytest.py", line 134, in
data = client.quotes(symbol=['000003'])
File "D:\ProgramData\anconda\envs\py38\lib\site-packages\mootdx\quotes.py", line 177, in quotes
result = self.client.get_security_quotes(symbol)
File "D:\ProgramData\anconda\envs\py38\lib\site-packages\tdxpy\base_socket_client.py", line 42, in wrapper
raise ValidationException(*e.args)
tdxpy.exceptions.ValidationException: invalid literal for int() with base 10: ''

历史分笔数据怎么查某一天全部的数据?

1.我看文档是以下示例代码,offset多少可以拿到一天的全部数据?

from mootdx.quotes import Quotes

client = Quotes.factory(market='std')
client.transactions(symbol='000001', start=0, offset=10, date='20170209')

2.文档里是分笔明细,请问有逐笔成交明细吗

reader.py 关于通达信特有指数的数据获取修改

find_path() 方法增加一个分支判断, 如果是88开头的不属于任何市场, 就是通达信特有的指数而已.
但是指数数据被放在 vipdoc / sh 下, reader.py 如下这样修改 reader 就可以获取通达信特有指数的数据了

if '#' in symbol:
     market = 'ds'

# 通达信特有的板块指数88****开头的日线数据放在 sh 文件夹下
elif symbol.startswith('88'):
      market = 'sh'

else:
      # 判断是sh还是sz
      market = get_stock_market(symbol, True)

NameError: name 'instance' is not defined

from mootdx.quotes import Quotes

# client_std = Quotes.factory(market='std')
# data = client_std.minute(symbol='000001')
# print(data)

client = Quotes.factory(market='ext')
# print(client.markets())
data2 = client.minute(market=47, symbol='IF1709')
print(data2)

以上代码,如果注释股票部分,无论是 markets 方法还是minute方法,均报以下错误:

File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/tenacity/__init__.py", line 324, in wrapped_f
    return self(f, *args, **kw)
  File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/tenacity/__init__.py", line 404, in __call__
    do = self.iter(retry_state=retry_state)
  File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/tenacity/__init__.py", line 348, in iter
    if not (is_explicit_retry or self.retry(retry_state=retry_state)):
  File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/tenacity/retry.py", line 203, in __call__
    return any(r(retry_state) for r in self.retries)
  File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/tenacity/retry.py", line 203, in <genexpr>
    return any(r(retry_state) for r in self.retries)
  File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/tenacity/retry.py", line 128, in __call__
    return self.predicate(retry_state.outcome.result())
  File "/Users/apple/opt/anaconda3/envs/one/lib/python3.9/site-packages/mootdx/quotes.py", line 88, in check_empty
    if instance and _empty:
NameError: name 'instance' is not defined

如果不注释股票部分,不报错,但是返回结果为空:

Empty DataFrame
Columns: []
Index: []

System : Mac Pro
Python : 3.9.7
mootdx : 0.8.12

调用函数reader.block(symbol='block_zs', group=False)抛异常

File "D:/dowa/python/stock/Release/1_daily_trade/daily_3_gnbk_tdx_v3.py", line 281, in
tdx.get_gnbk_meta()
File "D:/dowa/python/stock/Release/1_daily_trade/daily_3_gnbk_tdx_v3.py", line 45, in get_gnbk_meta
gnbk = reader.block(symbol='block_zs', group=False)
File "C:\Users\dowa\AppData\Local\Programs\Python\Python37\lib\site-packages\mootdx\reader.py", line 151, in block
return block.block(self.tdxdir, symbol, group=group, **kwargs)
AttributeError: module 'mootdx.block' has no attribute 'block'

多线程调用时候采用bestip=True出现异常

2023-06-29 01:27:19,419 - mootdx - INFO - [-] 选择最快的服务器...
21775
连接服务器tdx[1]异常:Set of coroutines/Futures is empty.,11111111111
连接服务器tdx[2]异常:Set of coroutines/Futures is empty.,11111111111

VSCode Jupyter环境下,找不到服务器。而直接在python环境下运行正常

在VSCode Jupyter中运行以下代码:

from mootdx.quotes import Quotes
 client = Quotes.factory(market='std', multithread=True, heartbeat=True)
....

报错信息:

2023-06-02 08:17:29,693 - mootdx - INFO - [-] 选择最快的服务器...
2023-06-02 08:17:29,694 - mootdx - ERROR - 请手动运行`python -m mootdx bestip`
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[2], line 4
      1 from mootdx.quotes import Quotes
      3 # 标准市场
----> 4 client = Quotes.factory(market='std', multithread=True, heartbeat=True, bestip=True, timeout=15)

File [~\AppData\Roaming\Python\Python310\site-packages\mootdx\quotes.py:43](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/zhang/MyCode/Jupyter/QNT/pyTDX/~/AppData/Roaming/Python/Python310/site-packages/mootdx/quotes.py:43), in Quotes.factory(market, **kwargs)
     40 if market == 'ext':
     41     return ExtQuotes(**kwargs)
---> 43 return StdQuotes(**kwargs)

File [~\AppData\Roaming\Python\Python310\site-packages\mootdx\quotes.py:151](https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/zhang/MyCode/Jupyter/QNT/pyTDX/~/AppData/Roaming/Python/Python310/site-packages/mootdx/quotes.py:151), in StdQuotes.__init__(self, server, bestip, timeout, **kwargs)
    148         del kwargs[x]
    150 logger.debug(f'server: {self.server}')
--> 151 ip, port = self.server
    153 self.client = TdxHq_API(heartbeat=False, auto_retry=True, raise_exception=False, **kwargs)
    154 self.client.connect(ip, int(port), time_out=timeout)

ValueError: not enough values to unpack (expected 2, got 0)

Affair.parse length mismatch

根据示例代码遇到了如下错误:

(base) root@f7584e55bf60:/opt/mootdx# pip list |grep mootdx
mootdx                  0.10.10

(base) root@f7584e55bf60:/opt/mootdx# python parse.py 
Traceback (most recent call last):
  File "/opt/mootdx/parse.py", line 3, in <module>
    data = Affair.parse(downdir="gpcw", filename="gpcw20221231.zip")
  File "/opt/conda/lib/python3.10/site-packages/mootdx/affair.py", line 68, in parse
    return financial.FinancialReader().to_data(filepath, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/mootdx/financial/financial.py", line 34, in to_data
    return crawler.to_df(data, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/mootdx/financial/financial.py", line 222, in to_df
    df.columns = columns
  File "/opt/conda/lib/python3.10/site-packages/pandas/core/generic.py", line 5915, in __setattr__
    return object.__setattr__(self, name, value)
  File "pandas/_libs/properties.pyx", line 69, in pandas._libs.properties.AxisProperty.__set__
  File "/opt/conda/lib/python3.10/site-packages/pandas/core/generic.py", line 823, in _set_axis
    self._mgr.set_axis(axis, labels)
  File "/opt/conda/lib/python3.10/site-packages/pandas/core/internals/managers.py", line 230, in set_axis
    self._validate_set_axis(axis, new_labels)
  File "/opt/conda/lib/python3.10/site-packages/pandas/core/internals/base.py", line 70, in _validate_set_axis
    raise ValueError(
ValueError: Length mismatch: Expected axis has 582 elements, new values have 581 elements

获取除权信息失败

可以正常获取数据,但是继续获取除权数据时候,显示连接超时。请测试确认是不是有问题

from mootdx.quotes import Quotes

client = Quotes.factory(market='std')
print(client)
data1=client.bars(symbol='600521', frequency=9, offset=10)
print(data1)

前复权

data = client.bars(symbol='600521', adjust='qfq')
print(data)

通达信贡献度数据获取

我正在使用通达信的贡献度数据进行量化交易,现阶段我是使用rpa控制电脑自动操作通达信来下载数据的,不知道有没有办法通过接口直接获取。希望可以交流一下~

贡献度数据获取方式:
打开通达信首页 - 键盘输入gxd - 选择贡献度

1分钟线数据

1分钟线数据无法读出OHLC和成交量、成交额么?

请问查询历史分笔中不能获取“笔数”信息

请问查询历史分笔中不能获取“笔数”信息,怎么解决?接收的数据VOL 和volume是相同的数据都是交易量,能不能接收交易的笔数是多少?比如20230809这一天000001平安银行15:00收盘价格是12.17 成交量是10955 成交笔数是222。但似乎我用代码获取不了成交笔数222这个数据。谢谢!!!!!!!!

about/

关于我 | BoPo的博客

tdx 的复权算法不正确还是调用方式不对?,谢谢。

请教各位,通过例子验证,使用前复权越向前的数据差异越大,是tdx 的算法有问题还是什么情况,有思路也欢迎大家讨论。

client = Quotes.factory(market="std")
bfq_data = client.bars(symbol="600036", offset=800) # 设置为800 ,有两年多的数据,中间有3次分红或配股。
xdxr_data = client.xdxr(symbol="600036")
bfq_data["code"] = "600036"
if name == "main":
print(bfq_data)
result = reversion(bfq_data, xdxr_data, "01")
print(result)
输出结果:
open close high ... datetime volume code
datetime ...
2020-01-08 15:00:00 38.95 38.41 38.95 ... 2020-01-08 15:00 363234.0 600036
2020-01-09 15:00:00 38.84 38.90 39.00 ... 2020-01-09 15:00 303359.0 600036
2020-01-10 15:00:00 38.90 39.04 39.28 ... 2020-01-10 15:00 285931.0 600036
2020-01-13 15:00:00 39.28 39.10 39.28 ... 2020-01-13 15:00 327808.0 600036
2020-01-14 15:00:00 39.14 38.81 39.63 ... 2020-01-14 15:00 335646.0 600036

image

image

股票列表获取不到301 和 689 的股票

mootdx 版本:0.9.1

from mootdx.quotes import Quotes
from mootdx import consts

client = Quotes.factory(market='std')
sz_symbol = client.stocks(market=consts.MARKET_SZ)

sz_symbol.loc[sz_symbol['code'].str.startswith('301')]

sz_symbol = client.stocks(market=consts.MARKET_SH)

sz_symbol.loc[sz_symbol['code'].str.startswith('689')]

Affair.parse get error

tdx financial data columns changed

import mootdx
mootdx.__version__

'0.9.1'

from mootdx.affair import Affair

data = Affair.parse(downdir='~/temp', filename='gpcw20120630.zip')

get error

  File "<ipython-input-16-1df5be5de347>", line 1, in <cell line: 1>
    data = Affair.parse(downdir='~/temp', filename='gpcw20120630.zip')
  File "/opt/conda/lib/python3.8/site-packages/mootdx/affair.py", line 69, in parse
    return financial.FinancialReader().to_data(filepath, **kwargs)
  File "/opt/conda/lib/python3.8/site-packages/mootdx/financial/financial.py", line 33, in to_data
    data = crawler.to_df(data, **kwargs)
  File "/opt/conda/lib/python3.8/site-packages/mootdx/financial/financial.py", line 224, in to_df
    df.columns = columns
  File "/opt/conda/lib/python3.8/site-packages/pandas/core/generic.py", line 5588, in __setattr__
    return object.__setattr__(self, name, value)
  File "pandas/_libs/properties.pyx", line 70, in pandas._libs.properties.AxisProperty.__set__
  File "/opt/conda/lib/python3.8/site-packages/pandas/core/generic.py", line 769, in _set_axis
    self._mgr.set_axis(axis, labels)
  File "/opt/conda/lib/python3.8/site-packages/pandas/core/internals/managers.py", line 214, in set_axis
    self._validate_set_axis(axis, new_labels)
  File "/opt/conda/lib/python3.8/site-packages/pandas/core/internals/base.py", line 69, in _validate_set_axis
    raise ValueError(
ValueError: Length mismatch: Expected axis has 606 elements, new values have 581 elements

ValueError: Length mismatch: Expected axis has 582 elements, new values have 581 elements

Python 3.10.12 (main, Jul  5 2023, 15:02:25) [Clang 14.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mootdx.affair import Affair
>>> result = Affair.parse(downdir='./', filename='gpcw20220630.zip')
5.20MB [00:07, 724kB/s]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/mootdx/affair.py", line 68, in parse
    return financial.FinancialReader().to_data(filepath, **kwargs)
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/mootdx/financial/financial.py", line 34, in to_data
    return crawler.to_df(data, **kwargs)
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/mootdx/financial/financial.py", line 222, in to_df
    df.columns = columns
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/pandas/core/generic.py", line 5915, in __setattr__
    return object.__setattr__(self, name, value)
  File "pandas/_libs/properties.pyx", line 69, in pandas._libs.properties.AxisProperty.__set__
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/pandas/core/generic.py", line 823, in _set_axis
    self._mgr.set_axis(axis, labels)
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/pandas/core/internals/managers.py", line 230, in set_axis
    self._validate_set_axis(axis, new_labels)
  File "/Users/colin/opt/anaconda3/envs/mtdx/lib/python3.10/site-packages/pandas/core/internals/base.py", line 70, in _validate_set_axis
    raise ValueError(
ValueError: Length mismatch: Expected axis has 582 elements, new values have 581 elements

Affair.parse get error

Same As Issue #20

import mootdx
mootdx.__version__

Out[3]: '0.10.10'

from mootdx.affair import Affair

data = Affair.parse(downdir='~/temp', filename='gpcw20120630.zip')

ValueError: Length mismatch: Expected axis has 582 elements, new values have 581 elements

600664,600665数据报错

版本号:0.10.11;
报错内容:
month must be in 1..12: 0-00-00 15:00 present at position 0
month must be in 1..12: 0-00-00 15:00 present at position 0
查询数据内容有缺失:
分别是600664于1999-06-15~2006-03-14数据;
以及600665于1999-12-09~2007-03-12数据;

读取不到北交所本地数据

from mootdx.reader import Reader
reader = Reader.factory(market='std', tdxdir='c:/new_tdx')
data = reader.daily(symbol='430047')

Empty DataFrame

Affair.files是否可以增加对已退市股票财务报表的支持

尝试使用Affair.files()获取并下载、解析全部数据包,经过对已获取数据的筛查,发现其中不包含截止当前已退市的上市公司的历史财务报表数据。(例如,获取1990至今的全部年季报数据,在code一列中,不存在已退市的000013等)

是否可以增加对已退市公司的历史财务数据的支持

关闭连接报错

class TdxClient():

    def __init__(self):
        dlog("初始化tdx链接")
        self.client = Quotes.factory(market='std', multithread=True, heartbeat=True, bestip=False,
                                     verbose=0, quiet=False, timeout=15)

    def getClient(self):
        if self.client.closed:
            `dlog("tdx链接断开,重新连接")`
            self.client = Quotes.factory(market='std', multithread=True, heartbeat=True, bestip=False,
                                         verbose=0, quiet=False, timeout=15)
        return self.client

    def close(self):
        if not self.client.closed:
            dlog("tdx链接自动断开")
            self.client.close()

close的时候报错,错误代码如下

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/tdxpy/base_socket_client.py", line 223, in disconnect
    self.client.shutdown(socket.SHUT_RDWR)
OSError: [Errno 107] Transport endpoint is not connected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/apscheduler/executors/base.py", line 125, in run_job
    retval = job.func(*job.args, **job.kwargs)
  File "/code/task/stock_his_task.py", line 115, in updateStockInfo
    spider.tdxClient.close()
  File "/code/spider/tdx_client.py", line 22, in close
    self.client.close()
  File "/usr/local/lib/python3.10/site-packages/mootdx/quotes.py", line 89, in close
    hasattr(self.client, "close") and self.client.close()
  File "/usr/local/lib/python3.10/site-packages/tdxpy/base_socket_client.py", line 240, in close
    self.disconnect()
  File "/usr/local/lib/python3.10/site-packages/tdxpy/base_socket_client.py", line 229, in disconnect
    raise TdxConnectionError(f"disconnect err: {e}")
tdxpy.exceptions.TdxConnectionError: disconnect err: [Errno 107] Transport endpoint is not connected

通达信ip过期了

更新方法如下:
1.装一个通达信,找到目录下的connect.cfg
2.把ip写到mootdx生成的config.json 要想bestip能自动,就把mootdx的源码包里的consts里的默认ip都改了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.