Skip to content

Commit

Permalink
修改bug
Browse files Browse the repository at this point in the history
  • Loading branch information
hugo2046 committed Sep 28, 2022
1 parent a657e50 commit 70fab3c
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 95 deletions.
81 changes: 50 additions & 31 deletions B-因子构建类/金股增强策略/scr/utlis.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,26 @@ def load_gold_stock_csv() -> pd.DataFrame:
-------
pd.DataFrame
"""
dtype_mapping = {'end_date': np.datetime64,
'write_date': np.datetime64}
dtype_mapping = {'end_date': np.datetime64, 'write_date': np.datetime64}

col_mapping = {'ticker_symbol_map_sec_type_name': 'sw_l3',
'ticker_symbol_map_sec_id': 'code'}
col_mapping = {
'ticker_symbol_map_sec_type_name': 'sw_l3',
'ticker_symbol_map_sec_id': 'code'
}

gold_stock_frame = pd.read_csv(r'data/gold_stock_frame.csv', index_col=[0])

gold_stock_frame = (gold_stock_frame.pipe(pd.DataFrame.astype, dtype_mapping)
.pipe(pd.DataFrame.rename, columns=col_mapping)
.pipe(pd.DataFrame.assign, code=lambda x: x['code'].apply(normalize_code)))
gold_stock_frame = (gold_stock_frame.pipe(
pd.DataFrame.astype,
dtype_mapping).pipe(pd.DataFrame.rename, columns=col_mapping).pipe(
pd.DataFrame.assign,
code=lambda x: x['code'].apply(normalize_code)))

return gold_stock_frame


def view_author_stock(ser: pd.Series, gold_stock_frame: pd.DataFrame) -> pd.DataFrame:
def view_author_stock(ser: pd.Series,
gold_stock_frame: pd.DataFrame) -> pd.DataFrame:
"""从gold_stock_frame按ser获取所推荐股票信息
Parameters
Expand All @@ -50,7 +54,6 @@ def view_author_stock(ser: pd.Series, gold_stock_frame: pd.DataFrame) -> pd.Data

class TradeDays():
"""交易日时间处理相关"""

def __init__(self):

self.all_trade_days: pd.DatetimeIndex = pd.to_datetime(
Expand All @@ -60,37 +63,42 @@ def __init__(self):
def tradeday_of_month(self, watch_dt: str) -> int:
"""查询该交易日是当月的第N日"""
watch_dt = pd.to_datetime(watch_dt)
idx = self.TradedaysOfMonth.index.get_indexer(
[watch_dt], method='nearest')[0]
idx = self.TradedaysOfMonth.index.get_indexer([watch_dt],
method='nearest')[0]
return self.TradedaysOfMonth.iloc[idx, 1]

def get_tradedays_of_month(self, year: Union[str, int] = None, month: Union[str, int] = None, num: int = None) -> pd.DataFrame:
def get_tradedays_of_month(self,
year: Union[str, int] = None,
month: Union[str, int] = None,
num: int = None) -> pd.DataFrame:
"""获取月份的第N日"""
if num is None:
raise ValueError('num参数不能为空!')

if (year is not None) and (month is None):

cond = (self.TradedaysOfMonth.index.year == year) & (
self.TradedaysOfMonth['dayofmonth'] == num)
cond = (self.TradedaysOfMonth.index.year
== year) & (self.TradedaysOfMonth['dayofmonth'] == num)

elif (year is None) and (month is not None):

cond = (self.TradedaysOfMonth.index.month == month) & (
self.TradedaysOfMonth['dayofmonth'] == num)
cond = (self.TradedaysOfMonth.index.month
== month) & (self.TradedaysOfMonth['dayofmonth'] == num)

else:

cond = (self.TradedaysOfMonth.index.strftime('%Y%m') == f'{year}{month}') & (
self.TradedaysOfMonth['dayofmonth'] == num)
cond = (self.TradedaysOfMonth.index.strftime('%Y%m')
== "{}{:02d}".format(year, month)) & (
self.TradedaysOfMonth['dayofmonth'] == num)

return self.TradedaysOfMonth[cond]

def get_tradedays_month_end(self, year: Union[str, int] = None, month: Union[str, int] = None) -> pd.DataFrame:
def get_tradedays_month_end(self,
year: Union[str, int] = None,
month: Union[str, int] = None) -> pd.DataFrame:
"""查询每月最后一个交易日"""

trade_days = self._MonthEndOrMonthBegin('last')

if (year is None) and (month is None):

return trade_days
Expand All @@ -105,11 +113,15 @@ def get_tradedays_month_end(self, year: Union[str, int] = None, month: Union[str

else:

cond = (trade_days.index.strftime('%Y%m') == f'{year}{month}')
cond = (trade_days.index.strftime('%Y%m') == "{}{:02d}".format(
year, month))

return trade_days[cond]

def get_tradedays_month_begin(self, year: Union[str, int] = None, month: Union[str, int] = None) -> pd.DataFrame:
def get_tradedays_month_begin(
self,
year: Union[str, int] = None,
month: Union[str, int] = None) -> pd.DataFrame:
"""查询每月最后一个交易日"""
trade_days = self._MonthEndOrMonthBegin('first')
if year is None and month is None:
Expand All @@ -119,31 +131,38 @@ def get_tradedays_month_begin(self, year: Union[str, int] = None, month: Union[s
elif year is None:
cond = trade_days.index.month == month
else:
cond = trade_days.index.strftime('%Y%m') == f'{year}{month}'
cond = trade_days.index.strftime('%Y%m') == "{}{:02d}".format(
year, month)
return trade_days[cond]

def _MonthEndOrMonthBegin(self, method: str) -> pd.DataFrame:

cols_dic = {'last': ('MonthEnd(all)', 'MonthEnd'),
'first': ('MonthBegin(all)', 'MonthBegin')}
cols_dic = {
'last': ('MonthEnd(all)', 'MonthEnd'),
'first': ('MonthBegin(all)', 'MonthBegin')
}
trade_days = self.TradedaysOfMonth.copy()

func = {'last': trade_days.groupby(pd.Grouper(level=0, freq='M')).last,
'first': trade_days.groupby(pd.Grouper(level=0, freq='MS')).first}
func = {
'last': trade_days.groupby(pd.Grouper(level=0, freq='M')).last,
'first': trade_days.groupby(pd.Grouper(level=0, freq='MS')).first
}

trade_days = func[method]()

trade_days[cols_dic[method][0]] = trade_days.index
trade_days.index = trade_days['trade_days']
trade_days.rename(
columns={'trade_days': cols_dic[method][1]}, inplace=True)
trade_days.rename(columns={'trade_days': cols_dic[method][1]},
inplace=True)
return trade_days.drop(columns=['dayofmonth'])

def _tradedaysofmonth(self):

tradedays_frame: pd.DataFrame = self._trans2frame()
tradedays_frame['dayofmonth'] = tradedays_frame.groupby(pd.Grouper(
level=0, freq='M'))['trade_days'].transform(lambda x: np.arange(1, len(x)+1))
tradedays_frame['dayofmonth'] = tradedays_frame.groupby(
pd.Grouper(level=0, freq='M'))['trade_days'].transform(
lambda x: np.arange(1,
len(x) + 1))
self.TradedaysOfMonth = tradedays_frame

def _trans2frame(self) -> pd.DataFrame:
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Large diffs are not rendered by default.

0 comments on commit 70fab3c

Please sign in to comment.