Update: exclude_list新增业绩衰退recession参数
This commit is contained in:
parent
12f7c91e30
commit
f103ac9d1e
|
@ -9,7 +9,8 @@ if __name__ == '__main__':
|
||||||
data_dir = '/home/lenovo/quant/tools/detail_testing/basic_data'
|
data_dir = '/home/lenovo/quant/tools/detail_testing/basic_data'
|
||||||
save_dir = '/home/lenovo/quant/data/backtest/basic_data'
|
save_dir = '/home/lenovo/quant/data/backtest/basic_data'
|
||||||
|
|
||||||
for i,f in enumerate(['open_post','close_post','down_limit','up_limit','size','amount_20','opening_info','ipo_days','margin_list','abnormal']):
|
for i,f in enumerate(['open_post','close_post','down_limit','up_limit','size','amount_20','opening_info','ipo_days','margin_list',
|
||||||
|
'abnormal', 'recession']):
|
||||||
if f in ['margin_list']:
|
if f in ['margin_list']:
|
||||||
tmp = gft.get_stock_factor(f, start='2012-01-01').fillna(0)
|
tmp = gft.get_stock_factor(f, start='2012-01-01').fillna(0)
|
||||||
else:
|
else:
|
||||||
|
@ -32,7 +33,7 @@ if __name__ == '__main__':
|
||||||
# 更新下一日的数据用于筛选
|
# 更新下一日的数据用于筛选
|
||||||
next_date = gft.days_after(df.index.max(), 1)
|
next_date = gft.days_after(df.index.max(), 1)
|
||||||
next_list = []
|
next_list = []
|
||||||
for i,f in enumerate(['amount_20','opening_info','ipo_days','margin_list','abnormal']):
|
for i,f in enumerate(['amount_20','opening_info','ipo_days','margin_list','abnormal','recession']):
|
||||||
if f in ['margin_list']:
|
if f in ['margin_list']:
|
||||||
next_list.append(pd.Series(gft.get_stock_factor(f, start='2012-01-01').fillna(0).iloc[-1], name=f))
|
next_list.append(pd.Series(gft.get_stock_factor(f, start='2012-01-01').fillna(0).iloc[-1], name=f))
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -20,7 +20,6 @@ class DataLoader():
|
||||||
- column(str): 查询列
|
- column(str): 查询列
|
||||||
"""
|
"""
|
||||||
res = pd.Series(index=target)
|
res = pd.Series(index=target)
|
||||||
column_map = dict(zip(self.data.index.values, self.data[column].values))
|
|
||||||
column_type = self.data[column].dtype
|
column_type = self.data[column].dtype
|
||||||
stock_list = list(set(self.data.index.values) & set(target))
|
stock_list = list(set(self.data.index.values) & set(target))
|
||||||
res.loc[stock_list] = self.data.loc[stock_list, column].values
|
res.loc[stock_list] = self.data.loc[stock_list, column].values
|
||||||
|
|
14
trader.py
14
trader.py
|
@ -35,7 +35,8 @@ class Trader(Account):
|
||||||
tax (dict): 印花税
|
tax (dict): 印花税
|
||||||
exclude_list (list): 额外的剔除列表,会优先满足该剔除列表中的条件,之后再进行正常的调仓
|
exclude_list (list): 额外的剔除列表,会优先满足该剔除列表中的条件,之后再进行正常的调仓
|
||||||
- abnormal: 异常公告剔除,包含中止上市、立案调查、警示函等异常情况的剔除
|
- abnormal: 异常公告剔除,包含中止上市、立案调查、警示函等异常情况的剔除
|
||||||
- report: 财报同比下降50%以上剔除
|
- receesion: 财报同比或环比下降50%以上
|
||||||
|
- qualified_opinion: 会计保留意见
|
||||||
account (Account): 账户设置,account.Account
|
account (Account): 账户设置,account.Account
|
||||||
"""
|
"""
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
|
@ -147,6 +148,12 @@ class Trader(Account):
|
||||||
# exclude
|
# exclude
|
||||||
if isinstance(exclude_list, list):
|
if isinstance(exclude_list, list):
|
||||||
self.exclude_list = exclude_list
|
self.exclude_list = exclude_list
|
||||||
|
optional_list = ['abnormal', 'recession']
|
||||||
|
for item in exclude_list:
|
||||||
|
if item in optional_list:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unexpected keyword argument '{item}'")
|
||||||
else:
|
else:
|
||||||
raise ValueError('exclude_list should be list.')
|
raise ValueError('exclude_list should be list.')
|
||||||
# data_root
|
# data_root
|
||||||
|
@ -163,7 +170,7 @@ class Trader(Account):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
if s not in data_root:
|
if s not in data_root:
|
||||||
raise ValueError(f'data for signal {s} is not provided')
|
raise ValueError(f"data for signal {s} is not provided")
|
||||||
self.data_root = data_root
|
self.data_root = data_root
|
||||||
|
|
||||||
def load_data(self,
|
def load_data(self,
|
||||||
|
@ -253,6 +260,9 @@ class Trader(Account):
|
||||||
if exclude == 'abnormal':
|
if exclude == 'abnormal':
|
||||||
stock_abnormal = self.today_data['basic'].get(factor.index.values, 'abnormal').sort_index()
|
stock_abnormal = self.today_data['basic'].get(factor.index.values, 'abnormal').sort_index()
|
||||||
exclude_stock += stock_abnormal.loc[stock_abnormal > 0].index.to_list()
|
exclude_stock += stock_abnormal.loc[stock_abnormal > 0].index.to_list()
|
||||||
|
if exclude == 'recession':
|
||||||
|
stock_recession = self.today_data['basic'].get(factor.index.values, 'recession').sort_index()
|
||||||
|
exclude_stock += stock_recession.loc[stock_recession > 0].index.to_list()
|
||||||
exclude_stock = list(set(exclude_stock))
|
exclude_stock = list(set(exclude_stock))
|
||||||
force_exclude = copy.deepcopy(exclude_stock)
|
force_exclude = copy.deepcopy(exclude_stock)
|
||||||
exclude_stock += stock_ipo_filter.loc[stock_ipo_filter != 1].index.to_list()
|
exclude_stock += stock_ipo_filter.loc[stock_ipo_filter != 1].index.to_list()
|
||||||
|
|
Loading…
Reference in New Issue