Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
R
robo-dividend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wenwen.tang
robo-dividend
Commits
6f0a2fa6
Commit
6f0a2fa6
authored
Jul 23, 2025
by
wenwen.tang
😕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新配置与同步模块:将净值同步服务切换为TWFundNavSync,并调整数据获取与处理逻辑
parent
eb49686b
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
29 deletions
+16
-29
sync.py
basic/sync.py
+15
-28
config-lowrisk_rr3.yml
config-lowrisk_rr3.yml
+1
-1
No files found.
basic/sync.py
View file @
6f0a2fa6
...
...
@@ -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'
]
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
:
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
=
{
'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
)
...
...
config-lowrisk_rr3.yml
View file @
6f0a2fa6
...
...
@@ -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.
TW
FundNavSync
email
:
server
:
smtphz.qiye.163.com
user
:
jft-ra@thizgroup.com
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment