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
0f0faaa9
Commit
0f0faaa9
authored
Aug 14, 2023
by
wenwen.tang
😕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
10dcaa4c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
35 additions
and
18 deletions
+35
-18
config-svrobo6.yml
config-svrobo6.yml
+1
-1
main.py
main.py
+0
-1
base_signal.py
rebalance/base_signal.py
+2
-1
robo_executor.py
robo_executor.py
+5
-2
robo_controller.py
web/robo_controller.py
+27
-13
No files found.
config-svrobo6.yml
View file @
0f0faaa9
...
...
@@ -241,7 +241,7 @@ robo-executor: # 执行器相关
end-step
:
${BACKTEST_END_STEP:3}
# 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up
:
true
real
:
# 实盘执行器
export
:
${EXPORT_ENABLE:o
n
}
# 是否开启报告
export
:
${EXPORT_ENABLE:o
ff
}
# 是否开启报告
start-date
:
2023-05-08
# 实盘开始时间
include-date
:
[]
...
...
main.py
View file @
0f0faaa9
...
...
@@ -5,7 +5,6 @@ from api import RoboExecutor
@
autowired
(
names
=
{
'executor'
:
RoboExecutor
.
use_name
()})
def
start
(
executor
:
RoboExecutor
=
None
):
print
(
'开始'
)
executor
.
start_exec
()
...
...
rebalance/base_signal.py
View file @
0f0faaa9
...
...
@@ -37,7 +37,8 @@ class BaseRebalanceSignal(RebalanceSignal, ABC):
'type'
:
self
.
signal_type
,
'risk'
:
risk
,
'portfolio_type'
:
portfolio_type
,
'portfolio'
:
portfolio
'portfolio'
:
portfolio
,
'effective'
:
1
})
return
rrs
.
get_by_id
(
id
)
return
None
...
...
robo_executor.py
View file @
0f0faaa9
...
...
@@ -143,7 +143,7 @@ class RealExecutor(RoboExecutor):
self
.
_builder
=
builder
self
.
_pool
=
pool
self
.
_hold
=
hold
self
.
_syncs
=
syncs
self
.
_syncs
=
[
syncs
]
self
.
_daily_export
=
daily_export
self
.
_monitor_export
=
monitor_export
self
.
_config
=
get_config
(
__name__
)[
'real'
]
...
...
@@ -176,7 +176,8 @@ class RealExecutor(RoboExecutor):
def
start_exec
(
self
):
if
self
.
is_sync_data
:
self
.
_syncs
.
do_sync
()
for
sync
in
self
.
_syncs
:
sync
.
do_sync
()
date
=
self
.
curt_date
if
is_workday
(
date
)
or
date
in
self
.
include_date
:
date
=
prev_workday
(
filter_weekend
(
date
))
...
...
@@ -198,3 +199,5 @@ class RealExecutor(RoboExecutor):
f
'export email for date[{format_date(date)}] send success, use[{(dt.now() - now).seconds}s]'
)
else
:
logger
.
info
(
f
'today[{format_date(date)}] is a rest day, do not execute the daily real robo.'
)
web/robo_controller.py
View file @
0f0faaa9
import
datetime
as
dt
import
json
from
datetime
import
date
as
dt
,
datetime
from
multiprocessing
import
Process
import
uvicorn
...
...
@@ -8,7 +8,7 @@ from fastapi import FastAPI
from
py_jftech
import
prev_workday
,
filter_weekend
import
main
from
api
import
DatumType
from
api
import
DatumType
,
PortfoliosRisk
from
basic.datum
import
DefaultDatum
app
=
FastAPI
()
...
...
@@ -16,17 +16,25 @@ app = FastAPI()
REC_GID
=
'E3886FBA-123B-7890-123E-123456BEEED'
def
get
TodayR
ec
():
def
get
_today_r
ec
():
from
portfolios.dao
import
robo_mpt_portfolios
as
rmp
from
api
import
PortfoliosType
,
PortfoliosRisk
day
=
prev_workday
(
filter_weekend
(
dt
.
today
()))
day
=
prev_workday
(
filter_weekend
(
dt
.
date
.
today
()))
portfolio
=
rmp
.
get_one
(
day
,
PortfoliosType
.
NORMAL
,
PortfoliosRisk
.
FT3
)
return
portfolio
def
get_last_signal
():
from
rebalance.dao
import
robo_rebalance_signal
as
rrs
day
=
prev_workday
(
filter_weekend
(
dt
.
date
.
today
()))
last_re
=
rrs
.
get_last_one
(
max_date
=
day
,
risk
=
PortfoliosRisk
.
FT3
,
effective
=
True
)
return
last_re
@
app
.
get
(
"/recommend"
)
async
def
root
():
portfolio
=
get
TodayR
ec
()
portfolio
=
get
_today_r
ec
()
if
portfolio
:
fund_infos
=
DefaultDatum
()
.
get_datums
(
DatumType
.
FUND
)
id_ticker_map
=
{
str
(
info
[
'id'
]):
info
for
info
in
fund_infos
}
...
...
@@ -43,33 +51,39 @@ async def root():
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
)
data
[
'note'
]
=
'{}'
note
=
{}
sig
=
get_last_signal
()
note
[
'last_reg_reb'
]
=
sig
[
'date'
]
.
strftime
(
'
%
Y-
%
m-
%
d'
)
data
[
'note'
]
=
json
.
dumps
(
note
)
portfolios
[
'data'
]
=
data
rec_list
.
append
(
portfolios
)
return
rec_list
else
:
return
{
'msg'
:
'当日投组未产生,待10:
3
0后获取'
}
return
{
'msg'
:
'当日投组未产生,待10:
0
0后获取'
}
def
start_robo
():
# 异常情况可以重启跑当天投组
current_time
=
d
atetime
.
datetime
.
now
()
target_time
=
d
atetime
.
time
(
10
,
15
)
current_time
=
d
t
.
datetime
.
now
()
target_time
=
d
t
.
time
(
10
,
0
)
if
current_time
.
time
()
>
target_time
:
main
.
start
()
# 开启定时任务,执行实盘
scheduler
=
BlockingScheduler
()
scheduler
.
add_job
(
main
.
start
,
'cron'
,
day_of_week
=
'0-4'
,
hour
=
10
,
minute
=
15
)
scheduler
.
add_job
(
main
.
start
,
'cron'
,
day_of_week
=
'0-4'
,
hour
=
10
,
minute
=
00
)
scheduler
.
start
()
def
start_web
():
uvicorn
.
run
(
"robo_controller:app"
,
reload
=
True
,
port
=
8080
)
if
__name__
==
"__main__"
:
# 开启一个进程执行start_robo()
p1
=
Process
(
target
=
start_robo
)
p1
.
start
()
# 启动进程2
p2
=
Process
(
target
=
uvicorn
.
run
,
args
=
(
"robo_controller:app"
,),
kwargs
=
{
'port'
:
8080
})
p2
=
Process
(
target
=
start_web
)
p2
.
start
()
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