Commit bef905ae authored by stephen.wang's avatar stephen.wang

# 投组代码更新,4组config:stable、mdis、usmarket、indutryfund

parent d10b09d4
...@@ -5,7 +5,7 @@ from sys import exception ...@@ -5,7 +5,7 @@ from sys import exception
import numpy as np import numpy as np
import pandas as pd import pandas as pd
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from empyrical import sortino_ratio, annual_volatility from empyrical import sortino_ratio, annual_volatility, downside_risk, annual_return, tail_ratio
from py_jftech import filter_weekend, dict_remove, get_config, component, autowired, next_workday, \ from py_jftech import filter_weekend, dict_remove, get_config, component, autowired, next_workday, \
is_workday is_workday
...@@ -163,7 +163,7 @@ class FundDividendSortinoAssetOptimize(SortinoAssetOptimize): ...@@ -163,7 +163,7 @@ class FundDividendSortinoAssetOptimize(SortinoAssetOptimize):
pct_change = pct_change.truncate(before=(day - relativedelta(**self.annual_volatility_section[0]))) pct_change = pct_change.truncate(before=(day - relativedelta(**self.annual_volatility_section[0])))
# 时间未够计算年化波动的直接剔除 # 时间未够计算年化波动的直接剔除
funds = [fund for fund in funds if fund['id'] in pct_change.columns] funds = [fund for fund in funds if fund['id'] in pct_change.columns]
ratio = annual_volatility(pct_change) ratio = downside_risk(pct_change) # annual_volatility / downside_risk / tail_ratio
ratio = pd.Series(ratio).to_dict() ratio = pd.Series(ratio).to_dict()
annual = dict(zip(pct_change.columns, ratio.values())) annual = dict(zip(pct_change.columns, ratio.values()))
self.save_annual(day, annual) self.save_annual(day, annual)
......
This diff is collapsed.
This diff is collapsed.
...@@ -121,7 +121,7 @@ class MptARCPortfoliosBuilder(MptPortfoliosBuilder): ...@@ -121,7 +121,7 @@ class MptARCPortfoliosBuilder(MptPortfoliosBuilder):
try: try:
portfolio = rmp.get_one(day, type, risk) portfolio = rmp.get_one(day, type, risk)
if not portfolio: if not portfolio:
result = self.build_portfolio(day, type) result, detail = self.build_portfolio(day, type)
for build_risk, datas in result.items(): for build_risk, datas in result.items():
datas['portfolio'] = self._checker.check(day, json.loads(datas['portfolio'])) datas['portfolio'] = self._checker.check(day, json.loads(datas['portfolio']))
try: try:
......
...@@ -396,7 +396,7 @@ class DivHoldReportor(RoboReportor): ...@@ -396,7 +396,7 @@ class DivHoldReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '投组净值' return '投組淨值'
def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]: def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]:
holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date)) holds = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date))
...@@ -419,7 +419,7 @@ class DailyHoldReportor(RoboReportor): ...@@ -419,7 +419,7 @@ class DailyHoldReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '每日持信息' return '每日持信息'
def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]: 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 = pd.DataFrame(rhp.get_list(max_date=max_date, min_date=min_date))
......
...@@ -93,7 +93,7 @@ class SignalReportor(RoboReportor): ...@@ -93,7 +93,7 @@ class SignalReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '调仓信号' return '調倉信號'
def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]: def load_report(self, max_date=dt.today(), min_date=None) -> List[dict]:
result = [] result = []
...@@ -109,7 +109,7 @@ class SignalReportor(RoboReportor): ...@@ -109,7 +109,7 @@ class SignalReportor(RoboReportor):
'rebalance_date': rebalance_date, 'rebalance_date': rebalance_date,
'portfolio_type': PortfoliosType(signal['portfolio_type']).name, 'portfolio_type': PortfoliosType(signal['portfolio_type']).name,
'ft_ticker': datums[fund_id]['ftTicker'], 'ft_ticker': datums[fund_id]['ftTicker'],
'blooberg_ticker': datums[fund_id]['bloombergTicker'], 'bloomberg_ticker': datums[fund_id]['bloombergTicker'],
'fund_name': datums[fund_id]['chineseName'], 'fund_name': datums[fund_id]['chineseName'],
'weight': weight 'weight': weight
}) })
...@@ -126,7 +126,7 @@ class DailySignalReportor(RoboReportor): ...@@ -126,7 +126,7 @@ class DailySignalReportor(RoboReportor):
@property @property
def report_name(self) -> str: def report_name(self) -> str:
return '每日调仓信号' return '每月調倉信號'
def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]: def load_report(self, max_date=prev_workday(dt.today()), min_date=None) -> List[dict]:
signals = pd.DataFrame(rrs.get_list(max_date=max_date, min_date=min_date)) signals = pd.DataFrame(rrs.get_list(max_date=max_date, min_date=min_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