Merge pull request #1568 from nanoric/virtual_decorator

[Add] virtual decorator
This commit is contained in:
vn.py 2019-04-08 18:12:51 +08:00 committed by GitHub
commit c093c46c76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 0 deletions

View File

@ -1,6 +1,7 @@
from vnpy.trader.engine import BaseEngine from vnpy.trader.engine import BaseEngine
from vnpy.trader.object import TickData, OrderData, TradeData from vnpy.trader.object import TickData, OrderData, TradeData
from vnpy.trader.constant import OrderType, Offset, Direction from vnpy.trader.constant import OrderType, Offset, Direction
from vnpy.trader.utility import virtual
class AlgoTemplate: class AlgoTemplate:
@ -63,22 +64,27 @@ class AlgoTemplate:
"""""" """"""
pass pass
@virtual
def on_stop(self): def on_stop(self):
"""""" """"""
pass pass
@virtual
def on_tick(self, tick: TickData): def on_tick(self, tick: TickData):
"""""" """"""
pass pass
@virtual
def on_order(self, order: OrderData): def on_order(self, order: OrderData):
"""""" """"""
pass pass
@virtual
def on_trade(self, trade: TradeData): def on_trade(self, trade: TradeData):
"""""" """"""
pass pass
@virtual
def on_timer(self): def on_timer(self):
"""""" """"""
pass pass

View File

@ -4,6 +4,7 @@ from typing import Any, Callable
from vnpy.trader.constant import Interval, Direction, Offset from vnpy.trader.constant import Interval, Direction, Offset
from vnpy.trader.object import BarData, TickData, OrderData, TradeData from vnpy.trader.object import BarData, TickData, OrderData, TradeData
from vnpy.trader.utility import virtual
from .base import StopOrder, EngineType from .base import StopOrder, EngineType
@ -87,48 +88,56 @@ class CtaTemplate(ABC):
} }
return strategy_data return strategy_data
@virtual
def on_init(self): def on_init(self):
""" """
Callback when strategy is inited. Callback when strategy is inited.
""" """
pass pass
@virtual
def on_start(self): def on_start(self):
""" """
Callback when strategy is started. Callback when strategy is started.
""" """
pass pass
@virtual
def on_stop(self): def on_stop(self):
""" """
Callback when strategy is stopped. Callback when strategy is stopped.
""" """
pass pass
@virtual
def on_tick(self, tick: TickData): def on_tick(self, tick: TickData):
""" """
Callback of new tick data update. Callback of new tick data update.
""" """
pass pass
@virtual
def on_bar(self, bar: BarData): def on_bar(self, bar: BarData):
""" """
Callback of new bar data update. Callback of new bar data update.
""" """
pass pass
@virtual
def on_trade(self, trade: TradeData): def on_trade(self, trade: TradeData):
""" """
Callback of new trade data update. Callback of new trade data update.
""" """
pass pass
@virtual
def on_order(self, order: OrderData): def on_order(self, order: OrderData):
""" """
Callback of new order data update. Callback of new order data update.
""" """
pass pass
@virtual
def on_stop_order(self, stop_order: StopOrder): def on_stop_order(self, stop_order: StopOrder):
""" """
Callback of stop order update. Callback of stop order update.
@ -255,12 +264,14 @@ class CtaSignal(ABC):
"""""" """"""
self.signal_pos = 0 self.signal_pos = 0
@virtual
def on_tick(self, tick: TickData): def on_tick(self, tick: TickData):
""" """
Callback of new tick data update. Callback of new tick data update.
""" """
pass pass
@virtual
def on_bar(self, bar: BarData): def on_bar(self, bar: BarData):
""" """
Callback of new bar data update. Callback of new bar data update.
@ -292,6 +303,7 @@ class TargetPosTemplate(CtaTemplate):
) )
self.variables.append("target_pos") self.variables.append("target_pos")
@virtual
def on_tick(self, tick: TickData): def on_tick(self, tick: TickData):
""" """
Callback of new tick data update. Callback of new tick data update.
@ -301,12 +313,14 @@ class TargetPosTemplate(CtaTemplate):
if self.trading: if self.trading:
self.trade() self.trade()
@virtual
def on_bar(self, bar: BarData): def on_bar(self, bar: BarData):
""" """
Callback of new bar data update. Callback of new bar data update.
""" """
self.last_bar = bar self.last_bar = bar
@virtual
def on_order(self, order: OrderData): def on_order(self, order: OrderData):
""" """
Callback of new order data update. Callback of new order data update.

View File

@ -385,3 +385,14 @@ class ArrayManager(object):
if array: if array:
return up, down return up, down
return up[-1], down[-1] return up[-1], down[-1]
def virtual(func: "callable"):
"""
mark a function as "virtual", which means that this function can be override.
any base class should use this or @abstractmethod to decorate all functions
that can be (re)implemented by subclasses.
"""
return func