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
2021b48e
Commit
2021b48e
authored
Jan 10, 2023
by
jichao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加危机1信号判断逻辑
parent
0da5f758
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
4 deletions
+40
-4
config.yml
config.yml
+2
-0
drift_solver.py
rebalance/drift_solver.py
+8
-1
curve_drift.py
rebalance/signals/curve_drift.py
+30
-3
No files found.
config.yml
View file @
2021b48e
...
...
@@ -40,6 +40,8 @@ py-jftech:
api.PortfoliosBuilder
:
portfolios.builder.PoemPortfoliosBuilder
names
:
crisis_one
:
rebalance.signals.crisis_signal.LastRateCrisisOneSignal
date-curve
:
rebalance.drift_solver.DateCurve
curve-drift
:
rebalance.signals.curve_drift.CurveDrift
email
:
server
:
smtphz.qiye.163.com
user
:
jft-ra@thizgroup.com
...
...
rebalance/drift_solver.py
View file @
2021b48e
...
...
@@ -20,7 +20,14 @@ class DateCurve(DriftSolver):
def
get_drift
(
self
,
day
,
risk
:
PortfoliosRisk
):
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
self
.
diff_threshold
-
self
.
init_factor
*
(
day
-
last_re
[
'date'
])
.
days
**
4
@
component
(
bean_name
=
'date-curve'
)
class
NonnegativeDateCurve
(
DateCurve
):
def
get_drift
(
self
,
day
,
risk
:
PortfoliosRisk
):
result
=
super
(
NonnegativeDateCurve
,
self
)
.
get_drift
(
day
,
risk
)
return
max
(
0
,
result
)
...
...
rebalance/signals/curve_drift.py
View file @
2021b48e
...
...
@@ -22,15 +22,14 @@ class CurveDrift(BaseRebalanceSignal):
SignalType
.
CRISIS_ONE
,
SignalType
.
CRISIS_TWO
,
SignalType
.
MARKET_RIGHT
,
SignalType
.
INIT
SignalType
.
INIT
,
SignalType
.
LOW_BUY
]
def
is_trigger
(
self
,
day
,
risk
:
PortfoliosRisk
)
->
bool
:
last_re
=
rrs
.
get_last_one
(
max_date
=
day
,
risk
=
risk
,
effective
=
True
)
if
last_re
is
None
or
SignalType
(
last_re
[
'type'
])
in
self
.
exclude_last_type
:
return
False
if
last_re
[
'date'
]
+
relativedelta
(
days
=
120
)
<=
day
:
return
True
hr_datums
=
self
.
_datum
.
get_high_risk_datums
(
risk
)
datum_ids
=
[
x
[
'id'
]
for
x
in
hr_datums
]
normal_portfolio
=
self
.
_builder
.
get_portfolios
(
day
,
risk
)
...
...
@@ -42,3 +41,31 @@ class CurveDrift(BaseRebalanceSignal):
@
property
def
signal_type
(
self
)
->
SignalType
:
return
SignalType
.
DRIFT_BUY
@
component
(
bean_name
=
'curve-drift'
)
class
Max120tCurveDrift
(
CurveDrift
):
def
is_trigger
(
self
,
day
,
risk
:
PortfoliosRisk
)
->
bool
:
last_re
=
rrs
.
get_last_one
(
max_date
=
day
,
risk
=
risk
,
effective
=
True
)
if
last_re
is
None
or
SignalType
(
last_re
[
'type'
])
in
self
.
exclude_last_type
:
return
False
if
last_re
[
'date'
]
+
relativedelta
(
days
=
120
)
<=
day
:
return
True
return
super
(
Max120tCurveDrift
,
self
)
.
is_trigger
(
day
,
risk
)
@
component
(
bean_name
=
'curve-drift'
)
class
AbsCurveDrift
(
CurveDrift
):
def
is_trigger
(
self
,
day
,
risk
:
PortfoliosRisk
)
->
bool
:
last_re
=
rrs
.
get_last_one
(
max_date
=
day
,
risk
=
risk
,
effective
=
True
)
if
last_re
is
None
or
SignalType
(
last_re
[
'type'
])
in
self
.
exclude_last_type
:
return
False
hr_datums
=
self
.
_datum
.
get_high_risk_datums
(
risk
)
datum_ids
=
[
x
[
'id'
]
for
x
in
hr_datums
]
normal_portfolio
=
self
.
_builder
.
get_portfolios
(
day
,
risk
)
normal_weight
=
round
(
sum
([
x
[
1
]
for
x
in
normal_portfolio
.
items
()
if
x
[
0
]
in
datum_ids
]),
2
)
hold_portfolio
=
self
.
_hold
.
get_portfolios_weight
(
day
,
risk
)
hold_weight
=
round
(
sum
([
x
[
1
]
for
x
in
hold_portfolio
.
items
()
if
x
[
0
]
in
datum_ids
]),
2
)
return
abs
(
normal_weight
-
hold_weight
)
>=
self
.
_solver
.
get_drift
(
day
,
risk
)
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