Commit 189f858c authored by 吕先亚's avatar 吕先亚

update

parent a5173007
...@@ -215,6 +215,7 @@ reports: # 报告模块相关 ...@@ -215,6 +215,7 @@ reports: # 报告模块相关
include-report: include-report:
# - daily-hold-report # - daily-hold-report
- daily-signal-report - daily-signal-report
- daily-mpt-report
email: email:
receives: receives:
- brody_wu@chifufund.com - brody_wu@chifufund.com
......
...@@ -11,7 +11,7 @@ from py_jftech import ( ...@@ -11,7 +11,7 @@ from py_jftech import (
) )
from api import PortfoliosHolder, PortfoliosRisk, Navs, RoboExecutor, PortfoliosType, PortfoliosBuilder, RoboReportor, \ from api import PortfoliosHolder, PortfoliosRisk, Navs, RoboExecutor, PortfoliosType, PortfoliosBuilder, RoboReportor, \
DatumType, Datum, RebalanceSignal DatumType, Datum, RebalanceSignal, SignalType
from portfolios.dao import robo_hold_portfolios as rhp from portfolios.dao import robo_hold_portfolios as rhp
from portfolios.utils import format_weight from portfolios.utils import format_weight
...@@ -282,7 +282,8 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder): ...@@ -282,7 +282,8 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
nav_cals = fund_div_tuple[2] nav_cals = fund_div_tuple[2]
share_nav = share share_nav = share
# 不考虑配息 # 不考虑配息
share_nodiv_nav = {x: (1 - funds_subscription_rate[x]) * (fund_av * w) / nav_cals[x] for x, w in weight.items()} share_nodiv_nav = {x: (1 - funds_subscription_rate[x]) * (fund_av * w) / nav_cals[x] for x, w in
weight.items()}
# 初始买入扣手续费 # 初始买入扣手续费
fee = sum(funds_subscription_rate[x] * (fund_av * w) for x, w in weight.items()) fee = sum(funds_subscription_rate[x] * (fund_av * w) for x, w in weight.items())
fund_av = fund_av - fee fund_av = fund_av - fee
...@@ -445,3 +446,38 @@ class DailyHoldReportor(RoboReportor): ...@@ -445,3 +446,38 @@ class DailyHoldReportor(RoboReportor):
['lipper_id', 'asset_ids', 'name', 'weight', 'risk', 'date', 'rebalance_type', 'rebalance_date']] ['lipper_id', 'asset_ids', 'name', 'weight', 'risk', 'date', 'rebalance_type', 'rebalance_date']]
return holds.to_dict('records') return holds.to_dict('records')
return [] return []
@component(bean_name='daily-mpt-report')
class DailyMptReportor(RoboReportor):
@autowired
def __init__(self, hold: PortfoliosHolder = None, datum: Datum = None):
self._hold = hold
self._datum = datum
@property
def report_name(self) -> str:
return '每日mpt'
def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]:
from portfolios.dao import robo_mpt_portfolios as rmp
signals = pd.DataFrame([rmp.get_last_one(type=PortfoliosType.NORMAL,risk=PortfoliosRisk.FT3)])
if not signals.empty:
datum_ids = reduce(lambda x, y: x | y, signals['portfolio'].apply(lambda x: set(json.loads(x).keys())))
datums = pd.DataFrame(self._datum.get_datums(type=DatumType.FUND, datum_ids=datum_ids))
datums.set_index('id', inplace=True)
signals['risk'] = signals.apply(lambda row: PortfoliosRisk(row['risk']).name, axis=1)
signals['portfolio'] = signals.apply(lambda row: [x for x in json.loads(row['portfolio']).items()], axis=1)
signals = signals.explode('portfolio', ignore_index=True)
signals['weight'] = signals.apply(lambda row: format(row['portfolio'][1], '.0%'), axis=1)
signals['asset_ids'] = signals.apply(lambda row: datums.loc[int(row['portfolio'][0])]['ftTicker'], axis=1)
signals['name'] = signals.apply(lambda row: datums.loc[int(row['portfolio'][0])]['chineseName'], axis=1)
signals['lipper_id'] = signals.apply(lambda row: datums.loc[int(row['portfolio'][0])]['lipperKey'], axis=1)
signals = signals[['lipper_id', 'asset_ids', 'name', 'weight', 'risk', 'date']]
return signals.to_dict('records')
return []
...@@ -6,7 +6,7 @@ from functools import reduce ...@@ -6,7 +6,7 @@ from functools import reduce
from typing import List from typing import List
import pandas as pd import pandas as pd
from py_jftech import component, autowired, get_config, prev_workday, workday_range from py_jftech import component, autowired, get_config, prev_workday
from py_jftech import is_workday from py_jftech import is_workday
from api import PortfoliosBuilder from api import PortfoliosBuilder
......
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