0%


title: 万矿WindQuant API函数简介
tags:

  • quant
    categories:
  • Quant
    date: 2020-04-25 15:59:18

万矿这个API,取的名字很不好记,完全猜不出是什么单词的简写。

wsd 日期序列

用于提取多品种单指标或者单品种多指标的时间序列数据。就是说要么是一只股票和多个指标或者是多个股票的一个指标。

一只股票和多个指标,index 为日期,指标名为 columns 的名字。

多个股票和一个指标,index 为日期,股票名为 columns 的名字。

  1. 每次限8000单元格;
  2. 技术指标、技术形态、部分融资融券指标单次限取2000个单元格(大于2000个单元格,可分多次获取)

wss 多维数据

用于提取多品种多指标在某个时间点的截面数据。

  1. 每次限8000单元格;
  2. 技术指标、技术形态、部分融资融券指标单次限取2000个单元格(大于2000个单元格,可分多次获取)

wset 数据集

用来获取数据集信息,主要用于获取板块成分、指数成分以及各证券品种的专题统计报表数据。

  1. 停牌、复牌股票:一次最长获取一个月时间段内的数据;
  2. 分红送转:一次最长获取10年时间段内的数据;
  3. 期货合约持仓排名:一次最长获取一个月时间段内的数据

wses 板块时序

获取选定股票板块一段时间内的历史序列数据。

  1. 支持多板块,但仅支持单指标;
  2. 提取多板块、单指标时,时间跨度<250个交易日、板块数<20;
  3. 提取单板块、单指标时,时间跨度约800个周期。

wsee 板块多维

获取选定股票板块的历史截面数据。

  1. 支持多板块、多指标且板块数*指标数≤1000

wsi 分钟数据

主要包括证券的基本行情和部分技术指标的分钟数据。

  1. 目前只支持上交、深交、中金、上期、大商、郑商的行情;
  2. 每次取一个code的时候,可以取最近3年数据(推荐使用此方法);
  3. 每次取多个code的时候,有如下限制:code数*天数<=100

wst 日内跳价

主要包括证券的日内盘口买卖五档快照数据和分时成交(tick数据)。

  1. 目前只支持上交、深交、中金、上期、大商、郑商的行情;
  2. 可取最近7个交易日的数据;
  3. 一次只能取1个Windcode。

wsq 实时行情

主要包括各证券当天指标实时数据,可以一次性请求实时快照数据,也可以通过订阅的方式获取实时数据。

通过 Jupyter Notebook 做数据研究不错,但版本控制是个问题。后来找到一个最佳实践。

在保存ipynb文件之前,自动做一个ipynb转到py文件的转换,然后只把py文件提交到github上面。

生成jupyter notebook配置文件

1
jupyter notebook --generate-config

运行后会生成 ~/.jupyter/ipython_notebook_config.py 文件

编辑配置文件

添如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
### If you want to auto-save .html and .py versions of your notebook:
# modified from: https://github.com/ipython/ipython/issues/8009
# Solution2: https://jupyter-notebook.readthedocs.io/en/stable/extending/savehooks.html
import os
from subprocess import check_call
import re

def clear_prompt(dir_path, nb_fname, log_func):
"""remove the number in '# In[ ]:'"""
name, ext = os.path.splitext(nb_fname)
pattern = re.compile(r'^# In\[\d+\]:')

for n_ext in ['.py', '.txt']:
script_name = os.path.join(dir_path, name+n_ext)
if os.path.exists(script_name):
new_lines = []
with open(script_name, 'rt', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
new_line = re.sub(pattern, '# In[ ]:', line)
new_lines.append(new_line)
with open(script_name, 'wt', encoding='utf-8') as f:
f.writelines(new_lines)
log_func('Remove number in "# In[ ]:"! File Name: %s' % script_name)
break

def post_save(model, os_path, contents_manager):
"""post-save hook for converting notebooks to .py scripts"""
if model['type'] != 'notebook':
return # only do this for notebooks
d, fname = os.path.split(os_path)
check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d) # '--no-prompt',
log = contents_manager.log
# log.info('Filename:%s'%fname)
clear_prompt(d, fname, log.info)
# check_call(['ipython', 'nbconvert', '--to', 'html', fname], cwd=d)

c.FileContentsManager.post_save_hook = post_save

重启jupyter notebook,配置生效。
当保存ipynb文件时,会自动生成py文件。

配置github的.gitignore文件

1
*.ipynb

设置以后,可能会发现规则没有生效。在项目根目录,执行如下命令:

1
git rm -r --cached .

安装PyUserInput前,需要安装如下依赖:

Linux - Xlib
Mac - Quartz, AppKit
Windows - pywin32, pyHook

1
pip install pywin32

https://www.lfd.uci.edu/~gohlke/pythonlibs/

安装pyHook,找到python对应的版本,比如:pyHook‑1.5.1‑cp37‑cp37m‑win_amd64.whl

下载到本地,安装

1
pip install pyHook‑1.5.1‑cp37‑cp37m‑win_amd64.whl

安装PyUserInput

1
pip install PyUserInput
1
2
3
4
5
from pymouse import PyMouse
from pykeyboard import PyKeyboard

m = PyMouse()
k = PyKeyboard()

调用api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
x_dim, y_dim = m.screen_size()
m.click(x_dim/2, y_dim/2, 1)
k.type_string('Hello, World!')


# pressing a key
k.press_key('H')
# which you then follow with a release of the key
k.release_key('H')
# or you can 'tap' a key which does both
k.tap_key('e')
# note that that tap_key does support a way of repeating keystrokes with a interval time between each
k.tap_key('l',n=2,interval=5)
# and you can send a string if needed too
k.type_string('o World!')


#Create an Alt+Tab combo
k.press_key(k.alt_key)
k.tap_key(k.tab_key)
k.release_key(k.alt_key)

k.tap_key(k.function_keys[5]) # Tap F5
k.tap_key(k.numpad_keys['Home']) # Tap 'Home' on the numpad
k.tap_key(k.numpad_keys[5], n=3) # Tap 5 on the numpad, thrice


# Mac example
k.press_keys(['Command','shift','3'])
# Windows example
k.press_keys([k.windows_l_key,'d'])


# Windows
k.tap_key(k.alt_key)
# Mac
k.tap_key('Alternate')

eg.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from pymouse import PyMouseEvent

def fibo():
a = 0
yield a
b = 1
yield b
while True:
a, b = b, a+b
yield b

class Clickonacci(PyMouseEvent):
def __init__(self):
PyMouseEvent.__init__(self)
self.fibo = fibo()

def click(self, x, y, button, press):
'''Print Fibonacci numbers when the left click is pressed.'''
if button == 1:
if press:
print(self.fibo.next())
else: # Exit if any other mouse button used
self.stop()

C = Clickonacci()
C.run()