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
27cd5b86
Commit
27cd5b86
authored
Nov 24, 2022
by
纪超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加信号模块
parent
4499db85
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
94 additions
and
1 deletion
+94
-1
api.py
api.py
+46
-0
config.yml
config.yml
+4
-0
holder.py
portfolios/holder.py
+1
-1
test_case.py
portfolios/test_case.py
+4
-0
drift_solver.py
rebalance/drift_solver.py
+39
-0
No files found.
api.py
View file @
27cd5b86
...
@@ -43,6 +43,12 @@ class SolveType(Enum):
...
@@ -43,6 +43,12 @@ class SolveType(Enum):
POEM
=
2
POEM
=
2
@
unique
class
DriftType
(
Enum
):
PORTFOLIO_HIGH_WEIGHT
=
1
DATE_CURVE
=
2
@
unique
@
unique
class
SignalType
(
Enum
):
class
SignalType
(
Enum
):
INIT
=
0
INIT
=
0
...
@@ -340,6 +346,46 @@ class PortfoliosHolder(ABC):
...
@@ -340,6 +346,46 @@ class PortfoliosHolder(ABC):
'''
'''
pass
pass
@
abstractmethod
def
build_hold_portfolio
(
self
,
day
,
risk
:
PortfoliosRisk
):
'''
构建指定日期,指定风险等级的持仓投组
:param day: 指定日期
:param risk: 指定风险等级
:return:
'''
pass
class
DriftSolver
(
ABC
):
'''
漂移解算器
'''
@
abstractmethod
def
get_drift
(
self
,
day
):
'''
获取指定日期得漂移计算结果
:param day:
:return:
'''
pass
class
DriftFactory
(
ABC
):
'''
漂移解算器工厂
'''
@
abstractmethod
def
create_drift_solver
(
self
,
type
:
DriftType
,
**
kwargs
)
->
DriftSolver
:
'''
创建指定类型的漂移解算器
:param type: 指定的解算器类型
:param kwargs: 解算器需要的参数字典
:return: 漂移解算器
'''
pass
class
SignalBuilder
(
ABC
):
class
SignalBuilder
(
ABC
):
'''
'''
...
...
config.yml
View file @
27cd5b86
...
@@ -113,6 +113,10 @@ portfolios:
...
@@ -113,6 +113,10 @@ portfolios:
mpt
:
mpt
:
quantile
:
0.1
quantile
:
0.1
rebalance
:
rebalance
:
drift
:
date-curve
:
diff-threshold
:
0.4
init-factor
:
0.000000002
builder
:
builder
:
disable-period
:
#自然日
disable-period
:
#自然日
normal
:
10
normal
:
10
...
...
portfolios/holder.py
View file @
27cd5b86
...
@@ -23,4 +23,4 @@ class NextReblanceHolder(PortfoliosHolder):
...
@@ -23,4 +23,4 @@ class NextReblanceHolder(PortfoliosHolder):
def
build_hold_portfolio
(
self
,
day
,
risk
:
PortfoliosRisk
):
def
build_hold_portfolio
(
self
,
day
,
risk
:
PortfoliosRisk
):
pass
pass
\ No newline at end of file
portfolios/test_case.py
View file @
27cd5b86
...
@@ -25,6 +25,10 @@ class PortfoliosTest(unittest.TestCase):
...
@@ -25,6 +25,10 @@ class PortfoliosTest(unittest.TestCase):
def
test_has_hold
(
self
,
hold
:
PortfoliosHolder
=
None
):
def
test_has_hold
(
self
,
hold
:
PortfoliosHolder
=
None
):
self
.
logger
.
info
(
hold
.
has_hold
(
PortfoliosRisk
.
FT3
))
self
.
logger
.
info
(
hold
.
has_hold
(
PortfoliosRisk
.
FT3
))
@
autowired
(
names
=
{
'hold'
:
'next-re'
})
def
test_build_hold
(
self
,
hold
:
PortfoliosHolder
=
None
):
pass
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
unittest
.
main
()
unittest
.
main
()
rebalance/drift_solver.py
0 → 100644
View file @
27cd5b86
from
api
import
DriftSolver
,
DriftFactory
,
DriftType
from
framework
import
component
,
autowired
,
get_config
from
rebalance.dao
import
robo_rebalance_signal
as
rrs
@
component
class
DefaultDriftFactory
(
DriftFactory
):
def
create_drift_solver
(
self
,
type
:
DriftType
,
**
kwargs
)
->
DriftSolver
:
if
type
is
DriftType
.
DATE_CURVE
:
return
DateCurveDriftSolver
()
elif
type
is
DriftType
.
PORTFOLIO_HIGH_WEIGHT
:
pass
return
None
class
DateCurve
(
DriftSolver
):
def
__init__
(
self
):
self
.
_config
=
get_config
(
__name__
)[
'date-curve'
]
@
property
def
diff_threshold
(
self
):
return
self
.
_config
[
'diff-threshold'
]
@
property
def
init_factor
(
self
):
return
self
.
_config
[
'init-factor'
]
def
get_drift
(
self
,
day
):
last_re
=
rrs
.
get_last_one
(
max_date
=
day
,
risk
=
risk
,
effective
=
True
)
result
=
self
.
diff_threshold
-
self
.
init_factor
*
(
day
-
last_re
[
'date'
])
.
days
**
4
return
max
(
0
,
result
)
class
PortfolioHighWeight
(
DriftSolver
):
def
get_drift
(
self
,
day
):
pass
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