Commit e331b42d authored by jichao's avatar jichao

增加危机1信号判断逻辑

parent 25fb8bff
......@@ -38,6 +38,8 @@ py-jftech:
injectable:
types:
api.PortfoliosBuilder: portfolios.builder.PoemPortfoliosBuilder
names:
crisis_one: rebalance.signals.crisis_signal.LastRateCrisisOneSignal
email:
server: smtphz.qiye.163.com
user: jft-ra@thizgroup.com
......@@ -145,6 +147,7 @@ rebalance: # 再平衡模块
crisis-1: # 危机1相关
mean-count: 850 # spx去多少交易日计算平均值
consecut-days: 5 # spx连续多少天跌破平均值则触发
threshold: -0.1 # spx计算后跌破阀值
crisis-2: # 危机2相关
negative-growth: 1 # 实际利率负增长时长,单位年,点到点取值
fed-months: 3 # fed 滚动月份,点到点取值
......
......@@ -58,8 +58,10 @@ class CrisisSignal(BaseRebalanceSignal, ABC):
@component(bean_name='crisis_one')
class CrisisOneSignal(CrisisSignal, BaseRebalanceSignal):
class ConsecutFiveDaysCrisisOneSignal(CrisisSignal, BaseRebalanceSignal):
'''
连续5个交易入跌破850天平均值
'''
@property
def consecut_days(self):
return self._config['crisis-1']['consecut-days']
......@@ -89,6 +91,36 @@ class CrisisOneSignal(CrisisSignal, BaseRebalanceSignal):
return False
@component(bean_name='crisis_one')
class LastRateCrisisOneSignal(CrisisSignal, BaseRebalanceSignal):
'''
(close / 850ma – 1) < threshold,threshold=-0.05、-0.1
'''
@property
def mean_count(self):
return self._config['crisis-1']['mean-count']
@property
def threshold(self):
return self._config['crisis-1']['threshold']
@property
def signal_type(self):
return SignalType.CRISIS_ONE
def is_trigger(self, day, risk: PortfoliosRisk) -> bool:
exp_date = self.get_exp_start_date(day, risk)
if exp_date:
crisis_one = rrs.get_first_after(type=SignalType.CRISIS_ONE, risk=risk, min_date=exp_date)
if not crisis_one:
spx = self._navs.get_last_index_close(max_date=day, ticker='SPX Index', count=self.mean_count)
spx = pd.DataFrame(spx)
spx.sort_values(by='date', inplace=True)
return spx.iloc[-1]['close'] / spx['close'].mean() - 1 < self.threshold
return False
@component(bean_name='crisis_two')
class CrisisTwoSignal(CrisisSignal, BaseRebalanceSignal):
......
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