Giter Club home page Giter Club logo

wencai's Introduction

wencai

PyPi VersionLicenseLinux

wencai是i问财的策略回测接口的Pythonic工具包,满足量化爱好者和数据分析师在量化方面的需求。

i问财是同花顺旗下专业的机器人智能选股问答平台,致力于为投资者提供宏观数据、新闻资讯、A股、港美股、新三板、基金等各类理财方案。

Latest Version

wencai==0.2.6

Dependencies

  • Python 2.x/3.x(当前测试使用Python3.5.5)
  • requests>=2.14.2
  • beautifulsoup4>=4.5.1
  • PyExecJS>=1.5.1

Installation

  • 方式1:pip install wencai
  • 方式2:git clone 此github项目,然后进入根目录后进行python setup.py install
  • 方式3:访问https://pypi.python.org/pypi/wencai下载安装

Upgrade

pip install wencai --upgrade

API

具体API接口请点击这里:Wiki

Quick Start

Example 1. 获取回测分析

import wencai as wc

# 若需中文字段则cn_col=True,chromedriver路径不在根目录下需指定execute_path
wc.set_variable(cn_col=True)

strategy = wc.get_scrape_report(query='上证指数上穿10日均线',
                                 start_date='2019-10-01',
                                 end_date='2019-10-19',
                                 period='1,2,3,4',
                                 benchmark='hs000300')

print(strategy.backtest_data)

平均区间涨跌幅 盈亏比 次日开盘平均涨跌幅 持有期 次日高开概率 同期基准 基准上涨概率 最大涨跌幅 最小涨跌幅 上涨概率

0 0.000452 1.049851 0.000191 1 0.389201 0 0 0.101504 -0.100000 0.467942

1 0.002819 1.248264 0.000552 2 0.396705 0 0 0.210123 -0.108460 0.494297

2 0.005292 1.425027 0.001694 3 0.425254 0 0 0.330961 -0.117544 0.526851

3 0.005753 1.406133 0.002266 4 0.435000 0 0 0.377018 -0.124862 0.508333

Example 2.获取策略

import wencai as wc

# 若需中文字段则cn_col=True,chromedriver路径不在根目录下需指定execute_path
wc.set_variable(cn_col=True)

transaction = wc..get_strategy(query='非停牌;非st;今日振幅小于5%;量比小于1;涨跌幅大于-5%小于1%;流通市值小于20亿;市盈率大于25小于80;主力控盘比例从大到小',
                               start_date='2018-10-09',
                               end_date='2019-07-16',
                               period='1',
                               fall_income=1,
                               lower_income=5,
                               upper_income=9,
                               day_buy_stock_num=1,
                               stock_hold=2)

print(transaction.history_pick(trade_date='2019-07-16', hold_num=1))

涨跌幅 当日收盘价(元) dde大单净量(%) 股本规模 股票代码 股票市场 股票名称 换手率

0 -0.10152284 9.84 -0.11978362 小盘股 002599 SZ 盛通股份 0.63294771

Example 3.获取事件评测

import wencai as wc

# 若需中文字段则cn_col=True,chromedriver路径不在根目录下需指定execute_path
wc.set_variable(cn_col=True)

report = wc.get_event_evaluate(end_date='2019-07-16', 
                               index_code="1a0001", 
                               period='1', 
                               query="上证指数上穿10日均线",
                               start_date="2016-05-16")
print(report.event_list)
print(report.report_data)

{'最大上涨概率': 9.506849315068482e-05, '最优平均涨跌幅': 0.5753424657534246, '历史发生次数': 73}

次日涨跌幅 事件日期 涉及标的

0 -0.02580 20190705 上证指数

1 0.00088 20190617 上证指数

2 -0.00558 20190611 上证指数

3 0.00165 20190528 上证指数

4 -0.00491 20190521 上证指数

5 0.00580 20190515 上证指数

Example 4.一键搜索(目前仅能获取首页内容)

import wencai as wc

result = wc.search(query="当前热股")
print(result)

开盘价 成交量 振幅 收盘价 最低价 最新价 最高价 股票代码 股票简称

0 7.21 85040786.00 19.556 8.43 7.18 8.43 8.59 300320.SZ 海达股份

1 3.67 77019302.00 10.354 4.04 3.66 4.04 4.04 000420.SZ 吉林化纤

2 12.23 59261312.00 11.318 13.61 12.21 13.61 13.61 002386.SZ 天原股份

3 11.10 44611374.00 7.050 11.86 11.10 11.86 11.86 000848.SZ 承德露露

4 9.30 29671324.00 11.915 10.34 9.22 10.34 10.34 605167.SH 利柏特

5 24.55 12190900.00 6.571 26.11 24.55 26.11 26.11 002895.SZ 川恒股份

