Skip to content

Commit 26c0f56

Browse files
committed
QA script
1 parent 5efad1d commit 26c0f56

File tree

8 files changed

+1116
-0
lines changed

8 files changed

+1116
-0
lines changed

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
11
# QA script
2+
3+
Thanks @yutiansut's hard work
4+
5+
6+
Custom scripts for QUANTAXIS
7+
8+
9+
custom_update: read update type and freq from update_list.txt
10+
11+
QA_SU_save_list: for list update
12+
QA_SU_save_short_freq: for minute freq update
13+
QA_SU_save_long_freq: for day/week/month update
14+
15+
QA_data_fetch_adv for local data fetch, include stock/future/index/etf, day and min
16+
support dynamic minute freq resample from 1min data
17+
18+
19+
TODO:
20+
option update
21+
local option fetch
22+
make sure everything is updated in update script

adv.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
from QUANTAXIS.QAData import (
2+
QA_DataStruct_Index_day,
3+
QA_DataStruct_Index_min,
4+
QA_DataStruct_Future_day,
5+
QA_DataStruct_Future_min,
6+
QA_DataStruct_Stock_block,
7+
QA_DataStruct_Financial,
8+
QA_DataStruct_Stock_day,
9+
QA_DataStruct_Stock_min,
10+
QA_DataStruct_Stock_transaction
11+
)
12+
13+
DataStruct_d = {
14+
'stock_day': QA_DataStruct_Stock_day,
15+
'stock_min': QA_DataStruct_Stock_min,
16+
'index_day': QA_DataStruct_Index_day,
17+
'index_min': QA_DataStruct_Index_min,
18+
'future_day': QA_DataStruct_Future_day,
19+
'future_min': QA_DataStruct_Future_min
20+
}
21+
22+
23+
def QA_data_fetch_adv(
24+
code='',
25+
start='all',
26+
end=None,
27+
data_type='stock_day',
28+
frequence='',
29+
if_drop_index=True
30+
):
31+
"""'fetch data from database'
32+
:param code: code list of stock, index, future, etf
33+
:param start: date of start, can be str/int of 2019, 201901, '2019-01', '2019-01-01'
34+
:param end: date of end, can be str/int of 2019, 201901, '2019-01', '2019-01-01'
35+
:param data_type: stock_day, stock_min etc
36+
:param frequence: minute freq of min data, can be standard min value of 15, 30min, or uncommon like 9, 17min
37+
Returns:
38+
[type] -- [description]
39+
40+
感谢@几何大佬的提示
41+
https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/#return-the-specified-fields-and-the-id-field-only
42+
"""
43+
44+
data_type = data_type.lower()
45+
46+
if data_type in ['stock_list', 'index_list', 'future_list', 'etf_list']:
47+
return QA_list_fetch(data_type)
48+
49+
# resample to given frequence
50+
resample = False
51+
if frequence:
52+
if str(frequence).split('m')[0] in ['1', '5', '15', '30', '60']:
53+
frequence = str(frequence).split('m')[0] + 'min'
54+
else:
55+
resample = str(frequence).split('m')[0] + 'min'
56+
frequence = '1min'
57+
58+
res = QA_data_fetch(
59+
code=code,
60+
start=start,
61+
end=end,
62+
data_type=data_type,
63+
frequence=frequence,
64+
format='pd'
65+
)
66+
if res is None:
67+
# 🛠 todo 报告是代码不合法,还是日期不合法
68+
print(
69+
"QA Error QA_data_fetch_adv parameter code=%s , start=%s, end=%s call QA_data_fetch return None"
70+
% (code,
71+
start,
72+
end)
73+
)
74+
return None
75+
else:
76+
res_reset_index = res.set_index(
77+
['datetime',
78+
'code'],
79+
drop=if_drop_index
80+
)
81+
if resample:
82+
ds = DataStruct_d[data_type](res_reset_index)
83+
ds = ds.resample(resample)
84+
return DataStruct_d[data_type](ds.assign(type=resample))
85+
86+
return DataStruct_d[data_type](res_reset_index)

docker-compose_dev.yaml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
@@ -1,45 +0,0 @@
2+
version: '2'
3+
services:
4+
qa:
5+
image: barretthugh/qa-jupyter
6+
ports:
7+
- "8888:8888"
8+
environment:
9+
- MONGODB=mgdb
10+
volumes:
11+
- qacode:/home
12+
- .:/QUANTAXIS
13+
restart: always
14+
15+
qacron:
16+
image: barretthugh/qa-cron
17+
environment:
18+
- MONGODB=mgdb
19+
restart: always
20+
21+
qaweb:
22+
image: barretthugh/qa-web
23+
ports:
24+
- "8010:8010"
25+
environment:
26+
- MONGODB=mgdb
27+
restart: always
28+
29+
mgdb:
30+
image: mongo:4.1.3
31+
ports:
32+
- "27017:27017"
33+
environment:
34+
- TZ=Asia/Shanghai
35+
- MONGO_INITDB_DATABASE=quantaxis
36+
volumes:
37+
- qamg:/data/db
38+
restart: always
39+
40+
volumes:
41+
qamg:
42+
external:
43+
name: qamg
44+
qacode:
45+
external:
46+
name: qacode

main.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from QUANTAXIS.QAFetch.QAQuery import QA_fetch_stock_list
2+
#from QUANTAXIS.QASU import crawl_eastmoney as crawl_eastmoney_file
3+
from QUANTAXIS.QASU import save_tdx as stdx
4+
from QUANTAXIS.QASU import save_tdx_file as tdx_file
5+
from QUANTAXIS.QASU import save_tushare as sts
6+
from QUANTAXIS.QASU import save_financialfiles
7+
from QUANTAXIS.QAUtil import DATABASE
8+
9+
def QA_SU_save_list(engine, type_='', client=DATABASE):
10+
"""save data list like stock, index, etf, future
11+
12+
Arguments:
13+
engine {[type]} -- [description]
14+
15+
Keyword Arguments:
16+
client {[type]} -- [description] (default: {DATABASE})
17+
"""
18+
19+
engine = select_save_engine(engine)
20+
engine.QA_SU_save_list(type_=type_, client=client)
21+
22+
23+
def QA_SU_save_short_freq(engine, type_='', min_list=[], client=DATABASE):
24+
"""save short freq of data: given list of minute freq
25+
26+
Arguments:
27+
engine {[type]} -- [description]
28+
29+
Keyword Arguments:
30+
client {[type]} -- [description] (default: {DATABASE})
31+
"""
32+
33+
engine = select_save_engine(engine)
34+
engine.QA_SU_save_short_freq(type_=type_, min_list=min_list, client=client)
35+
36+
37+
def QA_SU_save_long_freq(engine, type_='', client=DATABASE):
38+
"""save long freq of data: like day, week etc
39+
40+
Arguments:
41+
engine {[type]} -- [description]
42+
43+
Keyword Arguments:
44+
client {[type]} -- [description] (default: {DATABASE})
45+
"""
46+
47+
engine = select_save_engine(engine)
48+
engine.QA_SU_save_long_freq(type_=type_, client=client)

0 commit comments

Comments
 (0)