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

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

parent eb49686b
......@@ -88,7 +88,7 @@ class TWDataSync(DataSync, ABC):
@property
def start_date(self):
return filter_weekend(dt.today() - timedelta(days=5))
return filter_weekend(self._config['start-date'])
@abstractmethod
def last_datum(self, datum_id):
......@@ -112,18 +112,7 @@ class TWDataSync(DataSync, ABC):
class TWFundNavSync(TWDataSync):
def get_all_data(self, start_date=dt.today()):
authori = 'chifufund' + dt.today().strftime('%Y%m%d') + 'FTDMNAVDATE'
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))
return []
def last_datum(self, datum_id):
last = rfn.get_last_one(fund_id=datum_id)
......@@ -137,24 +126,22 @@ class TWFundNavSync(TWDataSync):
last = self.last_datum(datum_id=datumid)
start_date = next_workday(last['nav_date']) if last else self.start_date
save_navs = []
last_av = last['av']
last_nav_cal = last['nav_cal']
for data in datas:
if dt.strptime(data['Nav_Date'], "%Y-%m-%dT%H:%M:%S") >= start_date and data['Fund_Id'] == ft_ticker:
datas = requests.get(
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:
div = data.get('fundDiv') or 0
nav = {
'fund_id': datumid,
'nav_date': dt.strptime(data['Nav_Date'], "%Y-%m-%dT%H:%M:%S"),
'av': data['Nav_P'],
'div': data['Nav_T_Div'],
'split': data['Nav_Spilt'],
'accrue_split': data['Nav_Spilt'],
'av_p': data['Nav_P'],
'div_p': data['Nav_T_Div'],
# 当日/上日
'nav_cal': round((data['Nav_P'] + data['Nav_T_Div']) / last_av * last_nav_cal, 4)
'nav_date': dt.fromisoformat(data['nav_Date']),
'av': data['nav_P'],
'div': div,
'split': 1,
'accrue_split': 1,
'av_p': data['nav_P'],
'div_p': div,
'nav_cal': round(data['nav_P']*data['nav_Unit'], 4)
}
last_av = nav['av']
last_nav_cal = nav['nav_cal']
save_navs.append(nav)
if save_navs:
rfn.batch_insert(save_navs)
......
......@@ -42,7 +42,7 @@ py-jftech:
hold-report: portfolios.holder.DivHoldReportor
mpt: portfolios.builder.RiskParityARCPortfoliosBuilder # PoemARCPortfoliosBuilder,RiskParityARCPortfoliosBuilder
dividend-holder: portfolios.holder.InvTrustPortfoliosHolder
navs-sync: basic.sync.FundNavSync
navs-sync: basic.sync.TWFundNavSync
email:
server: smtphz.qiye.163.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