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
189f858c
Commit
189f858c
authored
Sep 27, 2024
by
吕先亚
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
a5173007
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
3 deletions
+40
-3
config-mdis_prr3.yml
config-mdis_prr3.yml
+1
-0
holder.py
portfolios/holder.py
+38
-2
base_signal.py
rebalance/base_signal.py
+1
-1
No files found.
config-mdis_prr3.yml
View file @
189f858c
...
@@ -215,6 +215,7 @@ reports: # 报告模块相关
...
@@ -215,6 +215,7 @@ reports: # 报告模块相关
include-report
:
include-report
:
# - daily-hold-report
# - daily-hold-report
-
daily-signal-report
-
daily-signal-report
-
daily-mpt-report
email
:
email
:
receives
:
receives
:
-
brody_wu@chifufund.com
-
brody_wu@chifufund.com
...
...
portfolios/holder.py
View file @
189f858c
...
@@ -11,7 +11,7 @@ from py_jftech import (
...
@@ -11,7 +11,7 @@ from py_jftech import (
)
)
from
api
import
PortfoliosHolder
,
PortfoliosRisk
,
Navs
,
RoboExecutor
,
PortfoliosType
,
PortfoliosBuilder
,
RoboReportor
,
\
from
api
import
PortfoliosHolder
,
PortfoliosRisk
,
Navs
,
RoboExecutor
,
PortfoliosType
,
PortfoliosBuilder
,
RoboReportor
,
\
DatumType
,
Datum
,
RebalanceSignal
DatumType
,
Datum
,
RebalanceSignal
,
SignalType
from
portfolios.dao
import
robo_hold_portfolios
as
rhp
from
portfolios.dao
import
robo_hold_portfolios
as
rhp
from
portfolios.utils
import
format_weight
from
portfolios.utils
import
format_weight
...
@@ -282,7 +282,8 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
...
@@ -282,7 +282,8 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
nav_cals
=
fund_div_tuple
[
2
]
nav_cals
=
fund_div_tuple
[
2
]
share_nav
=
share
share_nav
=
share
# 不考虑配息
# 不考虑配息
share_nodiv_nav
=
{
x
:
(
1
-
funds_subscription_rate
[
x
])
*
(
fund_av
*
w
)
/
nav_cals
[
x
]
for
x
,
w
in
weight
.
items
()}
share_nodiv_nav
=
{
x
:
(
1
-
funds_subscription_rate
[
x
])
*
(
fund_av
*
w
)
/
nav_cals
[
x
]
for
x
,
w
in
weight
.
items
()}
# 初始买入扣手续费
# 初始买入扣手续费
fee
=
sum
(
funds_subscription_rate
[
x
]
*
(
fund_av
*
w
)
for
x
,
w
in
weight
.
items
())
fee
=
sum
(
funds_subscription_rate
[
x
]
*
(
fund_av
*
w
)
for
x
,
w
in
weight
.
items
())
fund_av
=
fund_av
-
fee
fund_av
=
fund_av
-
fee
...
@@ -445,3 +446,38 @@ class DailyHoldReportor(RoboReportor):
...
@@ -445,3 +446,38 @@ class DailyHoldReportor(RoboReportor):
[
'lipper_id'
,
'asset_ids'
,
'name'
,
'weight'
,
'risk'
,
'date'
,
'rebalance_type'
,
'rebalance_date'
]]
[
'lipper_id'
,
'asset_ids'
,
'name'
,
'weight'
,
'risk'
,
'date'
,
'rebalance_type'
,
'rebalance_date'
]]
return
holds
.
to_dict
(
'records'
)
return
holds
.
to_dict
(
'records'
)
return
[]
return
[]
@
component
(
bean_name
=
'daily-mpt-report'
)
class
DailyMptReportor
(
RoboReportor
):
@
autowired
def
__init__
(
self
,
hold
:
PortfoliosHolder
=
None
,
datum
:
Datum
=
None
):
self
.
_hold
=
hold
self
.
_datum
=
datum
@
property
def
report_name
(
self
)
->
str
:
return
'每日mpt'
def
load_report
(
self
,
max_date
=
prev_workday
(
dt
.
today
()),
min_date
=
None
)
->
List
[
dict
]:
from
portfolios.dao
import
robo_mpt_portfolios
as
rmp
signals
=
pd
.
DataFrame
([
rmp
.
get_last_one
(
type
=
PortfoliosType
.
NORMAL
,
risk
=
PortfoliosRisk
.
FT3
)])
if
not
signals
.
empty
:
datum_ids
=
reduce
(
lambda
x
,
y
:
x
|
y
,
signals
[
'portfolio'
]
.
apply
(
lambda
x
:
set
(
json
.
loads
(
x
)
.
keys
())))
datums
=
pd
.
DataFrame
(
self
.
_datum
.
get_datums
(
type
=
DatumType
.
FUND
,
datum_ids
=
datum_ids
))
datums
.
set_index
(
'id'
,
inplace
=
True
)
signals
[
'risk'
]
=
signals
.
apply
(
lambda
row
:
PortfoliosRisk
(
row
[
'risk'
])
.
name
,
axis
=
1
)
signals
[
'portfolio'
]
=
signals
.
apply
(
lambda
row
:
[
x
for
x
in
json
.
loads
(
row
[
'portfolio'
])
.
items
()],
axis
=
1
)
signals
=
signals
.
explode
(
'portfolio'
,
ignore_index
=
True
)
signals
[
'weight'
]
=
signals
.
apply
(
lambda
row
:
format
(
row
[
'portfolio'
][
1
],
'.0
%
'
),
axis
=
1
)
signals
[
'asset_ids'
]
=
signals
.
apply
(
lambda
row
:
datums
.
loc
[
int
(
row
[
'portfolio'
][
0
])][
'ftTicker'
],
axis
=
1
)
signals
[
'name'
]
=
signals
.
apply
(
lambda
row
:
datums
.
loc
[
int
(
row
[
'portfolio'
][
0
])][
'chineseName'
],
axis
=
1
)
signals
[
'lipper_id'
]
=
signals
.
apply
(
lambda
row
:
datums
.
loc
[
int
(
row
[
'portfolio'
][
0
])][
'lipperKey'
],
axis
=
1
)
signals
=
signals
[[
'lipper_id'
,
'asset_ids'
,
'name'
,
'weight'
,
'risk'
,
'date'
]]
return
signals
.
to_dict
(
'records'
)
return
[]
rebalance/base_signal.py
View file @
189f858c
...
@@ -6,7 +6,7 @@ from functools import reduce
...
@@ -6,7 +6,7 @@ from functools import reduce
from
typing
import
List
from
typing
import
List
import
pandas
as
pd
import
pandas
as
pd
from
py_jftech
import
component
,
autowired
,
get_config
,
prev_workday
,
workday_range
from
py_jftech
import
component
,
autowired
,
get_config
,
prev_workday
from
py_jftech
import
is_workday
from
py_jftech
import
is_workday
from
api
import
PortfoliosBuilder
from
api
import
PortfoliosBuilder
...
...
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