MCPcopy Create free account
hub / github.com/shidenggui/easyquant / ClockEngine

Class ClockEngine

easyquant/push_engine/clock_engine.py:105–238  ·  view source on GitHub ↗

时间推送引擎 1. 提供统一的 now 时间戳.

Source from the content-addressed store, hash-verified

103
104
105class ClockEngine:
106 """
107 时间推送引擎
108 1. 提供统一的 now 时间戳.
109 """
110 EventType = 'clock_tick'
111
112 def __init__(self, event_engine, tzinfo=None):
113 """
114 :param event_engine:
115 :param event_engine: tzinfo
116 :return:
117 """
118 # 默认使用当地时间的时区
119 self.tzinfo = tzinfo or tz.tzlocal()
120
121 self.event_engine = event_engine
122 self.is_active = True
123 self.clock_engine_thread = Thread(target=self.clocktick, name="ClockEngine.clocktick")
124 self.sleep_time = 1
125 self.trading_state = True if (etime.is_tradetime(datetime.datetime.now()) and etime.is_trade_date(datetime.datetime.now())) else False
126 self.clock_moment_handlers = deque()
127 self.clock_interval_handlers = set()
128
129 self._init_clock_handler()
130
131 def _init_clock_handler(self):
132 """
133 注册默认的时钟事件
134 :return:
135 """
136
137 # 开盘事件
138 def _open():
139 self.trading_state = True
140
141 self._register_moment('open', datetime.time(9, tzinfo=self.tzinfo), makeup=True, call=_open)
142
143 # 中午休市
144 self._register_moment('pause', datetime.time(11, 30, tzinfo=self.tzinfo), makeup=True)
145
146 # 下午开盘
147 self._register_moment('continue', datetime.time(13, tzinfo=self.tzinfo), makeup=True)
148
149 # 收盘事件
150 def close():
151 self.trading_state = False
152
153 self._register_moment('close', datetime.time(15, tzinfo=self.tzinfo), makeup=True, call=close)
154
155 # 间隔事件
156 for interval in (0.5, 1, 5, 15, 30, 60):
157 self.register_interval(interval)
158
159 @property
160 def now(self):
161 """
162 now 时间戳统一接口

Callers 2

test_set_nowMethod · 0.90
__init__Method · 0.85

Calls

no outgoing calls

Tested by 1

test_set_nowMethod · 0.72