[Mod]remove CtaOrderType enum

This commit is contained in:
vn.py 2019-03-22 22:04:15 +08:00
parent ab929f196a
commit ec9a170ef3
4 changed files with 50 additions and 47 deletions

View File

@ -9,14 +9,14 @@ import matplotlib.pyplot as plt
import seaborn as sns
from pandas import DataFrame
from vnpy.trader.constant import Direction, Exchange, Interval, Status
from vnpy.trader.constant import (Direction, Offset, Exchange,
Interval, Status)
from vnpy.trader.database import DbBarData, DbTickData
from vnpy.trader.object import OrderData, TradeData
from vnpy.trader.utility import round_to_pricetick
from .base import (
BacktestingMode,
CtaOrderType,
EngineType,
ORDER_CTA2VT,
STOPORDER_PREFIX,
@ -718,7 +718,8 @@ class BacktestingEngine:
def send_order(
self,
strategy: CtaTemplate,
order_type: CtaOrderType,
direction: Direction,
offset: Offset,
price: float,
volume: float,
stop: bool = False,
@ -726,17 +727,24 @@ class BacktestingEngine:
""""""
price = round_to_pricetick(price, self.pricetick)
if stop:
return self.send_stop_order(order_type, price, volume)
return self.send_stop_order(direction, offset, price, volume)
else:
return self.send_limit_order(order_type, price, volume)
return self.send_limit_order(direction, offset, price, volume)
def send_stop_order(self, order_type: CtaOrderType, price: float, volume: float):
def send_stop_order(
self,
direction: Direction,
offset: Offset,
price: float,
volume: float
):
""""""
self.stop_order_count += 1
stop_order = StopOrder(
vt_symbol=self.vt_symbol,
order_type=order_type,
direction=direction,
offset=offset,
price=price,
volume=volume,
stop_orderid=f"{STOPORDER_PREFIX}.{self.stop_order_count}",
@ -748,11 +756,16 @@ class BacktestingEngine:
return stop_order.stop_orderid
def send_limit_order(self, order_type: CtaOrderType, price: float, volume: float):
def send_limit_order(
self,
direction: Direction,
offset: Offset,
price: float,
volume: float
):
""""""
self.limit_order_count += 1
direction, offset = ORDER_CTA2VT[order_type]
order = OrderData(
symbol=self.symbol,
exchange=self.exchange,

View File

@ -11,13 +11,6 @@ APP_NAME = "CtaStrategy"
STOPORDER_PREFIX = "STOP"
class CtaOrderType(Enum):
BUY = "买开"
SELL = "卖平"
SHORT = "卖开"
COVER = "买平"
class StopOrderStatus(Enum):
WAITING = "等待中"
CANCELLED = "已撤销"
@ -37,7 +30,8 @@ class BacktestingMode(Enum):
@dataclass
class StopOrder:
vt_symbol: str
order_type: CtaOrderType
direction: Direction
offset: Offset
price: float
volume: float
stop_orderid: str
@ -45,18 +39,8 @@ class StopOrder:
status: StopOrderStatus = StopOrderStatus.WAITING
vt_orderid: str = ""
def __post_init__(self):
""""""
self.direction, self.offset = ORDER_CTA2VT[self.order_type]
EVENT_CTA_LOG = "eCtaLog"
EVENT_CTA_STRATEGY = "eCtaStrategy"
EVENT_CTA_STOPORDER = "eCtaStopOrder"
ORDER_CTA2VT = {
CtaOrderType.BUY: (Direction.LONG, Offset.OPEN),
CtaOrderType.SELL: (Direction.SHORT, Offset.CLOSE),
CtaOrderType.SHORT: (Direction.SHORT, Offset.OPEN),
CtaOrderType.COVER: (Direction.LONG, Offset.CLOSE),
}

View File

@ -21,7 +21,7 @@ from vnpy.trader.object import (
BarData
)
from vnpy.trader.event import EVENT_TICK, EVENT_ORDER, EVENT_TRADE
from vnpy.trader.constant import Direction, OrderType, Interval, Exchange
from vnpy.trader.constant import Direction, OrderType, Interval, Exchange, Offset
from vnpy.trader.utility import load_json, save_json
from vnpy.trader.database import DbTickData, DbBarData
from vnpy.trader.setting import SETTINGS
@ -30,7 +30,6 @@ from .base import (
EVENT_CTA_LOG,
EVENT_CTA_STRATEGY,
EVENT_CTA_STOPORDER,
CtaOrderType,
EngineType,
StopOrder,
StopOrderStatus,
@ -233,7 +232,11 @@ class CtaEngine(BaseEngine):
price = tick.bid_price_5
vt_orderid = self.send_limit_order(
strategy, stop_order.order_type, price, stop_order.volume
strategy,
stop_order.direction,
stop_order.offset,
price,
stop_order.volume
)
# Update stop order status if placed successfully
@ -256,7 +259,8 @@ class CtaEngine(BaseEngine):
def send_limit_order(
self,
strategy: CtaTemplate,
order_type: CtaOrderType,
direction: Direction,
offset: Offset,
price: float,
volume: float,
):
@ -268,8 +272,6 @@ class CtaEngine(BaseEngine):
self.write_log(f"委托失败,找不到合约:{strategy.vt_symbol}", strategy)
return ""
direction, offset = ORDER_CTA2VT[order_type]
# Create request and send order.
req = OrderRequest(
symbol=contract.symbol,
@ -294,7 +296,8 @@ class CtaEngine(BaseEngine):
def send_stop_order(
self,
strategy: CtaTemplate,
order_type: CtaOrderType,
direction: Direction,
offset: Offset,
price: float,
volume: float,
):
@ -306,7 +309,8 @@ class CtaEngine(BaseEngine):
stop_order = StopOrder(
vt_symbol=strategy.vt_symbol,
order_type=order_type,
direction=direction,
offset=offset,
price=price,
volume=volume,
stop_orderid=stop_orderid,
@ -358,7 +362,8 @@ class CtaEngine(BaseEngine):
def send_order(
self,
strategy: CtaTemplate,
order_type: CtaOrderType,
direction: Direction,
offset: Offset,
price: float,
volume: float,
stop: bool,
@ -366,9 +371,9 @@ class CtaEngine(BaseEngine):
"""
"""
if stop:
return self.send_stop_order(strategy, order_type, price, volume)
return self.send_stop_order(strategy, direction, offset, price, volume)
else:
return self.send_limit_order(strategy, order_type, price, volume)
return self.send_limit_order(strategy, direction, offset, price, volume)
def cancel_order(self, strategy: CtaTemplate, vt_orderid: str):
"""

View File

@ -2,10 +2,10 @@
from abc import ABC
from typing import Any, Callable
from vnpy.trader.constant import Interval, Status
from vnpy.trader.constant import Interval, Status, Direction, Offset
from vnpy.trader.object import BarData, TickData, OrderData, TradeData
from .base import CtaOrderType, StopOrder, EngineType
from .base import StopOrder, EngineType
class CtaTemplate(ABC):
@ -139,29 +139,30 @@ class CtaTemplate(ABC):
"""
Send buy order to open a long position.
"""
return self.send_order(CtaOrderType.BUY, price, volume, stop)
return self.send_order(Direction.LONG, Offset.OPEN, price, volume, stop)
def sell(self, price: float, volume: float, stop: bool = False):
"""
Send sell order to close a long position.
"""
return self.send_order(CtaOrderType.SELL, price, volume, stop)
return self.send_order(Direction.SHORT, Offset.CLOSE, price, volume, stop)
def short(self, price: float, volume: float, stop: bool = False):
"""
Send short order to open as short position.
"""
return self.send_order(CtaOrderType.SHORT, price, volume, stop)
return self.send_order(Direction.SHORT, Offset.OPEN, price, volume, stop)
def cover(self, price: float, volume: float, stop: bool = False):
"""
Send cover order to close a short position.
"""
return self.send_order(CtaOrderType.COVER, price, volume, stop)
return self.send_order(Direction.LONG, Offset.CLOSE, price, volume, stop)
def send_order(
self,
order_type: CtaOrderType,
direction: Direction,
offset: Offset,
price: float,
volume: float,
stop: bool = False,
@ -171,7 +172,7 @@ class CtaTemplate(ABC):
"""
if self.trading:
vt_orderid = self.cta_engine.send_order(
self, order_type, price, volume, stop
self, direction, offset, price, volume, stop
)
else:
vt_orderid = ""