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
f3817b3b
Commit
f3817b3b
authored
Aug 18, 2023
by
wenwen.tang
😕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
7b399d58
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
25 additions
and
19 deletions
+25
-19
holder.py
portfolios/holder.py
+10
-6
base_signal.py
rebalance/base_signal.py
+14
-13
robo_executor.py
robo_executor.py
+1
-0
No files found.
portfolios/holder.py
View file @
f3817b3b
...
...
@@ -237,11 +237,12 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
fund_div_tuple
=
self
.
get_navs_and_div
(
fund_ids
=
tuple
(
set
(
weight
)
|
set
(
share
)),
day
=
day
)
navs
=
fund_div_tuple
[
0
]
fund_dividend
=
fund_div_tuple
[
1
]
fund_dividend
=
last_nav
[
'fund_div'
]
+
sum
(
day_div
=
sum
(
map
(
lambda
k
:
share
[
k
]
*
fund_dividend
[
k
],
filter
(
lambda
k
:
k
in
fund_dividend
,
share
.
keys
())))
fund_dividend
=
last_nav
[
'fund_div'
]
+
day_div
dividend_acc
=
last_nav
[
'div_acc'
]
fund_av
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share
.
items
()]),
4
)
+
last_nav
[
'fund_div'
]
asset_nav
=
fund_av
fund_av
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share
.
items
()]),
4
)
asset_nav
=
fund_av
+
fund_dividend
nav
=
last_nav
[
'nav'
]
*
asset_nav
/
last_nav
[
'asset_nav'
]
share
=
{
x
:
fund_av
*
w
/
navs
[
x
]
for
x
,
w
in
weight
.
items
()}
if
self
.
is_first_workday
(
day
):
...
...
@@ -294,6 +295,7 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
fund_dividend
=
fund_div_tuple
[
1
]
# 配息日当天取得调仓日计算的应调仓金额,做实际份额赎回,这里的金额(即月初计算的赎回金额)用于转换成“赎回目标的份额”
need_div
=
last_nav
[
'div_forecast'
]
portfolio_div
=
0
if
self
.
is_dividend_date
(
day
)
and
need_div
>
0
:
funds
=
self
.
_datum
.
get_datums
(
type
=
DatumType
.
FUND
,
ticker
=
self
.
_config
[
'redeem-list'
])
# 获取需要配息的金额
...
...
@@ -308,12 +310,15 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
break
port_div
=
last_nav
[
'div_forecast'
]
dividend_acc
=
dividend_acc
+
port_div
portfolio_div
=
port_div
fund_av
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share
.
items
()]),
4
)
weight
=
{
x
:
round
(
y
*
navs
[
x
]
/
fund_av
,
2
)
for
x
,
y
in
share
.
items
()}
weight
=
format_weight
(
weight
)
fund_dividend
=
last_nav
[
'fund_div'
]
+
sum
(
day_div
=
sum
(
map
(
lambda
k
:
share
[
k
]
*
fund_dividend
[
k
],
filter
(
lambda
k
:
k
in
fund_dividend
,
share
.
keys
())))
asset_nav
=
fund_av
fund_dividend
=
last_nav
[
'fund_div'
]
+
day_div
# 基金净值+基金配息+产品配息
asset_nav
=
fund_av
+
fund_dividend
+
portfolio_div
nav
=
last_nav
[
'nav'
]
*
asset_nav
/
last_nav
[
'asset_nav'
]
div_forecast
=
last_nav
[
'div_forecast'
]
if
self
.
is_first_workday
(
day
):
...
...
@@ -369,7 +374,6 @@ class DailyHoldReportor(RoboReportor):
return
'每日持仓信息'
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
=
holds
[
holds
[
'date'
]
.
dt
.
date
==
max_date
.
date
()]
if
not
holds
.
empty
:
...
...
rebalance/base_signal.py
View file @
f3817b3b
...
...
@@ -92,8 +92,9 @@ class SignalReportor(RoboReportor):
def
load_report
(
self
,
max_date
=
dt
.
today
(),
min_date
=
None
)
->
List
[
dict
]:
result
=
[]
datums
=
{
str
(
x
[
'id'
]):
x
for
x
in
self
.
_datum
.
get_datums
(
type
=
DatumType
.
FUND
,
exclude
=
False
)}
for
signal
in
rrs
.
get_list
(
max_date
=
max_date
,
min_date
=
min_date
,
effective
=
True
):
for
signal
in
rrs
.
get_list
(
max_date
=
max_date
,
min_date
=
prev_workday
(
min_date
)
,
effective
=
True
):
rebalance_date
=
self
.
_hold
.
get_rebalance_date_by_signal
(
signal
[
'id'
])
if
rebalance_date
:
for
fund_id
,
weight
in
json
.
loads
(
signal
[
'portfolio'
])
.
items
():
result
.
append
({
'risk'
:
PortfoliosRisk
(
signal
[
'risk'
])
.
name
,
...
...
robo_executor.py
View file @
f3817b3b
...
...
@@ -37,6 +37,7 @@ class BacktestExecutor(RoboExecutor):
@
staticmethod
def
get_last_business_day
(
start_date
,
end_date
):
start_date
=
prev_workday
(
start_date
)
# 生成日期范围并转换为DataFrame
dates
=
pd
.
date_range
(
start_date
,
end_date
,
freq
=
'M'
)
if
dates
[
0
]
!=
start_date
:
...
...
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