Commit 6f0a2fa6 authored by wenwen.tang's avatar wenwen.tang 😕

更新配置与同步模块:将净值同步服务切换为TWFundNavSync,并调整数据获取与处理逻辑

parent eb49686b
...@@ -88,7 +88,7 @@ class TWDataSync(DataSync, ABC): ...@@ -88,7 +88,7 @@ class TWDataSync(DataSync, ABC):
@property @property
def start_date(self): def start_date(self):
return filter_weekend(dt.today() - timedelta(days=5)) return filter_weekend(self._config['start-date'])
@abstractmethod @abstractmethod
def last_datum(self, datum_id): def last_datum(self, datum_id):
...@@ -112,18 +112,7 @@ class TWDataSync(DataSync, ABC): ...@@ -112,18 +112,7 @@ class TWDataSync(DataSync, ABC):
class TWFundNavSync(TWDataSync): class TWFundNavSync(TWDataSync):
def get_all_data(self, start_date=dt.today()): def get_all_data(self, start_date=dt.today()):
authori = 'chifufund' + dt.today().strftime('%Y%m%d') + 'FTDMNAVDATE' return []
authdest = base64.b64encode(hashlib.sha256(authori.encode()).digest()).decode()
req = requests.session()
req.headers['user'] = 'chifufund'
req.headers['Authorization'] = 'Basic ' + authdest
for i in range(30):
try:
resp = req.get('http://210.202.243.106:1688/api/public/NAV?parameter.modifyDate=' + start_date.strftime(
'%Y-%m-%d'), timeout=30)
return resp.json()
except Exception as e:
logger.error(str(e))
def last_datum(self, datum_id): def last_datum(self, datum_id):
last = rfn.get_last_one(fund_id=datum_id) last = rfn.get_last_one(fund_id=datum_id)
...@@ -137,24 +126,22 @@ class TWFundNavSync(TWDataSync): ...@@ -137,24 +126,22 @@ class TWFundNavSync(TWDataSync):
last = self.last_datum(datum_id=datumid) last = self.last_datum(datum_id=datumid)
start_date = next_workday(last['nav_date']) if last else self.start_date start_date = next_workday(last['nav_date']) if last else self.start_date
save_navs = [] save_navs = []
last_av = last['av'] datas = requests.get(
last_nav_cal = last['nav_cal'] f"""https://cmsapi.franklin-dm.dev/funds/{ft_ticker}/nav?startDate={start_date.strftime('%Y-%m-%d')}""").json()
if len(datas) > 0:
for data in datas: for data in datas:
if dt.strptime(data['Nav_Date'], "%Y-%m-%dT%H:%M:%S") >= start_date and data['Fund_Id'] == ft_ticker: div = data.get('fundDiv') or 0
nav = { nav = {
'fund_id': datumid, 'fund_id': datumid,
'nav_date': dt.strptime(data['Nav_Date'], "%Y-%m-%dT%H:%M:%S"), 'nav_date': dt.fromisoformat(data['nav_Date']),
'av': data['Nav_P'], 'av': data['nav_P'],
'div': data['Nav_T_Div'], 'div': div,
'split': data['Nav_Spilt'], 'split': 1,
'accrue_split': data['Nav_Spilt'], 'accrue_split': 1,
'av_p': data['Nav_P'], 'av_p': data['nav_P'],
'div_p': data['Nav_T_Div'], 'div_p': div,
# 当日/上日 'nav_cal': round(data['nav_P']*data['nav_Unit'], 4)
'nav_cal': round((data['Nav_P'] + data['Nav_T_Div']) / last_av * last_nav_cal, 4)
} }
last_av = nav['av']
last_nav_cal = nav['nav_cal']
save_navs.append(nav) save_navs.append(nav)
if save_navs: if save_navs:
rfn.batch_insert(save_navs) rfn.batch_insert(save_navs)
......
...@@ -42,7 +42,7 @@ py-jftech: ...@@ -42,7 +42,7 @@ py-jftech:
hold-report: portfolios.holder.DivHoldReportor hold-report: portfolios.holder.DivHoldReportor
mpt: portfolios.builder.RiskParityARCPortfoliosBuilder # PoemARCPortfoliosBuilder,RiskParityARCPortfoliosBuilder mpt: portfolios.builder.RiskParityARCPortfoliosBuilder # PoemARCPortfoliosBuilder,RiskParityARCPortfoliosBuilder
dividend-holder: portfolios.holder.InvTrustPortfoliosHolder dividend-holder: portfolios.holder.InvTrustPortfoliosHolder
navs-sync: basic.sync.FundNavSync navs-sync: basic.sync.TWFundNavSync
email: email:
server: smtphz.qiye.163.com server: smtphz.qiye.163.com
user: jft-ra@thizgroup.com user: jft-ra@thizgroup.com
......
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