6 35.36 35961355.00 14.455 38.57 34.77 38.57 39.88 300087.SZ 荃银高科

7 20.15 12087816.00 11.204 22.08 20.11 22.08 22.39 603855.SH 华荣股份

8 21.00 13255236.00 20.170 23.02 20.70 23.02 24.98 300602.SZ 飞荣达

9 23.41 19325582.00 10.612 25.24 23.21 25.24 25.69 002741.SZ 光华科技

Example 5.使用代理机制

import wencai as wc

# 多个代理池
proxies = [{'http': 'http://localhost:1087', 'https': 'http://localhost:1087'},
          {'http': 'http://localhost:1088', 'https': 'http://localhost:1088'}]

# 单个代理池
proxies = {'http': 'http://localhost:1087', 'https': 'http://localhost:1087'}

wc.set_variable(cn_col=True, proxies=proxies)

r = wc.search('当前热股')
print(r)

Change Logs

0.2.6 2021/09/11

  • 修复pip包无hexin.js问题

0.2.5 2021/08/13

  • 更新Cookies机制;
  • 新增分时数据接口。
  • 新增一键搜索(目前仅能获取首页内容)
  • 新增代理机制

0.2.2 2021/04/08

  • 正常测试接口是否可用;
  • 优化报错会直接返回接口结果;
  • cookies缓存带有时效性。

0.2.0 2021/01/07

  • 正常测试接口是否可用;
  • 补充说明调用逻辑。

0.2.0 2019/10/19

  • 重构问财接口调用逻辑;
  • 新增chromedriver调用接口;
  • 新增【事件评测】接口;

0.1.5 2018/3/5

  • 修正:调用问财策略接口失败问题

0.1.3 2017/11/27

  • 创建第一个版本

Others

此工具包不得用于任何商业目的,仅可用于爱好量化交易者分享学习和技术讨论。

Welcome to Star and Follow~

wencai's People

Contributors

graysilver 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  avatar  avatar  avatar

wencai's Issues

search功能运行json报错

多次循环运行search功能出现json报错:
JSONDecodeError: Extra data: line 1 column 1 (char 0)

望大佬解决

wc.seach接口报错

wc.search接口报错,好像用不了了:
`Traceback (most recent call last):
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 700, in urlopen
self._prepare_proxy(conn)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 994, in _prepare_proxy
conn.connect()
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\connection.py", line 364, in connect
self.sock = conn = self._connect_tls_proxy(hostname, conn)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\connection.py", line 505, in connect_tls_proxy
ssl_context=ssl_context,
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\util\ssl
.py", line 453, in ssl_wrap_socket
ssl_sock = ssl_wrap_socket_impl(sock, context, tls_in_tls)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\util\ssl
.py", line 495, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock)
File "C:\Users\Administrator\Anaconda3\lib\ssl.py", line 412, in wrap_socket
session=session
File "C:\Users\Administrator\Anaconda3\lib\ssl.py", line 850, in _create
self.do_handshake()
File "C:\Users\Administrator\Anaconda3\lib\ssl.py", line 1108, in do_handshake
self._sslobj.do_handshake()
FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\adapters.py", line 499, in send
timeout=timeout,
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 786, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "C:\Users\Administrator\Anaconda3\lib\site-packages\urllib3\util\retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='search.10jqka.com.cn', port=443): Max retries exceeded with url: /unifiedwap/unified-wap/v2/result/get-robot-data (Caused by ProxyError('Cannot connect to proxy.', FileNotFoundError(2, 'No such file or directory')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 1, in
File "C:\Users\Administrator\Anaconda3\lib\site-packages\wencai\core\event.py", line 48, in search
return Wencai(proxies=globals()['global_proxies'], verify=globals()['verify']).search(query_string=query)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\wencai\core\crawler.py", line 101, in search
data=payload, force_cookies=True)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\wencai\core\session.py", line 51, in post_result
return super(Session, self).post(url=url, data=data, json=json, **kwargs)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\sessions.py", line 635, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\sessions.py", line 723, in send
history = [resp for resp in gen]
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\sessions.py", line 723, in
history = [resp for resp in gen]
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\sessions.py", line 274, in resolve_redirects
**adapter_kwargs,
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "C:\Users\Administrator\Anaconda3\lib\site-packages\requests\adapters.py", line 559, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='search.10jqka.com.cn', port=443): Max retries exceeded with url: /unifiedwap/unified-wap/v2/result/get-robot-data (Caused by ProxyError('Cannot connect to proxy.', FileNotFoundError(2, 'No such file or directory')))`

recommend: 希望有一个单一功能的查询接口

r = wc.get_strategy() 会返回一个策略选股表,但其中无法查询所属行业、概念、首次涨停时间、最终涨停时间等信息。
建议有如下查询功能:

