MCPcopy Create free account
hub / github.com/QuantFans/quantdigger / ExecuteUnit

Class ExecuteUnit

quantdigger/kernel/engine/execute_unit.py:8–115  ·  view source on GitHub ↗

策略执行的物理单元,支持多个策略同时运行。 每个执行单元都可能跟踪多个数据(策略用到的周期合约数据集合)。 其中第一个合约为"主合约" 。 每个执行器可加载多个策略,只要数据需求不超过pcontracts。 :ivar begin_dt: 策略执行的时间起点。 :vartype begin_dt: datetime :ivar end_dt: 策略执行的时间终点。 :vartype end_dt: datetime :ivar pcontracts: 策略用到的周期合约数据集合。

Source from the content-addressed store, hash-verified

6from quantdigger.kernel.engine.strategy import BarTracker
7from quantdigger.kernel.engine.event import Event
8class ExecuteUnit(object):
9 """ 策略执行的物理单元,支持多个策略同时运行。
10 每个执行单元都可能跟踪多个数据(策略用到的周期合约数据集合)。
11 其中第一个合约为"主合约" 。 每个执行器可加载多个策略,只要数据需求不超过pcontracts。
12
13 :ivar begin_dt: 策略执行的时间起点。
14 :vartype begin_dt: datetime
15 :ivar end_dt: 策略执行的时间终点。
16 :vartype end_dt: datetime
17 :ivar pcontracts: 策略用到的周期合约数据集合。
18 :vartype pcontracts: list
19 :ivar trackers: 策略用到的跟踪器集合。(和周期合约一一对应)
20 :vartype trackers: list
21 :ivar _strategies: 策略集合。
22 :vartype _strategies: list
23
24 """
25 def __init__(self, pcontracts, begin_dt=None, end_dt=None):
26 self.begin_dt = begin_dt
27 self.end_dt = end_dt
28 # 不同周期合约数据。
29 self.data = { } # PContract -> pandas.DataFrame
30 self.pcontracts = pcontracts
31 self.trackers = []
32 self._strategies = []
33
34 # 如果begin_dt, end_dt 等于None,做特殊处理。
35 # accociate with a mplot widget
36 #tracker.pcontracts
37
38 self.load_data(pcontracts[0])
39 # 每个周期合约对应一个跟跟踪器。
40 for pcon in pcontracts[1:]:
41 self.load_data(pcon)
42 BarTracker(self, pcon)
43
44 def run(self):
45 """"""
46 print 'running...'
47 bar_index = 0
48 while bar_index < self._data_length:
49 #
50 latest_bars = { }
51 for tracker in self.trackers:
52 bar = tracker.update_curbar(bar_index)
53 latest_bars[tracker._main_contract] = bar
54 # 在回测中无需MARKET事件。
55 # 这样可以加速回测速度。
56 for algo in self._strategies:
57 bar = algo.update_curbar(bar_index)
58 algo.exchange.update_datetime(bar.datetime)
59 algo.blotter.update_datetime(bar.datetime)
60 latest_bars[algo._main_contract] = bar
61 algo.blotter.update_bar(latest_bars)
62 #algo.exchange.make_market(bar)
63 # 对新的价格运行算法。
64 algo.execute_strategy()
65 while True:

Callers 1

main.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected