Commit 10dcaa4c authored by wenwen.tang's avatar wenwen.tang 😕

定时任务

parent 9d4c3c33
......@@ -5,6 +5,7 @@ from api import RoboExecutor
@autowired(names={'executor': RoboExecutor.use_name()})
def start(executor: RoboExecutor = None):
print('开始')
executor.start_exec()
......
......@@ -10,6 +10,7 @@ __COLUMNS__ = {
'rmp_rolve': 'solve',
'rmp_portfolio': 'portfolio',
'rmp_cvar': 'cvar',
'rmp_create_time': 'create_time'
}
......
......@@ -22,3 +22,4 @@ six==1.16.0
urllib3==1.26.12
fastapi==0.100.0
uvicorn==0.23.1
apscheduler==3.10.1
......@@ -134,7 +134,9 @@ class BacktestExecutor(RoboExecutor):
class RealExecutor(RoboExecutor):
@autowired(names={'daily_export': 'daily-real-export', 'monitor_export': 'daily-monitor-export',
'syncs': 'tw-navs-sync'})
# todo 上线用tw api
# 'syncs': 'tw-navs-sync'})
'syncs': 'navs-sync'})
def __init__(self, builder: PortfoliosBuilder = None, hold: PortfoliosHolder = None, syncs: List[DataSync] = None,
daily_export: RoboExportor = None, monitor_export: RoboExportor = None, pool: AssetPool = None,
signal: RebalanceSignal = None):
......
import json
from datetime import date as dt, datetime
from multiprocessing import Process
import uvicorn
from apscheduler.schedulers.blocking import BlockingScheduler
from fastapi import FastAPI
from py_jftech import prev_workday, filter_weekend
import main
from api import DatumType
from basic.datum import DefaultDatum
app = FastAPI()
REC_GID = 'E3886FBA-123B-7890-123E-123456BEEED'
def getTodayRec():
from portfolios.dao import robo_mpt_portfolios as rmp
from api import PortfoliosType, PortfoliosRisk
day = prev_workday(filter_weekend(dt.today()))
portfolio = rmp.get_one(day, PortfoliosType.NORMAL, PortfoliosRisk.FT3)
return portfolio
@app.get("/recommend")
async def root():
rec_list = []
portfolios = {'recomm_guid': REC_GID}
data = {'recomm_guid': REC_GID}
data['data_date'] = '2019-09-20'
data['funds'] = [
{'weight': '5', 'fund_id': '0152'}
]
portfolios['data'] = data
rec_list.append(portfolios)
return rec_list
portfolio = getTodayRec()
if portfolio:
fund_infos = DefaultDatum().get_datums(DatumType.FUND)
id_ticker_map = {str(info['id']): info for info in fund_infos}
funds = json.loads(portfolio['portfolio'])
rec_list = []
portfolios = {'recomm_guid': REC_GID}
data = {'recomm_guid': REC_GID}
data['data_date'] = portfolio['date'].strftime('%Y-%m-%d')
data['funds'] = [{'weight': round(weight * 100), 'fund_id': id_ticker_map[key]['ftTicker']} for key, weight in
funds.items()]
data['creat_date'] = portfolio['create_time'].strftime('%Y-%m-%d %H:%M:%S')
# todo 补全
data['cp'] = 0.81
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'] = '{}'
portfolios['data'] = data
rec_list.append(portfolios)
return rec_list
else:
return {'msg': '当日投组未产生,待10:30后获取'}
if __name__ == "__main__":
def start_robo():
# 异常情况可以重启跑当天投组
current_time = datetime.datetime.now()
target_time = datetime.time(10, 15)
if current_time.time() > target_time:
main.start()
# 开启定时任务,执行实盘
uvicorn.run("robo_controller:app", reload=True, port=8080)
scheduler = BlockingScheduler()
scheduler.add_job(main.start, 'cron', day_of_week='0-4', hour=10, minute=15)
scheduler.start()
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.start()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment