[Add] Add trader mainengine
This commit is contained in:
parent
ca8b5fa406
commit
ca14973b9a
83
vnpy/trader/engine.py
Normal file
83
vnpy/trader/engine.py
Normal file
@ -0,0 +1,83 @@
|
||||
"""
|
||||
"""
|
||||
|
||||
from vnpy.event import EventEngine, Event
|
||||
|
||||
from .event import EVENT_LOG
|
||||
from .object import LogData, SubscribeRequest, OrderRequest, CancelRequest
|
||||
|
||||
|
||||
class MainEngine:
|
||||
"""
|
||||
Acts as the core of VN Trader.
|
||||
"""
|
||||
|
||||
def __init__(self, event_engine: EventEngine = None):
|
||||
""""""
|
||||
if event_engine:
|
||||
self.event_engine = event_engine
|
||||
else:
|
||||
self.event_engine = EventEngine()
|
||||
self.event_engine.start()
|
||||
|
||||
self.gateways = {}
|
||||
self.apps = {}
|
||||
|
||||
def write_log(self, msg: str):
|
||||
"""
|
||||
Put log event with specific message.
|
||||
"""
|
||||
log = LogData(msg=msg)
|
||||
event = Event(EVENT_LOG, log)
|
||||
self.event_engine.put(event)
|
||||
|
||||
def get_gateway(gateway_name: str):
|
||||
"""
|
||||
Return gateway object by name.
|
||||
"""
|
||||
gateway = self.gateways.get(gateway_name, None)
|
||||
if not gateway:
|
||||
self.write_log(f"找不到底层接口:{gateway_name}")
|
||||
return gateway
|
||||
|
||||
def connect(self, gateway_name: str):
|
||||
"""
|
||||
Start connection of a specific gateway.
|
||||
"""
|
||||
gateway = self.get_gateway(gateway_name)
|
||||
if gateway:
|
||||
gateway.connect()
|
||||
|
||||
def subscribe(self, req: SubscribeRequest, gateway_name: str):
|
||||
"""
|
||||
Subscribe tick data update of a specific gateway.
|
||||
"""
|
||||
gateway = self.get_gateway(gateway_name)
|
||||
if gateway:
|
||||
gateway.subscribe(req)
|
||||
|
||||
def send_order(self, req: OrderRequest, gateway_name: str):
|
||||
"""
|
||||
Send new order request to a specific gateway.
|
||||
"""
|
||||
gateway = self.get_gateway(gateway_name)
|
||||
if gateway:
|
||||
gateway.send_order(req)
|
||||
|
||||
def cancel_order(self, req: CancelRequest, gateway_name: str):
|
||||
"""
|
||||
Send cancel order request to a specific gateway.
|
||||
"""
|
||||
gateway = self.get_gateway(gateway_name)
|
||||
if gateway:
|
||||
gateway.send_order(req)
|
||||
|
||||
def close(self):
|
||||
"""
|
||||
Make sure every gateway and app is closed properly before
|
||||
programme exit.
|
||||
"""
|
||||
for gateway in self.gateways.values():
|
||||
gateway.close()
|
||||
|
||||
self.event_engine.stop()
|
Loading…
Reference in New Issue
Block a user