Commit 400e0857 authored by wenwen.tang's avatar wenwen.tang 😕

意义 FOF模式 投顾robo模式

fund_av	基金原始净值	sum(个股原始净值*对应份额)
fund_div	持有基金配息	sum(个股每股配息*对应份额)
fund_nav	基金复权净值	暂时不做此操作	不配息则配股
cash	现金(产品的现金账户)	"1.主动预留现金,用来配息
2.持有基金配息"	无现金预留
real_av	产品净值	fund_av + cash	fund_av
port_div	产品配息金额(产品主动配息)	使用预留现金进行配息	赎回特定基金进行配息
acc_div	产品累计配息(给到客户配息)	acc(port_div)	acc(port_div + fund_div)
acc_av	产品累计净值	real_av + acc_div	real_av + acc_div
nav	产品复权净值(配息再投资)	一般复权方法:real_av、port_div	将配息率设置为0
parent c1900177
......@@ -17,19 +17,20 @@ class DefaultNavs(Navs):
navs = rfn.get_navs(fund_id=fund_ids, min_date=min_date, max_date=max_date)
if navs and 'exrate' in self._config:
navs = pd.DataFrame(navs)
navs = navs.pivot_table(index='nav_date', columns='fund_id', values='nav_cal')
for exrate_config in self._config['exrate']:
exrate = pd.DataFrame(re.get_exrates(ticker=exrate_config['ticker'], min_date=navs.index.min(),
max_date=navs.index.max()))
exrate = exrate[['date', 'close']]
exrate.set_index('date', inplace=True)
for fund in self._datum.get_datums(type=DatumType.FUND, crncy=exrate_config['from']):
if fund['id'] in navs.columns:
navs[fund['id']] = round(navs[fund['id']] * exrate['close'], 4)
navs = navs.reset_index().melt(id_vars='nav_date', value_name='nav_cal')
navs.dropna(inplace=True)
navs = navs[['fund_id', 'nav_date', 'nav_cal']]
navs.sort_values(by=['fund_id', 'nav_date'], inplace=True)
exrate = pd.DataFrame(re.get_exrates(ticker=exrate_config['ticker'], min_date=min_date,
max_date=max_date))
exrate.rename(columns={'date': 'nav_date'}, inplace=True)
exrate = exrate[['nav_date', 'close']]
fund_ids = [x['id'] for x in self._datum.get_datums(type=DatumType.FUND, crncy=exrate_config['from'])]
merged = pd.merge(navs, exrate, on='nav_date', how='left')
merged.loc[merged['fund_id'].isin(fund_ids), 'nav_cal'] *= merged['close']
merged.loc[merged['fund_id'].isin(fund_ids), 'av'] *= merged['close']
merged.loc[merged['fund_id'].isin(fund_ids), 'dividend'] *= merged['close']
merged['nav_cal'] = merged['nav_cal'].round(4) # 四舍五入保留四位小数
merged['av'] = merged['av'].round(4) # 四舍五入保留四位小数
merged['dividend'] = merged['dividend'].round(4) # 四舍五入保留四位小数
navs = merged.drop('close', axis=1)
navs = navs.to_dict('records')
return navs
......@@ -84,4 +85,3 @@ class DefaultNavs(Navs):
return red.get_last_one(eco_id=datum_id, max_date=max_date, by_release_date=by_release_date)
else:
return red.get_last(eco_id=datum_id, max_date=max_date, count=count, by_release_date=by_release_date)
......@@ -54,7 +54,7 @@ class JDCDataSync(DataSync, ABC):
while True:
url = self.build_urls(datum=datum, page=page, start_date=start_date)
if url is None:
break
raise Exception(f'''request data {datum['id']} not exist!''')
response = requests.get(url).json()
if not response['success']:
raise Exception(f'''request indictor failed: {response['status']}''')
......
......@@ -235,8 +235,8 @@ robo-executor: # 执行器相关
use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest
sync-data: ${SYNC_DATA:off} # 是否开启同步资料数据
backtest: # 回测执行器相关
start-date: 2012-10-16 # 回测起始日期
end-date: 2023-03-01 # 回测截止日期
start-date: 2022-10-25 # 回测起始日期
end-date: 2023-06-01 # 回测截止日期
sealing-period: 10 #调仓封闭期
start-step: ${BACKTEST_START_STEP:1} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
......
......@@ -51,7 +51,7 @@ py-jftech:
max-workers: ${MAX_PROCESS:4}
basic: # 基础信息模块
sync:
start-date: 2020-01-01 # 同步数据开始日期
start-date: 1990-01-01 # 同步数据开始日期
datum: # 资料模块
change:
date: ${DATUM_CHANGE_DATE}
......@@ -62,10 +62,10 @@ basic: # 基础信息模块
real:
- 'FGFSACU LX Equity'
- 'TEMUSGI LX Equity'
# navs: # 净值模块
# exrate: # 汇率,如果不开启,整个这块注释掉
# - from: EUR # 需要转换的货币类型
# ticker: EURUSD BGN Curncy # 汇率值的彭博ticker
navs: # 净值模块
exrate: # 汇率,如果不开启,整个这块注释掉
- from: EUR # 需要转换的货币类型
ticker: EURUSD BGN Curncy # 汇率值的彭博ticker
asset-pool: # 资产池模块
asset-optimize: # 资产优选模块
sortino-weight: # sortino计算需要的权重,下面每一条为一次计算,e.g. months: 3, weight: 0.5 表示 3个月数据使用权重0.5来计算分值
......@@ -87,7 +87,7 @@ portfolios: # 投组模块
warehouse-frequency: 1 #每隔1个月调一次仓
redeem-list: [ 'TEUSAAU LX Equity', 'LIGTRAA ID Equity', 'TEMFHAC LX Equity', 'LUSHUAA ID Equity' ] #从持仓中的低风险资产“直接”按序赎回
solver: # 解算器相关
model: prr # 结算模型 ARC ,PRR, ~ 标准解算器
model: arc # 结算模型 ARC ,PRR, ~ 标准解算器
arc: on #是否开启ARC
brr: 0.01 #误差补偿值
trr: 3
......@@ -232,12 +232,12 @@ reports: # 报告模块相关
content: "Dear All: 附件是今天生成的监测数据,請驗收,謝謝! 注>:該郵件為自動發送,如有問題請聯繫矽谷團隊 telan_qian@chifufund.com"
robo-executor: # 执行器相关
use: ${ROBO_EXECUTOR:backtest} # 执行哪个执行器,优先取系统环境变量ROBO_EXECUTOR的值,默认backtest
sync-data: ${SYNC_DATA:on} # 是否开启同步资料数据
sync-data: ${SYNC_DATA:off} # 是否开启同步资料数据
backtest: # 回测执行器相关
start-date: 2022-02-16 # 回测起始日期
end-date: 2023-01-03 # 回测截止日期
sealing-period: 10 #调仓封闭期
start-step: ${BACKTEST_START_STEP:2} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
start-step: ${BACKTEST_START_STEP:3} # 回测从哪一步开始执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up: on
real: # 实盘执行器
......
......@@ -6,13 +6,14 @@ __COLUMNS__ = {
'rhp_id': 'id',
'rhp_date': 'date',
'rhp_risk': 'risk',
'rhp_div': 'dividend',
'rhp_div_acc': 'div_acc',
'rhp_rrs_id': 'signal_id',
'rhp_rebalance': 'rebalance',
'rhp_portfolios': 'portfolios',
'rhp_nav': 'nav',
'rhp_cash': 'cash',
'rhp_fund_av': 'fund_av',
'rhp_fund_nav': 'fund_nav',
'rhp_fund_div': 'fund_div',
'rhp_div_forecast': 'div_forecast',
'rhp_asset_nav': 'asset_nav',
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment