Skip to content

Commit 975db58

Browse files
authored
Merge pull request #703 from ricequant/dev
2 parents d4e2fde + 2a01810 commit 975db58

File tree

2 files changed

+62
-16
lines changed

2 files changed

+62
-16
lines changed

rqalpha/apis/api_rqdatac.py

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,24 +1097,70 @@ def get_pit_financials_ex(order_book_ids, fields, count, statements='latest'):
10971097
if isinstance(order_book_ids, str):
10981098
order_book_ids = [order_book_ids]
10991099
env = Environment.get_instance()
1100-
dt = env.calendar_dt.date()
1101-
year = dt.year
1102-
mon = dt.month
1103-
q = (mon - 4) // 3 + 1
1104-
y = year
1105-
if q <= 0:
1106-
y -= 1
1107-
q = 4
1108-
end_quarter = str(y) + 'q' + str(q)
11091100

1110-
q_num = y * 4 + q - count
1111-
start_y = q_num // 4
1112-
start_q = q_num % 4 + 1
1101+
if count < 0:
1102+
user_log.warn("function get_pit_financials_ex : count must >= 0")
1103+
return None
1104+
1105+
# 退市和未退市池
1106+
de_listed_list, active_list = [], []
1107+
1108+
# 遍历每个标的划分池子
1109+
for order_book_id in order_book_ids:
1110+
instrument = env.get_instrument(order_book_id)
1111+
if env.calendar_dt > instrument.de_listed_date:
1112+
de_listed_list.append(instrument)
1113+
else:
1114+
active_list.append(order_book_id)
1115+
1116+
# 需要的数量,传入的 0 代表 1个
1117+
count += 1
1118+
1119+
def _get_data(symbol_list, start_dt):
1120+
dt = start_dt.date()
1121+
year = dt.year
1122+
mon = dt.month
1123+
q = (mon - 4) // 3 + 1
1124+
y = year
1125+
if q <= 0:
1126+
y -= 1
1127+
q = 4
1128+
end_quarter = str(y) + 'q' + str(q)
1129+
1130+
# 多获取4个季度的财报,以防因为财报未发布导致数量不够
1131+
q_num = y * 4 + q - count - 4
1132+
1133+
start_y = q_num // 4
1134+
start_q = q_num % 4 + 1
1135+
start_quarter = "{}q{}".format(start_y, start_q)
1136+
1137+
if start_quarter > end_quarter:
1138+
start_quarter = end_quarter
1139+
1140+
result = rqdatac.get_pit_financials_ex(
1141+
fields=fields, start_quarter=start_quarter, end_quarter=end_quarter, order_book_ids=symbol_list,
1142+
statements=statements, market='cn', date=env.calendar_dt.date()
1143+
)
1144+
1145+
return result
1146+
1147+
# 保存结果
1148+
result_list = []
1149+
1150+
# 获取未退市标的的数据
1151+
result = _get_data(active_list, env.calendar_dt)
1152+
1153+
if isinstance(result, pd.DataFrame):
1154+
result_list = [group_df.iloc[-count:] for _, group_df in result.groupby("order_book_id")]
1155+
1156+
# 获取退市的数据
1157+
for instrument in de_listed_list:
1158+
result = _get_data([instrument.order_book_id], instrument.de_listed_date)
1159+
if isinstance(result, pd.DataFrame):
1160+
result_list.append(result.iloc[-count:])
11131161

1114-
start_quarter = "{}q{}".format(start_y, start_q)
1162+
result = pd.concat(result_list) if len(result_list) > 0 else None
11151163

1116-
result = rqdatac.get_pit_financials_ex(fields=fields, start_quarter=start_quarter, end_quarter=end_quarter,
1117-
order_book_ids=order_book_ids, statements=statements, market='cn', date=dt)
11181164
return result
11191165

11201166

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
[metadata]
77
name = rqalpha
8-
version = 4.9.1
8+
version = 4.9.2
99

1010
[versioneer]
1111
VCS = git

0 commit comments

Comments
 (0)