Commit 0f0faaa9 authored by wenwen.tang's avatar wenwen.tang 😕

update

parent 10dcaa4c
......@@ -241,7 +241,7 @@ robo-executor: # 执行器相关
end-step: ${BACKTEST_END_STEP:3} # 回测从哪一步执行完成后结束执行 1:计算资产池;2:计算最优投组:3:计算再平衡信号以及持仓投组
clean-up: true
real: # 实盘执行器
export: ${EXPORT_ENABLE:on} # 是否开启报告
export: ${EXPORT_ENABLE:off} # 是否开启报告
start-date: 2023-05-08 # 实盘开始时间
include-date: []
......
......@@ -5,7 +5,6 @@ from api import RoboExecutor
@autowired(names={'executor': RoboExecutor.use_name()})
def start(executor: RoboExecutor = None):
print('开始')
executor.start_exec()
......
......@@ -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
......
......@@ -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.')
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 getTodayRec():
def get_today_rec():
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 = getTodayRec()
portfolio = get_today_rec()
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:30后获取'}
return {'msg': '当日投组未产生,待10:00后获取'}
def start_robo():
# 异常情况可以重启跑当天投组
current_time = datetime.datetime.now()
target_time = datetime.time(10, 15)
current_time = dt.datetime.now()
target_time = dt.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()
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