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

定时任务

parent 9d4c3c33
...@@ -5,6 +5,7 @@ from api import RoboExecutor ...@@ -5,6 +5,7 @@ from api import RoboExecutor
@autowired(names={'executor': RoboExecutor.use_name()}) @autowired(names={'executor': RoboExecutor.use_name()})
def start(executor: RoboExecutor = None): def start(executor: RoboExecutor = None):
print('开始')
executor.start_exec() executor.start_exec()
......
...@@ -10,6 +10,7 @@ __COLUMNS__ = { ...@@ -10,6 +10,7 @@ __COLUMNS__ = {
'rmp_rolve': 'solve', 'rmp_rolve': 'solve',
'rmp_portfolio': 'portfolio', 'rmp_portfolio': 'portfolio',
'rmp_cvar': 'cvar', 'rmp_cvar': 'cvar',
'rmp_create_time': 'create_time'
} }
......
...@@ -22,3 +22,4 @@ six==1.16.0 ...@@ -22,3 +22,4 @@ six==1.16.0
urllib3==1.26.12 urllib3==1.26.12
fastapi==0.100.0 fastapi==0.100.0
uvicorn==0.23.1 uvicorn==0.23.1
apscheduler==3.10.1
...@@ -134,7 +134,9 @@ class BacktestExecutor(RoboExecutor): ...@@ -134,7 +134,9 @@ class BacktestExecutor(RoboExecutor):
class RealExecutor(RoboExecutor): class RealExecutor(RoboExecutor):
@autowired(names={'daily_export': 'daily-real-export', 'monitor_export': 'daily-monitor-export', @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, def __init__(self, builder: PortfoliosBuilder = None, hold: PortfoliosHolder = None, syncs: List[DataSync] = None,
daily_export: RoboExportor = None, monitor_export: RoboExportor = None, pool: AssetPool = None, daily_export: RoboExportor = None, monitor_export: RoboExportor = None, pool: AssetPool = None,
signal: RebalanceSignal = None): signal: RebalanceSignal = None):
......
import json
from datetime import date as dt, datetime
from multiprocessing import Process
import uvicorn import uvicorn
from apscheduler.schedulers.blocking import BlockingScheduler
from fastapi import FastAPI 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() app = FastAPI()
REC_GID = 'E3886FBA-123B-7890-123E-123456BEEED' 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") @app.get("/recommend")
async def root(): async def root():
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 = [] rec_list = []
portfolios = {'recomm_guid': REC_GID} portfolios = {'recomm_guid': REC_GID}
data = {'recomm_guid': REC_GID} data = {'recomm_guid': REC_GID}
data['data_date'] = '2019-09-20' data['data_date'] = portfolio['date'].strftime('%Y-%m-%d')
data['funds'] = [ data['funds'] = [{'weight': round(weight * 100), 'fund_id': id_ticker_map[key]['ftTicker']} for key, weight in
{'weight': '5', 'fund_id': '0152'} 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 portfolios['data'] = data
rec_list.append(portfolios) rec_list.append(portfolios)
return rec_list 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