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
4516bd33
Commit
4516bd33
authored
Dec 12, 2022
by
jichao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
回测报告增加基金池
parent
60ea7192
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
7 additions
and
4 deletions
+7
-4
config.yml
config.yml
+3
-2
solver.py
portfolios/solver.py
+4
-2
No files found.
config.yml
View file @
4516bd33
...
...
@@ -89,7 +89,8 @@ portfolios: # 投组模块
solver
:
# 解算器相关
tol
:
1E-10
# 误差满足条件
navs
:
# 净值要求
months
:
3
# 需要几个月的净值数据
range
:
# 需要净值数据的区间, days: 90 表示90自然日,months: 3 表示3个自然月
days
:
90
max-nan
:
# 最大缺失净值条件
asset
:
8
# 单一资产最多缺少多少交易日数据,则踢出资产池
day
:
0.5
# 单一交易日最多缺少百分之多少净值,则删除该交易日
...
...
@@ -97,7 +98,7 @@ portfolios: # 投组模块
ft3
:
[
2
,
3
]
# 类似这样写,只要求ft3的投组资产风险等级
ft6
:
[
2
,
3
,
4
]
ft9
:
[
2
,
3
,
4
,
5
]
matrix-rtn-days
:
2
1
# 计算回报率矩阵时,回报率滚动天数
matrix-rtn-days
:
2
0
# 计算回报率矩阵时,回报率滚动天数
asset-count
:
5
# 投组资产个数。e.g. count 或 [min, max] 分别表示 最大最小都为count 或 最小为min 最大为max,另外这里也可以类似上面给不同风险等级分别配置
mpt
:
# mpt计算相关
cvar-beta
:
0.2
# 计算Kbeta 需要用到
...
...
portfolios/solver.py
View file @
4516bd33
...
...
@@ -214,7 +214,7 @@ class DefaultSolver(Solver):
exclude
=
self
.
get_config
(
'navs.exclude-asset-type'
)
or
[]
asset_ids
=
list
(
set
(
asset_ids
)
&
set
([
x
[
'id'
]
for
x
in
datum
if
x
[
'assetType'
]
not
in
exclude
]))
min_date
=
day
-
relativedelta
(
months
=
self
.
get_config
(
'navs.months
'
))
min_date
=
day
-
relativedelta
(
**
self
.
get_config
(
'navs.range
'
))
navs
=
pd
.
DataFrame
(
self
.
_navs
.
get_fund_navs
(
fund_ids
=
asset_ids
,
max_date
=
day
,
min_date
=
min_date
))
navs
=
navs
[
navs
[
'nav_date'
]
.
dt
.
day_of_week
<
5
]
navs
[
'nav_date'
]
=
pd
.
to_datetime
(
navs
[
'nav_date'
])
...
...
@@ -228,6 +228,8 @@ class DefaultSolver(Solver):
navs
.
drop
(
index
=
[
x
for
x
in
navs_nan
.
index
if
navs_nan
.
loc
[
x
]
>=
self
.
get_config
(
'navs.max-nan.day'
)],
inplace
=
True
)
navs
.
fillna
(
method
=
'ffill'
,
inplace
=
True
)
if
navs
.
iloc
[
0
]
.
isna
()
.
sum
()
>
0
:
navs
.
fillna
(
method
=
'bfill'
,
inplace
=
True
)
self
.
__navs
=
navs
def
get_config
(
self
,
name
):
...
...
@@ -242,7 +244,7 @@ class DefaultSolver(Solver):
value
=
load_config
(
self
.
_config
[
self
.
type
.
value
]
if
self
.
type
is
not
PortfoliosType
.
NORMAL
else
self
.
_config
)
if
value
is
None
:
value
=
load_config
(
self
.
_config
)
return
value
[
f
'ft{self.risk.value}'
]
if
value
and
isinstance
(
value
,
dict
)
else
value
return
value
[
f
'ft{self.risk.value}'
]
if
value
and
isinstance
(
value
,
dict
)
and
f
'ft{self.risk.value}'
in
value
else
value
def
debug_solve_result
(
self
,
model
):
if
logger
.
isEnabledFor
(
DEBUG
):
...
...
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