Commit 46088c76 authored by wenwen.tang's avatar wenwen.tang 😕

bugfix

parent 400e0857
......@@ -81,19 +81,14 @@ class DividendPortfoliosHolder(PortfoliosHolder):
weight = {int(x[0]): x[1] for x in json.loads(signal['portfolio']).items()}
if last_nav:
share = {int(x): y for x, y in json.loads(last_nav['portfolios'])['share'].items()}
share_nav = {int(x): y for x, y in json.loads(last_nav['portfolios'])['share'].items()}
fund_div_tuple = self.get_navs_and_div(fund_ids=tuple(set(weight) | set(share)), day=day)
navs = fund_div_tuple[0]
fund_dividend = fund_div_tuple[1]
# 配息当天配股
for k in share_nav.keys():
if k in fund_dividend:
share_nav[k] = (share_nav[k] * fund_dividend[k]) / (share_nav[k] * navs[k]) + share_nav[k]
fund_dividend = sum(
map(lambda k: share[k] * fund_dividend[k], filter(lambda k: k in fund_dividend, share.keys())))
dividend_acc = last_nav['div_acc']
dividend_acc = last_nav['div_acc'] + fund_dividend
fund_av = round(sum([navs[x] * y for x, y in share.items()]), 4)
fund_nav = round(sum([navs[x] * y for x, y in share_nav.items()]), 4)
fund_nav = fund_av + dividend_acc
cash = last_nav['cash'] + fund_dividend
div_forecast = last_nav['div_forecast']
# 每年的首个季度调整配息
......@@ -245,19 +240,14 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
if last_nav:
# 若非首次配息
share = {int(x): y for x, y in json.loads(last_nav['portfolios'])['share'].items()}
share_nav = {int(x): y for x, y in json.loads(last_nav['portfolios'])['share_nav'].items()}
fund_div_tuple = self.get_navs_and_div(fund_ids=tuple(set(weight) | set(share)), day=day)
navs = fund_div_tuple[0]
fund_dividend = fund_div_tuple[1]
# 配息当天配股
for k in share_nav.keys():
if k in fund_dividend:
share_nav[k] = (share_nav[k] * fund_dividend[k]) / (share_nav[k] * navs[k]) + share_nav[k]
fund_dividend = sum(
map(lambda k: share[k] * fund_dividend[k], filter(lambda k: k in fund_dividend, share.keys())))
dividend_acc = last_nav['div_acc'] + fund_dividend
fund_av = round(sum([navs[x] * y for x, y in share.items()]), 4)
fund_nav = round(sum([navs[x] * y for x, y in share_nav.items()]), 4)
fund_nav = fund_av + dividend_acc
asset_nav = fund_av
share = {x: fund_av * w / navs[x] for x, w in weight.items()}
# 若调仓当日,有基金产生配息
......@@ -385,8 +375,10 @@ class DivHoldReportor(RoboReportor):
if not holds.empty:
holds['signal_type'] = 'INIT'
holds['real_av'] = holds['asset_nav']
holds['nav'] = holds['acc_av']
holds = holds[
['date', 'signal_type', 'fund_av', 'fund_div', 'cash', 'real_av', 'port_div', 'acc_av', 'nav']]
['date', 'signal_type', 'fund_av', 'fund_nav', 'fund_div', 'cash', 'real_av', 'port_div', 'div_acc',
'acc_av', 'nav']]
return holds.to_dict('records')
return []
......
......@@ -23,7 +23,7 @@ class DivAlligamComboDatasReportor(RoboReportor):
holds = pd.DataFrame(self._hold_reportor.load_report(max_date=max_date, min_date=min_date))
if not holds.empty:
holds.set_index('date', inplace=True)
holds = holds[['real_av', 'acc_av', 'nav']]
holds = holds[['real_av', 'acc_av', 'nav', 'fund_nav']]
holds.rename(columns={'real_av': 'av', 'acc_av': 'acc'}, inplace=True)
benchmark = pd.DataFrame(self._benchmark.load_report(max_date=max_date, min_date=min_date))
......
......@@ -51,7 +51,8 @@ async def root():
funds.items()]
data['creat_date'] = portfolio['create_time'].strftime('%Y-%m-%d %H:%M:%S')
# todo 补全
data['cp'] = 0.81
# returns = round(datas.pct_change(), 5)
# data['cp'] = sharpe_ratio(returns, risk_free=0, period='daily', annualization=None),
data['rr'] = 0.81
data['roi'] = 0.81
data['risk'] = round(sum([id_ticker_map[key]['risk'] * weight for key, weight in funds.items()]), 2)
......
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