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
c1900177
Commit
c1900177
authored
Aug 29, 2023
by
wenwen.tang
😕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
1174318f
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
94 additions
and
90 deletions
+94
-90
sync.py
basic/sync.py
+1
-1
robo_controller.py
web/robo_controller.py
+93
-89
No files found.
basic/sync.py
View file @
c1900177
...
@@ -190,7 +190,7 @@ class IndexSync(JDCDataSync):
...
@@ -190,7 +190,7 @@ class IndexSync(JDCDataSync):
'pe'
:
x
[
'peRatio'
]
if
'peRatio'
in
x
else
None
,
'pe'
:
x
[
'peRatio'
]
if
'peRatio'
in
x
else
None
,
'pb'
:
x
[
'pbRatio'
]
if
'pbRatio'
in
x
else
None
,
'pb'
:
x
[
'pbRatio'
]
if
'pbRatio'
in
x
else
None
,
'volume'
:
x
[
'volume'
]
if
'volume'
in
x
else
None
,
'volume'
:
x
[
'volume'
]
if
'volume'
in
x
else
None
,
}
for
x
in
datas
if
is_workday
(
dt
.
fromtimestamp
(
x
[
'date'
]
/
1000
),
tz
=
pytz
.
timezone
(
'Asia/Shanghai'
))
and
'close'
in
x
]
}
for
x
in
datas
if
is_workday
(
dt
.
fromtimestamp
(
x
[
'date'
]
/
1000
,
tz
=
pytz
.
timezone
(
'Asia/Shanghai'
)
))
and
'close'
in
x
]
if
save_datas
:
if
save_datas
:
rid
.
batch_insert
(
save_datas
)
rid
.
batch_insert
(
save_datas
)
...
...
web/robo_controller.py
View file @
c1900177
# import datetime as dt
import
datetime
as
dt
# import json
import
json
# from multiprocessing import Process
from
multiprocessing
import
Process
#
# import uvicorn
import
uvicorn
# from apscheduler.schedulers.blocking import BlockingScheduler
from
apscheduler.schedulers.blocking
import
BlockingScheduler
# from fastapi import FastAPI
from
fastapi
import
FastAPI
# from py_jftech import prev_workday, filter_weekend
from
py_jftech
import
prev_workday
,
filter_weekend
,
autowired
#
# import main
import
main
# from api import DatumType, PortfoliosRisk
from
api
import
DatumType
,
PortfoliosRisk
,
Datum
# from basic.datum import DefaultDatum
#
app
=
FastAPI
()
# app = FastAPI()
#
REC_GID
=
'E3886FBA-123B-7890-123E-123456BEEED'
# REC_GID = 'E3886FBA-123B-7890-123E-123456BEEED'
#
#
def
get_today_rec
():
# def get_today_rec():
from
portfolios.dao
import
robo_mpt_portfolios
as
rmp
# from portfolios.dao import robo_mpt_portfolios as rmp
from
api
import
PortfoliosType
,
PortfoliosRisk
# from api import PortfoliosType, PortfoliosRisk
day
=
prev_workday
(
filter_weekend
(
dt
.
date
.
today
()))
# day = prev_workday(filter_weekend(dt.date.today()))
portfolio
=
rmp
.
get_one
(
day
,
PortfoliosType
.
NORMAL
,
PortfoliosRisk
.
FT3
)
# portfolio = rmp.get_one(day, PortfoliosType.NORMAL, PortfoliosRisk.FT3)
return
portfolio
# return portfolio
#
#
def
get_last_signal
():
# def get_last_signal():
from
rebalance.dao
import
robo_rebalance_signal
as
rrs
# from rebalance.dao import robo_rebalance_signal as rrs
#
day
=
prev_workday
(
filter_weekend
(
dt
.
date
.
today
()))
# day = prev_workday(filter_weekend(dt.date.today()))
last_re
=
rrs
.
get_last_one
(
max_date
=
day
,
risk
=
PortfoliosRisk
.
FT3
,
effective
=
True
)
# last_re = rrs.get_last_one(max_date=day, risk=PortfoliosRisk.FT3, effective=True)
return
last_re
# return last_re
#
#
@
autowired
# @app.get("/recommend")
def
get_fund_infos
(
datum
:
Datum
=
None
):
# async def root():
return
datum
.
get_datums
(
DatumType
.
FUND
)
# portfolio = get_today_rec()
# if portfolio:
# fund_infos = DefaultDatum().get_datums(DatumType.FUND)
@
app
.
get
(
"/recommend"
)
# id_ticker_map = {str(info['id']): info for info in fund_infos}
async
def
root
():
# funds = json.loads(portfolio['portfolio'])
portfolio
=
get_today_rec
()
# rec_list = []
if
portfolio
:
# portfolios = {'recomm_guid': REC_GID}
fund_infos
=
get_fund_infos
()
# data = {'recomm_guid': REC_GID}
id_ticker_map
=
{
str
(
info
[
'id'
]):
info
for
info
in
fund_infos
}
# data['data_date'] = portfolio['date'].strftime('%Y-%m-%d')
funds
=
json
.
loads
(
portfolio
[
'portfolio'
])
# data['funds'] = [{'weight': round(weight * 100), 'fund_id': id_ticker_map[key]['ftTicker']} for key, weight in
rec_list
=
[]
# funds.items()]
portfolios
=
{
'recomm_guid'
:
REC_GID
}
# data['creat_date'] = portfolio['create_time'].strftime('%Y-%m-%d %H:%M:%S')
data
=
{
'recomm_guid'
:
REC_GID
}
# # todo 补全
data
[
'data_date'
]
=
portfolio
[
'date'
]
.
strftime
(
'
%
Y-
%
m-
%
d'
)
# data['cp'] = 0.81
data
[
'funds'
]
=
[{
'weight'
:
round
(
weight
*
100
),
'fund_id'
:
id_ticker_map
[
key
][
'ftTicker'
]}
for
key
,
weight
in
# data['rr'] = 0.81
funds
.
items
()]
# data['roi'] = 0.81
data
[
'creat_date'
]
=
portfolio
[
'create_time'
]
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
# data['risk'] = round(sum([id_ticker_map[key]['risk'] * weight for key, weight in funds.items()]), 2)
# todo 补全
# note = {}
data
[
'cp'
]
=
0.81
# sig = get_last_signal()
data
[
'rr'
]
=
0.81
# note['last_reg_reb'] = sig['date'].strftime('%Y-%m-%d')
data
[
'roi'
]
=
0.81
# data['note'] = json.dumps(note)
data
[
'risk'
]
=
round
(
sum
([
id_ticker_map
[
key
][
'risk'
]
*
weight
for
key
,
weight
in
funds
.
items
()]),
2
)
# portfolios['data'] = data
note
=
{}
# rec_list.append(portfolios)
sig
=
get_last_signal
()
# return rec_list
note
[
'last_reg_reb'
]
=
sig
[
'date'
]
.
strftime
(
'
%
Y-
%
m-
%
d'
)
# else:
data
[
'note'
]
=
json
.
dumps
(
note
)
# return {'msg': '当日投组未产生,待10:00后获取'}
portfolios
[
'data'
]
=
data
#
rec_list
.
append
(
portfolios
)
#
return
rec_list
# def start_robo():
else
:
# # 异常情况可以重启跑当天投组
return
{
'msg'
:
'当日投组未产生,待10:00后获取'
}
# current_time = dt.datetime.now()
# target_time = dt.time(10, 0)
# if current_time.time() > target_time:
def
start_robo
():
# main.start()
# 异常情况可以重启跑当天投组
#
current_time
=
dt
.
datetime
.
now
()
# # 开启定时任务,执行实盘
target_time
=
dt
.
time
(
10
,
0
)
# scheduler = BlockingScheduler()
if
current_time
.
time
()
>
target_time
:
# scheduler.add_job(main.start, 'cron', day_of_week='0-4', hour=10, minute=00)
main
.
start
()
# scheduler.start()
#
# 开启定时任务,执行实盘
#
scheduler
=
BlockingScheduler
()
# def start_web():
scheduler
.
add_job
(
main
.
start
,
'cron'
,
day_of_week
=
'0-4'
,
hour
=
10
,
minute
=
00
)
# uvicorn.run("robo_controller:app", reload=True, port=8080)
scheduler
.
start
()
#
#
# if __name__ == "__main__":
def
start_web
():
# # 开启一个进程执行start_robo()
uvicorn
.
run
(
"robo_controller:app"
,
reload
=
True
,
port
=
8080
)
# p1 = Process(target=start_robo)
# p1.start()
#
if
__name__
==
"__main__"
:
# # 启动进程2
# 开启一个进程执行start_robo()
# p2 = Process(target=start_web)
p1
=
Process
(
target
=
start_robo
)
# p2.start()
p1
.
start
()
# 启动进程2
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