wc.query(w= r"上一交易日没有涨停;市值大于100亿;今日涨停时间", 
fields=["涨停时间",“总市值”])-> pd.DataFrame,   

# wc.get_strategy(策略回测) 运行结果不显示 #历史明细

print(r.profit_data) # 累计收益数据
print(r.backtest_data) # 报告评级
print(r.condition_data) # 准确回测语句
print(r.history_detail(period='2')) # 历史明细查询
print(r.history_pick(trade_date='2020-11-19', hold_num=1)) # 策略选股

history_detail 这一句输出的dataframe为空是怎么回事?

Empty DataFrame
Columns: []
Index: []

滑动验证处理

请问各位大哥目前的验证码机制可以如何破解呢,是否有相关的项目可以参考呢,谢谢

search功能能否完善

目前如使用wc.search(“找出今天的涨停板”) 只会返回50条数据,能否完善返回全部的数据呢。谢谢!

search报缺少必要参数

{'status_code': -302, 'status_msg': '缺少必要参数', 'data': [], 'logid': '7795b8d93a43ba01234686dc6edbf071'}

connection or something of lack

D:.virtualenvs\study\lib\site-packages\urllib3\connectionpool.py:981: InsecureRequestWarning: Unverified HTTPS request is being made to host 'search.10jqka.com.cn'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
warnings.warn(
Traceback (most recent call last):
File "d:\sourcecodes\projects\seekentries.py", line 3, in
result = wc.search(query="当前热股")
File "D:.virtualenvs\study\lib\site-packages\wencai\core\event.py", line 48, in search
return Wencai(proxies=globals()['global_proxies'], verify=globals()['verify']).search(query_string=query)
File "D:.virtualenvs\study\lib\site-packages\wencai\core\crawler.py", line 102, in search
result = r.json()['data']['answer'][0]['txt'][0]['content']['components'][0]['data']['datas']
TypeError: list indices must be integers or slices, not str

问财有验证码机制了

爬一段时间后,会需要你再填一次验证码才能继续爬,我登陆网页输入验证码后,接着用本地的cookies可以接着爬取,这个作者能维护一下吗?

返回的数据和直接搜索的数据不一致。

strategy = wc.get_strategy("上升通道")
print(strategy)

返回

 日期    股票代码  股票简称   涨跌幅  当日收盘价(元)  dde大单净量(%)  股本规模   换手率
0  2018-11-06  000002   万科A -2.36     24.04       -0.10  超大盘股  0.60
1  2018-11-06  000008  神州高铁  3.43      4.52       -0.04   中盘股  2.03

和问财主页上返回的结果不一致

hexin.js找不到

FileNotFoundError: [Errno 2] No such file or directory: 'AppData\Local\Programs\Python\Python37-32\lib\site-packages\wencai/js/hexin.js'

ws.search不能用了吗? requests.exceptions.JSONDecodeError

Traceback (most recent call last):
File "D:\develope\IdeaProjects\PythonHelloword.idea\src\WenCaiAPI.py", line 192, in
str =wc.search('今日热股')
File "D:\develope\IdeaProjects\python3.9_space\lib\site-packages\wencai\core\event.py", line 48, in search
return Wencai(proxies=globals()['global_proxies'], verify=globals()['verify']).search(query_string=query)
File "D:\develope\IdeaProjects\python3.9_space\lib\site-packages\wencai\core\crawler.py", line 102, in search
result = r.json()['data']['answer'][0]['txt'][0]['content']['components'][0]['data']['datas']
File "D:\develope\IdeaProjects\python3.9_space\lib\site-packages\requests\models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

这个是被反爬限制了吗?

问财搜索条件是:当前热股 的时候啥都没有

www.iwencai.com
搜索条件: 当前热股

然后啥都没有返回啊 谢谢大牛牛指教

r = wc.get_strategy(query='当前热股',
start_date='2018-10-09',
end_date='2019-07-16',
period='1',
fall_income=1,
lower_income=5,
upper_income=9,
day_buy_stock_num=1,
stock_hold=2)
print(r.profit_data) # 累计收益数据
print(r.backtest_data) # 报告评级
print(r.condition_data) # 准确回测语句
print(r.history_detail(period='1')) # 历史明细查询
print(r.history_pick(trade_date='2019-07-16', hold_num=1)) # 策略选股

wc.search(query='当前热股') 出错

result = wc.search(query='当前热股')

File "D:\wencai\core\event.py", line 48, in search
return Wencai(proxies=globals()['global_proxies'], verify=globals()['verify']).search(query_string=query)
File "D:\wencai\core\crawler.py", line 102, in search
result = r.json()['data']['answer'][0]['txt'][0]['content']['components'][0]['data']['datas']
TypeError: list indices must be integers or slices, not str

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.