Commit f3817b3b authored by wenwen.tang's avatar wenwen.tang 😕

update

parent 7b399d58
......@@ -237,11 +237,12 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
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]
fund_dividend = last_nav['fund_div'] + sum(
day_div = sum(
map(lambda k: share[k] * fund_dividend[k], filter(lambda k: k in fund_dividend, share.keys())))
fund_dividend = last_nav['fund_div'] + day_div
dividend_acc = last_nav['div_acc']
fund_av = round(sum([navs[x] * y for x, y in share.items()]), 4) + last_nav['fund_div']
asset_nav = fund_av
fund_av = round(sum([navs[x] * y for x, y in share.items()]), 4)
asset_nav = fund_av + fund_dividend
nav = last_nav['nav'] * asset_nav / last_nav['asset_nav']
share = {x: fund_av * w / navs[x] for x, w in weight.items()}
if self.is_first_workday(day):
......@@ -294,6 +295,7 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
fund_dividend = fund_div_tuple[1]
# 配息日当天取得调仓日计算的应调仓金额,做实际份额赎回,这里的金额(即月初计算的赎回金额)用于转换成“赎回目标的份额”
need_div = last_nav['div_forecast']
portfolio_div = 0
if self.is_dividend_date(day) and need_div > 0:
funds = self._datum.get_datums(type=DatumType.FUND, ticker=self._config['redeem-list'])
# 获取需要配息的金额
......@@ -308,12 +310,15 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
break
port_div = last_nav['div_forecast']
dividend_acc = dividend_acc + port_div
portfolio_div = port_div
fund_av = round(sum([navs[x] * y for x, y in share.items()]), 4)
weight = {x: round(y * navs[x] / fund_av, 2) for x, y in share.items()}
weight = format_weight(weight)
fund_dividend = last_nav['fund_div'] + sum(
day_div = sum(
map(lambda k: share[k] * fund_dividend[k], filter(lambda k: k in fund_dividend, share.keys())))
asset_nav = fund_av
fund_dividend = last_nav['fund_div'] + day_div
# 基金净值+基金配息+产品配息
asset_nav = fund_av + fund_dividend + portfolio_div
nav = last_nav['nav'] * asset_nav / last_nav['asset_nav']
div_forecast = last_nav['div_forecast']
if self.is_first_workday(day):
......@@ -369,7 +374,6 @@ class DailyHoldReportor(RoboReportor):
return '每日持仓信息'
def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]:
holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date))
holds = holds[holds['date'].dt.date == max_date.date()]
if not holds.empty:
......
......@@ -92,8 +92,9 @@ class SignalReportor(RoboReportor):
def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]:
result = []
datums = {str(x['id']): x for x in self._datum.get_datums(type=DatumType.FUND, exclude=False)}
for signal in rrs.get_list(max_date=max_date, min_date=min_date, effective=True):
for signal in rrs.get_list(max_date=max_date, min_date=prev_workday(min_date), effective=True):
rebalance_date = self._hold.get_rebalance_date_by_signal(signal['id'])
if rebalance_date:
for fund_id, weight in json.loads(signal['portfolio']).items():
result.append({
'risk': PortfoliosRisk(signal['risk']).name,
......
......@@ -37,6 +37,7 @@ class BacktestExecutor(RoboExecutor):
@staticmethod
def get_last_business_day(start_date, end_date):
start_date = prev_workday(start_date)
# 生成日期范围并转换为DataFrame
dates = pd.date_range(start_date, end_date, freq='M')
if dates[0] != start_date:
......
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