Commit 59b8888b authored by jichao's avatar jichao

调整信号规则逻辑

parent 4e6eca43
......@@ -157,7 +157,7 @@ rebalance: # 再平衡模块
fed-threshold: -0.75 # fed判断阀值
right-side: # 市场右侧相关
rtn-days: 5 # 计算spx回报率滚动天数,交易日
min-threshold: -0.05 # spx回报率跌破阀值
min-threshold: -0.03 # spx回报率跌破阀值
coef: 0.95 # 计算cvar的系数
cvar-min-volume: 30 # 计算cvar至少需要多少交易日数据
high-low-buy: # 高低买入相关
......@@ -214,7 +214,7 @@ reports: # 报告模块相关
backtest: # 回测导出曹策略
exist-build: on # 如果报告文件存在,是否重新构建文件
save-path: ${EXPORT_PATH:excels} # 导出报告文件存放路径,如果以./或者../开头,则会以执行python文件为根目录,如果以/开头,则为系统绝对路径,否则,以项目目录为根目录
file-name: ${EXPORT_FILENAME:24111}
file-name: ${EXPORT_FILENAME:13211}
include-report: # 需要导出的报告类型列表,下面的顺序,也代表了excel中sheet的顺序
# - funds-report # 基金资料
# - navs-report # 净值报告
......
......@@ -56,24 +56,24 @@ class LevelRebalanceRuler(RebalanceRuler):
last_signal = rrs.get_last_one(max_date=day, risk=risk)
start = next_workday(last_signal['date'])
signals = {}
while start <= day:
# 检查风控信号
signals = {x.signal_type: x.get_signal(start, risk) for x in risk_signals if x.signal_type.level <= SignalType(last_re['type']).level}
signals = {x[0]: x[1] for x in signals.items() if x[1] is not None}
# 上次实际调仓类型为危机信号,本次危机信号不调仓
if signals and SignalType(last_re['type']) in [SignalType.CRISIS_ONE, SignalType.CRISIS_TWO]:
signals = {x[0]: x[1] for x in signals.items() if x[0] not in [SignalType.CRISIS_ONE, SignalType.CRISIS_TWO]}
# 检查买入信号,只有当天需要检查
if not signals and start == day and self.without_disable_period(day, risk):
signals = {x.signal_type: x.get_signal(start, risk) for x in buy_signals}
signals = {x[0]: x[1] for x in signals.items() if x[1] is not None}
if signals:
if SignalType(last_signal['type']) is SignalType.NONE:
rrs.delete_by_id(last_signal['id'])
return signals[sorted(signals.keys(), key=lambda x: x.level)[0]]
today_signals = {x.signal_type: x.get_signal(start, risk) for x in risk_signals if x.signal_type.level <= SignalType(last_re['type']).level}
today_signals = {x[0]: x[1] for x in today_signals.items() if x[1] is not None}
signals = {**signals, **today_signals}
start = next_workday(start)
# 上次实际调仓类型为危机信号,本次危机信号不调仓
if signals and SignalType(last_re['type']) in [SignalType.CRISIS_ONE, SignalType.CRISIS_TWO]:
signals = {x[0]: x[1] for x in signals.items() if x[0] not in [SignalType.CRISIS_ONE, SignalType.CRISIS_TWO]}
# 检查买入信号,只有当天需要检查
if not signals and self.without_disable_period(day, risk):
signals = {x.signal_type: x.get_signal(start, risk) for x in buy_signals}
signals = {x[0]: x[1] for x in signals.items() if x[1] is not None}
if signals:
if SignalType(last_signal['type']) is SignalType.NONE:
rrs.delete_by_id(last_signal['id'])
return signals[sorted(signals.keys(), key=lambda x: x.level)[0]]
if SignalType(last_signal['type']) is SignalType.NONE:
rrs.update(last_signal['id'], {'date': day})
else:
......
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