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
46088c76
Commit
46088c76
authored
Sep 06, 2023
by
wenwen.tang
😕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfix
parent
400e0857
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
9 additions
and
16 deletions
+9
-16
holder.py
portfolios/holder.py
+6
-14
combo_datas.py
reports/combo_datas.py
+1
-1
robo_controller.py
web/robo_controller.py
+2
-1
No files found.
portfolios/holder.py
View file @
46088c76
...
...
@@ -81,19 +81,14 @@ class DividendPortfoliosHolder(PortfoliosHolder):
weight
=
{
int
(
x
[
0
]):
x
[
1
]
for
x
in
json
.
loads
(
signal
[
'portfolio'
])
.
items
()}
if
last_nav
:
share
=
{
int
(
x
):
y
for
x
,
y
in
json
.
loads
(
last_nav
[
'portfolios'
])[
'share'
]
.
items
()}
share_nav
=
{
int
(
x
):
y
for
x
,
y
in
json
.
loads
(
last_nav
[
'portfolios'
])[
'share'
]
.
items
()}
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
]
# 配息当天配股
for
k
in
share_nav
.
keys
():
if
k
in
fund_dividend
:
share_nav
[
k
]
=
(
share_nav
[
k
]
*
fund_dividend
[
k
])
/
(
share_nav
[
k
]
*
navs
[
k
])
+
share_nav
[
k
]
fund_dividend
=
sum
(
map
(
lambda
k
:
share
[
k
]
*
fund_dividend
[
k
],
filter
(
lambda
k
:
k
in
fund_dividend
,
share
.
keys
())))
dividend_acc
=
last_nav
[
'div_acc'
]
dividend_acc
=
last_nav
[
'div_acc'
]
+
fund_dividend
fund_av
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share
.
items
()]),
4
)
fund_nav
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share_nav
.
items
()]),
4
)
fund_nav
=
fund_av
+
dividend_acc
cash
=
last_nav
[
'cash'
]
+
fund_dividend
div_forecast
=
last_nav
[
'div_forecast'
]
# 每年的首个季度调整配息
...
...
@@ -245,19 +240,14 @@ class InvTrustPortfoliosHolder(DividendPortfoliosHolder):
if
last_nav
:
# 若非首次配息
share
=
{
int
(
x
):
y
for
x
,
y
in
json
.
loads
(
last_nav
[
'portfolios'
])[
'share'
]
.
items
()}
share_nav
=
{
int
(
x
):
y
for
x
,
y
in
json
.
loads
(
last_nav
[
'portfolios'
])[
'share_nav'
]
.
items
()}
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
]
# 配息当天配股
for
k
in
share_nav
.
keys
():
if
k
in
fund_dividend
:
share_nav
[
k
]
=
(
share_nav
[
k
]
*
fund_dividend
[
k
])
/
(
share_nav
[
k
]
*
navs
[
k
])
+
share_nav
[
k
]
fund_dividend
=
sum
(
map
(
lambda
k
:
share
[
k
]
*
fund_dividend
[
k
],
filter
(
lambda
k
:
k
in
fund_dividend
,
share
.
keys
())))
dividend_acc
=
last_nav
[
'div_acc'
]
+
fund_dividend
fund_av
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share
.
items
()]),
4
)
fund_nav
=
round
(
sum
([
navs
[
x
]
*
y
for
x
,
y
in
share_nav
.
items
()]),
4
)
fund_nav
=
fund_av
+
dividend_acc
asset_nav
=
fund_av
share
=
{
x
:
fund_av
*
w
/
navs
[
x
]
for
x
,
w
in
weight
.
items
()}
# 若调仓当日,有基金产生配息
...
...
@@ -385,8 +375,10 @@ class DivHoldReportor(RoboReportor):
if
not
holds
.
empty
:
holds
[
'signal_type'
]
=
'INIT'
holds
[
'real_av'
]
=
holds
[
'asset_nav'
]
holds
[
'nav'
]
=
holds
[
'acc_av'
]
holds
=
holds
[
[
'date'
,
'signal_type'
,
'fund_av'
,
'fund_div'
,
'cash'
,
'real_av'
,
'port_div'
,
'acc_av'
,
'nav'
]]
[
'date'
,
'signal_type'
,
'fund_av'
,
'fund_nav'
,
'fund_div'
,
'cash'
,
'real_av'
,
'port_div'
,
'div_acc'
,
'acc_av'
,
'nav'
]]
return
holds
.
to_dict
(
'records'
)
return
[]
...
...
reports/combo_datas.py
View file @
46088c76
...
...
@@ -23,7 +23,7 @@ class DivAlligamComboDatasReportor(RoboReportor):
holds
=
pd
.
DataFrame
(
self
.
_hold_reportor
.
load_report
(
max_date
=
max_date
,
min_date
=
min_date
))
if
not
holds
.
empty
:
holds
.
set_index
(
'date'
,
inplace
=
True
)
holds
=
holds
[[
'real_av'
,
'acc_av'
,
'nav'
]]
holds
=
holds
[[
'real_av'
,
'acc_av'
,
'nav'
,
'fund_nav'
]]
holds
.
rename
(
columns
=
{
'real_av'
:
'av'
,
'acc_av'
:
'acc'
},
inplace
=
True
)
benchmark
=
pd
.
DataFrame
(
self
.
_benchmark
.
load_report
(
max_date
=
max_date
,
min_date
=
min_date
))
...
...
web/robo_controller.py
View file @
46088c76
...
...
@@ -51,7 +51,8 @@ async def root():
funds
.
items
()]
data
[
'creat_date'
]
=
portfolio
[
'create_time'
]
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
# todo 补全
data
[
'cp'
]
=
0.81
# returns = round(datas.pct_change(), 5)
# data['cp'] = sharpe_ratio(returns, risk_free=0, period='daily', annualization=None),
data
[
'rr'
]
=
0.81
data
[
'roi'
]
=
0.81
data
[
'risk'
]
=
round
(
sum
([
id_ticker_map
[
key
][
'risk'
]
*
weight
for
key
,
weight
in
funds
.
items
()]),
2
)
...
...
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