From 5a9dfa747d4b6e1441d84deddc58386fd6111186 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sat, 14 Sep 2019 11:06:08 +0800 Subject: [PATCH 01/41] [Add] new spread trading app --- vnpy/app/spread_trading/__init__.py | 17 +++++++++++++++++ vnpy/app/spread_trading/engine.py | 13 +++++++++++++ vnpy/app/spread_trading/ui/__init__.py | 1 + vnpy/app/spread_trading/ui/spread.ico | Bin 0 -> 67646 bytes vnpy/app/spread_trading/ui/widget.py | 25 +++++++++++++++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 vnpy/app/spread_trading/__init__.py create mode 100644 vnpy/app/spread_trading/engine.py create mode 100644 vnpy/app/spread_trading/ui/__init__.py create mode 100644 vnpy/app/spread_trading/ui/spread.ico create mode 100644 vnpy/app/spread_trading/ui/widget.py diff --git a/vnpy/app/spread_trading/__init__.py b/vnpy/app/spread_trading/__init__.py new file mode 100644 index 00000000..7ff1bf13 --- /dev/null +++ b/vnpy/app/spread_trading/__init__.py @@ -0,0 +1,17 @@ +from pathlib import Path + +from vnpy.trader.app import BaseApp + +from .engine import SpreadEngine, APP_NAME + + +class AlgoTradingApp(BaseApp): + """""" + + app_name = APP_NAME + app_module = __module__ + app_path = Path(__file__).parent + display_name = "价差交易" + engine_class = SpreadEngine + widget_name = "SpreadManager" + icon_name = "spread.ico" diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py new file mode 100644 index 00000000..1e4584b9 --- /dev/null +++ b/vnpy/app/spread_trading/engine.py @@ -0,0 +1,13 @@ + +from vnpy.event import EventEngine, Event +from vnpy.trader.engine import BaseEngine, MainEngine + +APP_NAME = "SpreadTrading" + + +class SpreadEngine(BaseEngine): + """""" + + def __init__(self, main_engine: MainEngine, event_engine: EventEngine): + """Constructor""" + super().__init__(main_engine, event_engine, APP_NAME) diff --git a/vnpy/app/spread_trading/ui/__init__.py b/vnpy/app/spread_trading/ui/__init__.py new file mode 100644 index 00000000..c7639754 --- /dev/null +++ b/vnpy/app/spread_trading/ui/__init__.py @@ -0,0 +1 @@ +from .widget import SpreadManager diff --git a/vnpy/app/spread_trading/ui/spread.ico b/vnpy/app/spread_trading/ui/spread.ico new file mode 100644 index 0000000000000000000000000000000000000000..05b3d571bd19802b6fa8529759d887b4f1639811 GIT binary patch literal 67646 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 Date: Sat, 14 Sep 2019 13:20:09 +0800 Subject: [PATCH 02/41] [Add] spread price and pos calculation --- vnpy/app/spread_trading/base.py | 156 ++++++++++++++++++++++++++++++ vnpy/app/spread_trading/engine.py | 145 +++++++++++++++++++++++++++ 2 files changed, 301 insertions(+) create mode 100644 vnpy/app/spread_trading/base.py diff --git a/vnpy/app/spread_trading/base.py b/vnpy/app/spread_trading/base.py new file mode 100644 index 00000000..574dc9b9 --- /dev/null +++ b/vnpy/app/spread_trading/base.py @@ -0,0 +1,156 @@ +from typing import Dict, List +from math import floor, ceil +from datetime import datetime + +from vnpy.trader.object import TickData, PositionData +from vnpy.trader.constant import Direction + + +class LegData: + """""" + + def __init__( + self, + vt_symbol: str, + price_multiplier: float, + trading_multiplier: float + ): + """""" + self.vt_symbol: str = vt_symbol + + # For calculating spread price + self.price_multiplier: float = price_multiplier + + # For calculating spread pos and sending orders + self.trading_multiplier: float = trading_multiplier + + # Price and position data + self.bid_price: float = 0 + self.ask_price: float = 0 + self.bid_volume: float = 0 + self.ask_volume: float = 0 + + self.long_pos: float = 0 + self.short_pos: float = 0 + self.net_pos: float = 0 + + def update_tick(self, tick: TickData): + """""" + self.bid_price = tick.bid_price_1 + self.ask_price = tick.ask_price_1 + self.bid_volume = tick.bid_volume_1 + self.ask_volume = tick.ask_volume_1 + + def update_position(self, position: PositionData): + """""" + if position.direction == Direction.NET: + self.net_pos = position.volume + else: + if position.direction == Direction.LONG: + self.long_pos = position.volume + else: + self.short_pos = position.volume + self.net_pos = self.long_pos - self.short_pos + + +class SpreadData: + """""" + + def __init__( + self, + name: str, + legs: List[LegData], + active_symbol: str + ): + """""" + self.name: str = name + + self.legs: Dict[str, LegData] = {} + self.active_leg: LegData = None + self.passive_legs: List[LegData] = [] + + for leg in legs: + self.legs[leg.vt_symbol] = leg + if leg.vt_symbol == active_symbol: + self.active_leg = leg + else: + self.passive_legs.append(leg) + + # Spread data + self.bid_price: float = 0 + self.ask_price: float = 0 + self.bid_volume: float = 0 + self.ask_volume: float = 0 + + self.net_pos: float = 0 + self.datetime: datetime = None + + def calculate_price(self): + """""" + self.clear_price() + + # Go through all legs to calculate price + for n, leg in enumerate(self.legs.values()): + # Filter not all leg price data has been received + if not leg.bid_volume or not leg.ask_volume: + self.clear_price() + return + + # Calculate price + if leg.price_multiplier > 0: + self.bid_price += leg.bid_price * leg.price_multiplier + self.ask_price += leg.ask_price * leg.price_multiplier + else: + self.bid_price += leg.ask_price * leg.price_multiplier + self.ask_price += leg.bid_price * leg.price_multiplier + + # Calculate volume + if leg.trading_multiplier > 0: + adjusted_bid_volume = floor( + leg.bid_volume / leg.trading_multiplier) + adjusted_ask_volume = floor( + leg.ask_volume / leg.trading_multiplier) + else: + adjusted_bid_volume = floor( + leg.ask_volume / abs(leg.trading_multiplier)) + adjusted_ask_volume = floor( + leg.bid_volume / abs(leg.trading_multiplier)) + + # For the first leg, just initialize + if not n: + self.bid_volume = adjusted_bid_volume + self.ask_volume = adjusted_ask_volume + # For following legs, use min value of each leg quoting volume + else: + self.bid_volume = min(self.bid_volume, adjusted_bid_volume) + self.ask_volume = min(self.ask_volume, adjusted_ask_volume) + + # Update calculate time + self.datetime = datetime.now() + + def calculate_pos(self): + """""" + self.net_pos = 0 + + for n, leg in enumerate(self.legs.values()): + adjusted_net_pos = leg.net_pos / leg.trading_multiplier + + if adjusted_net_pos > 0: + adjusted_net_pos = floor(adjusted_net_pos) + else: + adjusted_net_pos = ceil(adjusted_net_pos) + + if not n: + self.net_pos = adjusted_net_pos + else: + if adjusted_net_pos > 0: + self.net_pos = min(self.net_pos, adjusted_net_pos) + else: + self.net_pos = max(self.net_pos, adjusted_net_pos) + + def clear_price(self): + """""" + self.bid_price = 0 + self.ask_price = 0 + self.bid_volume = 0 + self.ask_volume = 0 diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 1e4584b9..5ad45241 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -1,6 +1,13 @@ +from typing import List, Dict +from collections import defaultdict from vnpy.event import EventEngine, Event from vnpy.trader.engine import BaseEngine, MainEngine +from vnpy.trader.event import EVENT_TICK, EVENT_POSITION +from vnpy.trader.utility import load_json, save_json + +from .base import LegData, SpreadData + APP_NAME = "SpreadTrading" @@ -11,3 +18,141 @@ class SpreadEngine(BaseEngine): def __init__(self, main_engine: MainEngine, event_engine: EventEngine): """Constructor""" super().__init__(main_engine, event_engine, APP_NAME) + + def write_log(self, msg: str): + """""" + pass + + +class SpreadDataEngine: + """""" + setting_filename = "spread_trading_setting.json" + + def __init__(self, spread_engine: SpreadEngine): + """""" + self.spread_engine: SpreadEngine = spread_engine + self.main_engine: MainEngine = spread_engine.main_engine + self.event_engine: EventEngine = spread_engine.event_engine + + self.write_log = spread_engine.write_log + + self.legs: Dict[str, LegData] = {} # vt_symbol: leg + self.spreads: Dict[str, SpreadData] = {} # name: spread + self.symbol_spread_map: Dict[str, List[SpreadData]] = defaultdict(list) + + self.load_setting() + self.register_event() + + def load_setting(self): + """""" + setting = load_json(self.setting_filename) + + for spread_setting in setting: + self.add_spread( + spread_setting["name"], + spread_setting["leg_settings"], + spread_setting["active_symbol"], + save=False + ) + + def save_setting(self): + """""" + setting = [] + + for spread in self.spreads.values(): + leg_settings = [] + for leg in spread.legs: + leg_setting = { + "vt_symbol": leg.vt_symbol, + "price_multiplier": leg.price_multiplier, + "trading_multiplier": leg.trading_multiplier + } + leg_settings.append(leg_setting) + + spread_setting = { + "name": spread.name, + "leg_settings": leg_settings, + "active_symbol": spread.active_leg.vt_symbol + } + setting.append(spread_setting) + + save_json(self.setting_filename, setting) + + def register_event(self): + """""" + self.event_engine.register(EVENT_TICK, self.process_tick_event) + self.event_engine.register(EVENT_POSITION, self.process_position_event) + + def process_tick_event(self, event: Event): + """""" + tick = event.data + + leg = self.legs.get(tick.vt_symbol, None) + if not leg: + return + leg.update_tick(tick) + + for spread in self.symbol_spread_map[tick.vt_symbol]: + spread.calculate_price() + + def process_position_event(self, event: Event): + """""" + position = event.data + + leg = self.legs.get(position.vt_symbol, None) + if not leg: + return + leg.update_position(position) + + for spread in self.symbol_spread_map[position.vt_symbol]: + spread.calculate_pos() + + def add_spread( + self, + name: str, + leg_settings: List[Dict], + active_symbol: str, + save: bool = True + ): + """""" + if name in self.spreads: + self.write_log("价差创建失败,名称重复:{}".format(name)) + return + + legs: List[LegData] = [] + for leg_setting in leg_settings: + vt_symbol = leg_setting["vt_symbol"] + + leg = self.legs.get(vt_symbol, None) + if not leg: + leg = LegData( + vt_symbol, + leg_setting["price_multiplier"], + leg_setting["trading_multiplier"] + ) + self.legs[vt_symbol] = leg + + legs.append(leg) + + spread = SpreadData(name, legs, active_symbol) + self.spreads[name] = spread + + for leg in spread.legs: + self.symbol_spread_map[leg.vt_symbol].append(spread) + + if save: + self.save_setting() + + self.write_log("价差创建成功:{}".format(name)) + + def remove_spread(self, name: str): + """""" + if name not in self.spreads: + return + + spread = self.spreads.pop(name) + + for leg in spread.legs: + self.symbol_spread_map[leg.vt_symbol].remove(spread) + + self.write_log("价差删除成功:{}".format(name)) From 0ee582a12efcda1b27f7df058641b9abb6161f4a Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sat, 14 Sep 2019 14:39:24 +0800 Subject: [PATCH 03/41] [Mod] move OffsetConverter module to vnpy.trader --- vnpy/app/cta_strategy/engine.py | 2 +- vnpy/{app/cta_strategy => trader}/converter.py | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename vnpy/{app/cta_strategy => trader}/converter.py (100%) diff --git a/vnpy/app/cta_strategy/engine.py b/vnpy/app/cta_strategy/engine.py index 5245faca..c4622fc2 100644 --- a/vnpy/app/cta_strategy/engine.py +++ b/vnpy/app/cta_strategy/engine.py @@ -38,6 +38,7 @@ from vnpy.trader.constant import ( from vnpy.trader.utility import load_json, save_json, extract_vt_symbol, round_to from vnpy.trader.database import database_manager from vnpy.trader.rqdata import rqdata_client +from vnpy.trader.converter import OffsetConverter from .base import ( APP_NAME, @@ -50,7 +51,6 @@ from .base import ( STOPORDER_PREFIX ) from .template import CtaTemplate -from .converter import OffsetConverter STOP_STATUS_MAP = { diff --git a/vnpy/app/cta_strategy/converter.py b/vnpy/trader/converter.py similarity index 100% rename from vnpy/app/cta_strategy/converter.py rename to vnpy/trader/converter.py From 0f4402833db6852060ead54919070c111197c784 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sat, 14 Sep 2019 15:57:27 +0800 Subject: [PATCH 04/41] [Add] template for spreading algo --- vnpy/app/spread_trading/engine.py | 41 ++++++ vnpy/app/spread_trading/template.py | 189 ++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 vnpy/app/spread_trading/template.py diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 5ad45241..c1e9d84b 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -5,6 +5,7 @@ from vnpy.event import EventEngine, Event from vnpy.trader.engine import BaseEngine, MainEngine from vnpy.trader.event import EVENT_TICK, EVENT_POSITION from vnpy.trader.utility import load_json, save_json +from vnpy.trader.object import TickData, ContractData from .base import LegData, SpreadData @@ -156,3 +157,43 @@ class SpreadDataEngine: self.symbol_spread_map[leg.vt_symbol].remove(spread) self.write_log("价差删除成功:{}".format(name)) + + +class SpreadAlgoEngine: + """""" + + def __init__(self, spread_engine: SpreadEngine): + """""" + self.spread_engine: SpreadEngine = spread_engine + self.main_engine: MainEngine = spread_engine.main_engine + self.event_engine: EventEngine = spread_engine.event_engine + + self.write_log = spread_engine.write_log + + def put_event(self, algo) -> None: + """""" + pass + + def send_order( + self, + algo, + vt_symbol, + price, + volume, + direction, + offset + ) -> List[str]: + """""" + pass + + def cancel_order(self, algo, vt_orderid) -> None: + """""" + pass + + def get_tick(self, vt_symbol: str) -> TickData: + """""" + return self.main_engine.get_tick(vt_symbol) + + def get_contract(self, vt_symbol: str) -> ContractData: + """""" + return self.main_engine.get_contract(vt_symbol) diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py new file mode 100644 index 00000000..16c81924 --- /dev/null +++ b/vnpy/app/spread_trading/template.py @@ -0,0 +1,189 @@ + +from collections import defaultdict +from typing import Dict, List +from math import floor, ceil + +from vnpy.trader.object import TickData, TradeData, OrderData, ContractData +from vnpy.trader.constant import Direction, Status, Offset +from vnpy.trader.utility import virtual + +from .base import SpreadData +from .engine import SpreadAlgoEngine + + +class SpreadAlgoTemplate: + """ + Template for writing spread trading algos. + """ + algo_name = "AlgoTemplate" + + def __init__( + self, + algo_engine: SpreadAlgoEngine, + algoid: str, + spread: SpreadData, + direction: Direction, + price: float, + volume: float, + payup: int + ): + """""" + self.algo_engine: SpreadAlgoEngine = algo_engine + self.algoid: str = algoid + self.spread: SpreadData = spread + + self.direction: Direction = direction + self.price: float = price + self.volume: float = volume + self.payup: int = payup + + if direction == Direction.LONG: + self.target = volume + else: + self.target = -volume + + self.status: Status = Status.NOTTRADED + self.traded: float = 0 + + self.leg_traded: Dict[str, float] = defaultdict(int) + self.leg_orders: Dict[str, List[str]] = defaultdict[list] + + def is_active(self): + """""" + if self.status not in [Status.CANCELLED, Status.ALLTRADED]: + return True + else: + return False + + def stop(self): + """""" + if self.is_active(): + self.cancel_leg_order() + self.status = Status.CANCELLED + self.put_event() + + def update_tick(self, tick: TickData): + """""" + self.on_tick(tick) + + def update_trade(self, trade: TradeData): + """""" + if trade.direction == Direction.LONG: + self.leg_traded[trade.vt_symbol] += trade.volume + else: + self.leg_traded[trade.vt_symbol] -= trade.volume + + self.calculate_traded() + + self.on_trade(trade) + + def update_order(self, order: OrderData): + """""" + if not order.is_active(): + self.leg_orders[order.vt_symbol].remove(order.vt_orderid) + + self.on_order(order) + + def update_timer(self): + """""" + self.on_timer() + + def put_event(self): + """""" + self.algo_engine.put_event(self) + + def write_log(self, msg: str): + """""" + self.algo_engine.write_log(msg) + + def send_long_order(self, vt_symbol: str, price: float, volume: float): + """""" + self.send_order(vt_symbol, price, volume, Direction.LONG) + + def send_short_order(self, vt_symbol: str, price: float, volume: float): + """""" + self.send_order(vt_symbol, price, volume, Direction.SHORT) + + def send_order( + self, + vt_symbol: str, + price: float, + volume: float, + direction: Direction, + ): + """""" + vt_orderids = self.algo_engine.send_order( + self, + vt_symbol, + price, + volume, + direction, + ) + + self.leg_orders[vt_symbol].extend(vt_orderids) + + def cancel_leg_order(self, vt_symbol: str): + """""" + for vt_orderid in self.leg_orders[vt_symbol]: + self.algo_engine.cancel_order(vt_orderid) + + def cancel_all_order(self): + """""" + for vt_symbol in self.leg_orders.keys(): + self.cancel_leg_order(vt_symbol) + + def calculate_traded(self): + """""" + self.traded = 0 + + for n, leg in enumerate(self.spread.legs.values()): + leg_traded = self.leg_traded[leg.vt_symbol] + adjusted_leg_traded = leg_traded / leg.trading_multiplier + + if adjusted_leg_traded > 0: + adjusted_leg_traded = floor(adjusted_leg_traded) + else: + adjusted_leg_traded = ceil(adjusted_leg_traded) + + if not n: + self.traded = adjusted_leg_traded + else: + if adjusted_leg_traded > 0: + self.traded = min(self.traded, adjusted_leg_traded) + else: + self.traded = max(self.traded, adjusted_leg_traded) + + if self.traded == self.target: + self.status = Status.ALLTRADED + elif not self.traded: + self.status = Status.NOTTRADED + else: + self.status = Status.PARTTRADED + + def get_tick(self, vt_symbol: str) -> TickData: + """""" + return self.algo_engine.get_tick(vt_symbol) + + def get_contract(self, vt_symbol: str) -> ContractData: + """""" + return self.algo_engine.get_contract(vt_symbol) + + @virtual + def on_tick(self, tick: TickData): + """""" + pass + + @virtual + def on_order(self, order: OrderData): + """""" + pass + + @virtual + def on_trade(self, trade: TradeData): + """""" + pass + + @virtual + def on_timer(self): + """""" + pass From 0ad86c8638ad8d11a79379091d5712de37d06f8e Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sun, 15 Sep 2019 17:44:08 +0800 Subject: [PATCH 05/41] [Add] spread trading algo and engine --- examples/vn_trader/run.py | 14 +- vnpy/app/spread_trading/__init__.py | 2 +- vnpy/app/spread_trading/algo.py | 132 +++++++++++++++ vnpy/app/spread_trading/base.py | 37 ++++ vnpy/app/spread_trading/engine.py | 245 ++++++++++++++++++++++++--- vnpy/app/spread_trading/template.py | 74 ++++++-- vnpy/app/spread_trading/ui/widget.py | 127 +++++++++++++- vnpy/trader/ui/widget.py | 3 + 8 files changed, 591 insertions(+), 43 deletions(-) create mode 100644 vnpy/app/spread_trading/algo.py diff --git a/examples/vn_trader/run.py b/examples/vn_trader/run.py index 74e3ca1f..f063a687 100644 --- a/examples/vn_trader/run.py +++ b/examples/vn_trader/run.py @@ -5,7 +5,7 @@ from vnpy.trader.engine import MainEngine from vnpy.trader.ui import MainWindow, create_qapp # from vnpy.gateway.binance import BinanceGateway -# from vnpy.gateway.bitmex import BitmexGateway +from vnpy.gateway.bitmex import BitmexGateway # from vnpy.gateway.futu import FutuGateway # from vnpy.gateway.ib import IbGateway # from vnpy.gateway.ctp import CtpGateway @@ -38,6 +38,7 @@ from vnpy.app.cta_backtester import CtaBacktesterApp # from vnpy.app.risk_manager import RiskManagerApp from vnpy.app.script_trader import ScriptTraderApp from vnpy.app.rpc_service import RpcServiceApp +from vnpy.app.spread_trading import SpreadTradingApp def main(): @@ -57,7 +58,7 @@ def main(): # main_engine.add_gateway(FemasGateway) # main_engine.add_gateway(IbGateway) # main_engine.add_gateway(FutuGateway) - # main_engine.add_gateway(BitmexGateway) + main_engine.add_gateway(BitmexGateway) # main_engine.add_gateway(TigerGateway) # main_engine.add_gateway(OesGateway) # main_engine.add_gateway(OkexGateway) @@ -74,14 +75,15 @@ def main(): # main_engine.add_gateway(DaGateway) main_engine.add_gateway(CoinbaseGateway) - main_engine.add_app(CtaStrategyApp) - main_engine.add_app(CtaBacktesterApp) + # main_engine.add_app(CtaStrategyApp) + # main_engine.add_app(CtaBacktesterApp) # main_engine.add_app(CsvLoaderApp) # main_engine.add_app(AlgoTradingApp) # main_engine.add_app(DataRecorderApp) # main_engine.add_app(RiskManagerApp) - main_engine.add_app(ScriptTraderApp) - main_engine.add_app(RpcServiceApp) + # main_engine.add_app(ScriptTraderApp) + # main_engine.add_app(RpcServiceApp) + main_engine.add_app(SpreadTradingApp) main_window = MainWindow(main_engine, event_engine) main_window.showMaximized() diff --git a/vnpy/app/spread_trading/__init__.py b/vnpy/app/spread_trading/__init__.py index 7ff1bf13..36ab7f9b 100644 --- a/vnpy/app/spread_trading/__init__.py +++ b/vnpy/app/spread_trading/__init__.py @@ -5,7 +5,7 @@ from vnpy.trader.app import BaseApp from .engine import SpreadEngine, APP_NAME -class AlgoTradingApp(BaseApp): +class SpreadTradingApp(BaseApp): """""" app_name = APP_NAME diff --git a/vnpy/app/spread_trading/algo.py b/vnpy/app/spread_trading/algo.py new file mode 100644 index 00000000..120d9ae4 --- /dev/null +++ b/vnpy/app/spread_trading/algo.py @@ -0,0 +1,132 @@ +from typing import Any +from math import floor, ceil + +from vnpy.trader.constant import Direction +from vnpy.trader.object import (TickData, OrderData, TradeData) + +from .template import SpreadAlgoTemplate +from .base import SpreadData + + +class SpreadTakerAlgo(SpreadAlgoTemplate): + """""" + algo_name = "SpreadTaker" + + def __init__( + self, + algo_engine: Any, + algoid: str, + spread: SpreadData, + direction: Direction, + price: float, + volume: float + ): + """""" + super().__init__(algo_engine, algoid, spread, direction, price, volume) + + self.cancel_interval: int = 2 + self.timer_count: int = 0 + + def on_tick(self, tick: TickData): + """""" + # Return if there are any existing orders + if not self.check_order_finished(): + return + + # Hedge if active leg is not fully hedged + if not self.check_hedge_finished(): + self.hedge_passive_legs() + return + + # Otherwise check if should take active leg + if self.direction == Direction.LONG: + if self.spread.ask_price <= self.price: + self.take_active_leg() + else: + if self.spread.bid_price >= self.price: + self.take_active_leg() + + def on_order(self, order: OrderData): + """""" + # Only care active leg order update + if order.vt_symbol != self.spread.active_leg.vt_symbol: + return + + # Do nothing if still any existing orders + if not self.check_order_finished(): + return + + # Hedge passive legs if necessary + if not self.check_hedge_finished(): + self.hedge_passive_legs() + + def on_trade(self, trade: TradeData): + """""" + pass + + def on_interval(self): + """""" + if not self.check_order_finished(): + self.cancel_all_order() + + def take_active_leg(self): + """""" + # Calculate spread order volume of new round trade + spread_volume_left = self.target - self.traded + + if self.direction == Direction.LONG: + spread_order_volume = self.spread.ask_volume + spread_order_volume = min(spread_order_volume, spread_volume_left) + else: + spread_order_volume = -self.spread.bid_volume + spread_order_volume = max(spread_order_volume, spread_volume_left) + + # Calculate active leg order volume + leg_order_volume = self.spread.caculate_leg_volume( + self.spread.active_leg.vt_symbol, + spread_order_volume + ) + + # Send active leg order + self.send_leg_order( + self.spread.active_leg.vt_symbol, + leg_order_volume + ) + + def hedge_passive_legs(self): + """ + Send orders to hedge all passive legs. + """ + # Calcualte spread volume to hedge + active_leg = self.spread.active_leg + active_traded = self.leg_traded[active_leg.vt_symbol] + + hedge_volume = self.spread.calculate_spread_volume( + active_leg.vt_symbol, + active_traded + ) + + # Calculate passive leg target volume and do hedge + for leg in self.spread.passive_legs: + passive_traded = self.leg_orders[leg.vt_symbol] + passive_target = self.spread.caculate_leg_volume( + leg.vt_symbol, + hedge_volume + ) + + leg_order_volume = passive_target - passive_traded + if leg_order_volume: + self.send_leg_order(leg.vt_symbol, leg_order_volume) + + def send_leg_order(self, vt_symbol: str, leg_volume: float): + """""" + leg = self.spread.legs[vt_symbol] + leg_tick = self.get_tick(vt_symbol) + leg_contract = self.get_contract(vt_symbol) + + if leg_volume > 0: + price = leg_tick.ask_price_1 + leg_contract.pricetick * self.payup + self.send_long_order(leg.vt_symbol, price, abs(leg_volume)) + else: + price = leg_tick.bid_price_1 - leg_contract.pricetick * self.payup + self.send_short_order(leg.vt_symbol, price, abs(leg_volume)) diff --git a/vnpy/app/spread_trading/base.py b/vnpy/app/spread_trading/base.py index 574dc9b9..aee999c4 100644 --- a/vnpy/app/spread_trading/base.py +++ b/vnpy/app/spread_trading/base.py @@ -6,6 +6,12 @@ from vnpy.trader.object import TickData, PositionData from vnpy.trader.constant import Direction +EVENT_SPREAD_DATA = "eSpreadData" +EVENT_SPREAD_LOG = "eSpreadLog" +EVENT_SPREAD_ALGO = "eSpreadAlgo" +EVENT_SPREAD_STRATEGY = "eSpreadStrategy" + + class LegData: """""" @@ -69,6 +75,9 @@ class SpreadData: self.active_leg: LegData = None self.passive_legs: List[LegData] = [] + self.price_formula: str = "" + self.trading_formula: str = "" + for leg in legs: self.legs[leg.vt_symbol] = leg if leg.vt_symbol == active_symbol: @@ -76,6 +85,16 @@ class SpreadData: else: self.passive_legs.append(leg) + if leg.price_multiplier > 0: + self.price_formula += f"+{leg.trading_multiplier}*{leg.vt_symbol}" + else: + self.price_formula += f"{leg.trading_multiplier}*{leg.vt_symbol}" + + if leg.trading_multiplier > 0: + self.trading_formula += f"+{leg.trading_multiplier}*{leg.vt_symbol}" + else: + self.trading_formula += f"{leg.trading_multiplier}*{leg.vt_symbol}" + # Spread data self.bid_price: float = 0 self.ask_price: float = 0 @@ -154,3 +173,21 @@ class SpreadData: self.ask_price = 0 self.bid_volume = 0 self.ask_volume = 0 + + def calculate_leg_volume(self, vt_symbol: str, spread_volume: float) -> float: + """""" + leg = self.legs[vt_symbol] + leg_volume = spread_volume * leg.trading_multiplier + return leg_volume + + def calculate_spread_volume(self, vt_symbol: str, leg_volume: float) -> float: + """""" + leg = self.legs[vt_symbol] + spread_volume = leg_volume / leg.trading_multiplier + + if spread_volume > 0: + spread_volume = floor(spread_volume) + else: + spread_volume = ceil(spread_volume) + + return spread_volume diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index c1e9d84b..411c54a4 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -1,13 +1,27 @@ from typing import List, Dict from collections import defaultdict +from copy import copy from vnpy.event import EventEngine, Event from vnpy.trader.engine import BaseEngine, MainEngine -from vnpy.trader.event import EVENT_TICK, EVENT_POSITION +from vnpy.trader.event import ( + EVENT_TICK, EVENT_POSITION, EVENT_CONTRACT, + EVENT_ORDER, EVENT_TRADE, EVENT_TIMER +) from vnpy.trader.utility import load_json, save_json -from vnpy.trader.object import TickData, ContractData +from vnpy.trader.object import ( + TickData, ContractData, LogData, + SubscribeRequest, OrderRequest, CancelRequest +) +from vnpy.trader.constant import Direction -from .base import LegData, SpreadData +from .base import ( + LegData, SpreadData, + EVENT_SPREAD_DATA, EVENT_SPREAD_ALGO, + EVENT_SPREAD_LOG, EVENT_SPREAD_STRATEGY +) +from .template import SpreadAlgoTemplate +from .algo import SpreadTakerAlgo APP_NAME = "SpreadTrading" @@ -20,9 +34,28 @@ class SpreadEngine(BaseEngine): """Constructor""" super().__init__(main_engine, event_engine, APP_NAME) + self.active = False + + self.data_engine: SpreadDataEngine = SpreadDataEngine(self) + self.algo_engine: SpreadAlgoEngine = SpreadAlgoEngine(self) + + def start(self): + """""" + if self.active: + return + self.active = True + + self.data_engine.start() + self.algo_engine.start() + def write_log(self, msg: str): """""" - pass + log = LogData( + msg=msg, + gateway_name=APP_NAME + ) + event = Event(EVENT_SPREAD_LOG, log) + self.event_engine.put(event) class SpreadDataEngine: @@ -41,10 +74,33 @@ class SpreadDataEngine: self.spreads: Dict[str, SpreadData] = {} # name: spread self.symbol_spread_map: Dict[str, List[SpreadData]] = defaultdict(list) + def start(self): + """""" self.load_setting() self.register_event() + self.test() - def load_setting(self): + self.write_log("价差数据引擎启动成功") + + def test(self): + """""" + name = "test" + leg_settings = [ + { + "vt_symbol": "XBTUSD.BITMEX", + "price_multiplier": 1, + "trading_multiplier": 1 + }, + { + "vt_symbol": "XBTZ19.BITMEX", + "price_multiplier": -1, + "trading_multiplier": -1 + } + ] + active_symbol = "XBTUSD.BITMEX" + self.add_spread(name, leg_settings, active_symbol, True) + + def load_setting(self) -> None: """""" setting = load_json(self.setting_filename) @@ -56,13 +112,13 @@ class SpreadDataEngine: save=False ) - def save_setting(self): + def save_setting(self) -> None: """""" setting = [] for spread in self.spreads.values(): leg_settings = [] - for leg in spread.legs: + for leg in spread.legs.values(): leg_setting = { "vt_symbol": leg.vt_symbol, "price_multiplier": leg.price_multiplier, @@ -79,12 +135,13 @@ class SpreadDataEngine: save_json(self.setting_filename, setting) - def register_event(self): + def register_event(self) -> None: """""" self.event_engine.register(EVENT_TICK, self.process_tick_event) self.event_engine.register(EVENT_POSITION, self.process_position_event) + self.event_engine.register(EVENT_CONTRACT, self.process_contract_event) - def process_tick_event(self, event: Event): + def process_tick_event(self, event: Event) -> None: """""" tick = event.data @@ -96,7 +153,9 @@ class SpreadDataEngine: for spread in self.symbol_spread_map[tick.vt_symbol]: spread.calculate_price() - def process_position_event(self, event: Event): + self.put_data_event(spread) + + def process_position_event(self, event: Event) -> None: """""" position = event.data @@ -108,13 +167,30 @@ class SpreadDataEngine: for spread in self.symbol_spread_map[position.vt_symbol]: spread.calculate_pos() + self.put_data_event(spread) + + def process_contract_event(self, event: Event) -> None: + """""" + contract = event.data + + if contract.vt_symbol in self.legs: + req = SubscribeRequest( + contract.symbol, contract.exchange + ) + self.main_engine.subscribe(req, contract.gateway_name) + + def put_data_event(self, spread: SpreadData) -> None: + """""" + event = Event(EVENT_SPREAD_DATA, spread) + self.event_engine.put(event) + def add_spread( self, name: str, leg_settings: List[Dict], active_symbol: str, save: bool = True - ): + ) -> None: """""" if name in self.spreads: self.write_log("价差创建失败,名称重复:{}".format(name)) @@ -138,15 +214,16 @@ class SpreadDataEngine: spread = SpreadData(name, legs, active_symbol) self.spreads[name] = spread - for leg in spread.legs: + for leg in spread.legs.values(): self.symbol_spread_map[leg.vt_symbol].append(spread) if save: self.save_setting() self.write_log("价差创建成功:{}".format(name)) + self.put_data_event(spread) - def remove_spread(self, name: str): + def remove_spread(self, name: str) -> None: """""" if name not in self.spreads: return @@ -161,6 +238,7 @@ class SpreadDataEngine: class SpreadAlgoEngine: """""" + algo_class = SpreadTakerAlgo def __init__(self, spread_engine: SpreadEngine): """""" @@ -170,23 +248,146 @@ class SpreadAlgoEngine: self.write_log = spread_engine.write_log - def put_event(self, algo) -> None: + self.spreads: Dict[str: SpreadData] = {} + self.algos: Dict[str: SpreadAlgoTemplate] = {} + + self.order_algo_map: dict[str: SpreadAlgoTemplate] = {} + self.symbol_algo_map: dict[str: SpreadAlgoTemplate] = defaultdict(list) + + self.algo_count: int = 0 + + def start(self): """""" - pass + self.register_event() + + self.write_log("价差算法引擎启动成功") + + def register_event(self): + """""" + self.event_engine.register(EVENT_TICK, self.process_tick_event) + self.event_engine.register(EVENT_ORDER, self.process_order_event) + self.event_engine.register(EVENT_TRADE, self.process_trade_event) + self.event_engine.register(EVENT_TIMER, self.process_timer_event) + + def process_spread_event(self, event: Event): + """""" + spread: SpreadData = event.data + self.spreads[spread.name] = spread + + def process_tick_event(self, event: Event): + """""" + tick = event.data + algos = self.symbol_algo_map[tick.vt_symbol] + if not algos: + return + + buf = copy(algos) + for algo in buf: + if not algo.is_active(): + algos.remove(algo) + else: + algo.update_tick(tick) + + def process_order_event(self, event: Event): + """""" + order = event.data + algo = self.order_algo_map.get(order.vt_orderid, None) + if algo and algo.is_active(): + algo.update_order(order) + + def process_trade_event(self, event: Event): + """""" + trade = event.data + algo = self.order_algo_map.get(trade.vt_orderid, None) + if algo and algo.is_active(): + algo.update_trade(trade) + + def process_timer_event(self, event: Event): + """""" + buf = self.algos.values() + + for algo in buf: + if not algo.is_active(): + self.algos.pop(algo.algoid) + else: + algo.update_timer() + + def start_algo( + self, + spread_name: str, + direction: Direction, + price: float, + volume: float, + payup: int, + interval: int + ) -> str: + # Find spread object + spread = self.spreads.get(spread_name, None) + if not spread: + self.write_log("创建价差算法失败,找不到价差:{}".format(spread_name)) + return "" + + # Generate algoid str + self.algo_count += 1 + algo_count_str = str(self.algo_count).rjust(6, "0") + algoid = f"{self.algo_class.algo_name}_{algo_count_str}" + + # Create algo object + algo = self.algo_class( + self, + algoid, + spread, + direction, + price, + volume, + payup, + interval + ) + self.algos[algoid] = algo + + # Generate map between vt_symbol and algo + for leg in spread.legs.values(): + self.symbol_algo_map[leg.vt_symbol].append(algo) + + # Put event to update GUI + self.put_algo_event(algo) + + return algoid + + def stop_algo( + self, + algoid: str + ): + """""" + algo = self.algos.get(algoid, None) + if not algo: + self.write_log("停止价差算法失败,找不到算法:{}".format(algoid)) + return + + algo.stop() + + def put_algo_event(self, algo: SpreadAlgoTemplate) -> None: + """""" + event = Event(EVENT_SPREAD_ALGO, algo) + self.event_engine.put(event) + + def write_algo_log(self, algo: SpreadAlgoTemplate, msg: str) -> None: + """""" + msg = f"{algo.algoid}:{msg}" + self.write_log(msg) def send_order( self, - algo, - vt_symbol, - price, - volume, - direction, - offset + algo: SpreadAlgoTemplate, + vt_symbol: str, + price: float, + volume: float, + direction: Direction, ) -> List[str]: """""" pass - def cancel_order(self, algo, vt_orderid) -> None: + def cancel_order(self, algo: SpreadAlgoTemplate, vt_orderid: str) -> None: """""" pass diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 16c81924..9d910677 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -4,11 +4,10 @@ from typing import Dict, List from math import floor, ceil from vnpy.trader.object import TickData, TradeData, OrderData, ContractData -from vnpy.trader.constant import Direction, Status, Offset +from vnpy.trader.constant import Direction, Status from vnpy.trader.utility import virtual from .base import SpreadData -from .engine import SpreadAlgoEngine class SpreadAlgoTemplate: @@ -19,31 +18,37 @@ class SpreadAlgoTemplate: def __init__( self, - algo_engine: SpreadAlgoEngine, + algo_engine, algoid: str, spread: SpreadData, direction: Direction, price: float, volume: float, - payup: int + payup: int, + interval: int ): """""" - self.algo_engine: SpreadAlgoEngine = algo_engine + self.algo_engine = algo_engine self.algoid: str = algoid + self.spread: SpreadData = spread + self.spread_name: str = spread.name self.direction: Direction = direction self.price: float = price self.volume: float = volume self.payup: int = payup + self.interval = interval if direction == Direction.LONG: self.target = volume else: self.target = -volume - self.status: Status = Status.NOTTRADED - self.traded: float = 0 + self.status: Status = Status.NOTTRADED # Algo status + self.count: int = 0 # Timer count + self.traded: float = 0 # Volume traded + self.traded_volume: float = 0 # Volume traded (Abs value) self.leg_traded: Dict[str, float] = defaultdict(int) self.leg_orders: Dict[str, List[str]] = defaultdict[list] @@ -55,12 +60,50 @@ class SpreadAlgoTemplate: else: return False + def check_order_finished(self): + """""" + finished = True + + for leg in self.spread.legs.values(): + vt_orderids = self.leg_orders[leg.vt_symbol] + + if vt_orderids: + finished = False + break + + return finished + + def check_hedge_finished(self): + """""" + active_symbol = self.spread.active_leg.vt_symbol + active_traded = self.leg_traded[active_symbol] + + spread_volume = self.spread.calculate_spread_volume( + active_symbol, active_traded + ) + + finished = True + + for leg in self.spread.passive_legs: + passive_symbol = leg.vt_symbol + + leg_target = self.spread.calculate_leg_volume( + passive_symbol, spread_volume + ) + leg_traded = self.leg_traded[passive_symbol] + + if leg_traded != leg_target: + finished = False + break + + return finished + def stop(self): """""" if self.is_active(): - self.cancel_leg_order() + self.cancel_all_order() self.status = Status.CANCELLED - self.put_event() + self.put_algo_event() def update_tick(self, tick: TickData): """""" @@ -86,7 +129,12 @@ class SpreadAlgoTemplate: def update_timer(self): """""" - self.on_timer() + self.count += 1 + if self.count < self.interval: + return + self.count = 0 + + self.on_interval() def put_event(self): """""" @@ -94,7 +142,7 @@ class SpreadAlgoTemplate: def write_log(self, msg: str): """""" - self.algo_engine.write_log(msg) + self.algo_engine.write_algo_log(msg) def send_long_order(self, vt_symbol: str, price: float, volume: float): """""" @@ -153,6 +201,8 @@ class SpreadAlgoTemplate: else: self.traded = max(self.traded, adjusted_leg_traded) + self.traded_volume = abs(self.traded) + if self.traded == self.target: self.status = Status.ALLTRADED elif not self.traded: @@ -184,6 +234,6 @@ class SpreadAlgoTemplate: pass @virtual - def on_timer(self): + def on_interval(self): """""" pass diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index ced5317c..6519957c 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -5,11 +5,21 @@ Widget for spread trading. from vnpy.event import EventEngine, Event from vnpy.trader.engine import MainEngine from vnpy.trader.ui import QtWidgets, QtCore +from vnpy.trader.ui.widget import ( + BaseMonitor, BaseCell, + BidCell, AskCell, + TimeCell, MsgCell, + PnlCell, DirectionCell, + EnumCell, +) from ..engine import ( - AlgoEngine, - AlgoTemplate, + SpreadEngine, APP_NAME, + EVENT_SPREAD_DATA, + EVENT_SPREAD_LOG, + EVENT_SPREAD_ALGO, + EVENT_SPREAD_STRATEGY ) @@ -23,3 +33,116 @@ class SpreadManager(QtWidgets.QWidget): self.main_engine = main_engine self.event_engine = event_engine self.spread_engine = main_engine.get_engine(APP_NAME) + + self.init_ui() + + def init_ui(self): + """""" + self.setWindowTitle("价差交易") + + self.data_monitor = SpreadDataMonitor( + self.main_engine, + self.event_engine + ) + self.log_monitor = SpreadLogMonitor( + self.main_engine, + self.event_engine + ) + self.algo_monitor = SpreadAlgoMonitor( + self.main_engine, + self.event_engine + ) + + vbox = QtWidgets.QVBoxLayout() + vbox.addWidget(self.data_monitor) + vbox.addWidget(self.log_monitor) + + hbox = QtWidgets.QHBoxLayout() + hbox.addLayout(vbox) + hbox.addWidget(self.algo_monitor) + + self.setLayout(hbox) + + def show(self): + """""" + self.spread_engine.start() + + self.showMaximized() + + +class SpreadDataMonitor(BaseMonitor): + """ + Monitor for spread data. + """ + + event_type = EVENT_SPREAD_DATA + data_key = "name" + sorting = False + + headers = { + "name": {"display": "名称", "cell": BaseCell, "update": False}, + "price_formula": {"display": "定价", "cell": BaseCell, "update": False}, + "trading_formula": {"display": "交易", "cell": BaseCell, "update": False}, + "bid_volume": {"display": "买量", "cell": BidCell, "update": True}, + "bid_price": {"display": "买价", "cell": BidCell, "update": True}, + "ask_price": {"display": "卖价", "cell": AskCell, "update": True}, + "ask_volume": {"display": "卖量", "cell": AskCell, "update": True}, + "net_pos": {"display": "净仓", "cell": PnlCell, "update": True}, + "datetime": {"display": "时间", "cell": TimeCell, "update": True}, + } + + +class SpreadLogMonitor(QtWidgets.QTextEdit): + """ + Monitor for log data. + """ + signal = QtCore.pyqtSignal(Event) + + def __init__(self, main_engine: MainEngine, event_engine: EventEngine): + """""" + super().__init__() + + self.main_engine = main_engine + self.event_engine = event_engine + + self.init_ui() + self.register_event() + + def init_ui(self): + """""" + self.setReadOnly(True) + + def register_event(self): + """""" + self.signal.connect(self.process_log_event) + + self.event_engine.register(EVENT_SPREAD_LOG, self.signal.emit) + + def process_log_event(self, event: Event): + """""" + log = event.data + msg = f"{log.time}:{log.msg}" + self.append(msg) + + +class SpreadAlgoMonitor(BaseMonitor): + """ + Monitor for algo status. + """ + + event_type = EVENT_SPREAD_ALGO + data_key = "algoid" + sorting = False + + headers = { + "algoid": {"display": "算法", "cell": BaseCell, "update": False}, + "spread_name": {"display": "价差", "cell": BaseCell, "update": False}, + "direction": {"display": "方向", "cell": EnumCell, "update": False}, + "price": {"display": "价格", "cell": BaseCell, "update": False}, + "payup": {"display": "超价", "cell": BaseCell, "update": False}, + "volume": {"display": "数量", "cell": BaseCell, "update": False}, + "traded_volume": {"display": "成交", "cell": BaseCell, "update": True}, + "interval": {"display": "间隔", "cell": BaseCell, "update": False}, + "count": {"display": "计数", "cell": BaseCell, "update": True}, + "status": {"display": "状态", "cell": EnumCell, "update": True}, + } diff --git a/vnpy/trader/ui/widget.py b/vnpy/trader/ui/widget.py index ad8c0297..78f860dd 100644 --- a/vnpy/trader/ui/widget.py +++ b/vnpy/trader/ui/widget.py @@ -156,6 +156,9 @@ class TimeCell(BaseCell): """ Time format is 12:12:12.5 """ + if content is None: + return + timestamp = content.strftime("%H:%M:%S") millisecond = int(content.microsecond / 1000) From 2e4776eceb89259064caefe91190d17af4bbe53b Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sun, 15 Sep 2019 20:53:18 +0800 Subject: [PATCH 06/41] [Add] dialog ui for starting algo --- vnpy/app/spread_trading/algo.py | 9 ++- vnpy/app/spread_trading/engine.py | 7 +++ vnpy/app/spread_trading/template.py | 2 +- vnpy/app/spread_trading/ui/widget.py | 85 ++++++++++++++++++++++++++-- 4 files changed, 95 insertions(+), 8 deletions(-) diff --git a/vnpy/app/spread_trading/algo.py b/vnpy/app/spread_trading/algo.py index 120d9ae4..39ca2ecf 100644 --- a/vnpy/app/spread_trading/algo.py +++ b/vnpy/app/spread_trading/algo.py @@ -19,10 +19,15 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): spread: SpreadData, direction: Direction, price: float, - volume: float + volume: float, + payup: int, + interval: int ): """""" - super().__init__(algo_engine, algoid, spread, direction, price, volume) + super().__init__( + algo_engine, algoid, spread, direction, + price, volume, payup, interval + ) self.cancel_interval: int = 2 self.timer_count: int = 0 diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 411c54a4..f59739a7 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -39,6 +39,12 @@ class SpreadEngine(BaseEngine): self.data_engine: SpreadDataEngine = SpreadDataEngine(self) self.algo_engine: SpreadAlgoEngine = SpreadAlgoEngine(self) + self.add_spread = self.data_engine.add_spread + self.remove_spread = self.data_engine.remove_spread + + self.start_algo = self.algo_engine.start_algo + self.stop_algo = self.algo_engine.stop_algo + def start(self): """""" if self.active: @@ -268,6 +274,7 @@ class SpreadAlgoEngine: self.event_engine.register(EVENT_ORDER, self.process_order_event) self.event_engine.register(EVENT_TRADE, self.process_trade_event) self.event_engine.register(EVENT_TIMER, self.process_timer_event) + self.event_engine.register(EVENT_SPREAD_DATA, self.process_spread_event) def process_spread_event(self, event: Event): """""" diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 9d910677..8ab76697 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -51,7 +51,7 @@ class SpreadAlgoTemplate: self.traded_volume: float = 0 # Volume traded (Abs value) self.leg_traded: Dict[str, float] = defaultdict(int) - self.leg_orders: Dict[str, List[str]] = defaultdict[list] + self.leg_orders: Dict[str, List[str]] = defaultdict(list) def is_active(self): """""" diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index 6519957c..e42dff6a 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -4,7 +4,8 @@ Widget for spread trading. from vnpy.event import EventEngine, Event from vnpy.trader.engine import MainEngine -from vnpy.trader.ui import QtWidgets, QtCore +from vnpy.trader.constant import Direction +from vnpy.trader.ui import QtWidgets, QtCore, QtGui from vnpy.trader.ui.widget import ( BaseMonitor, BaseCell, BidCell, AskCell, @@ -40,6 +41,8 @@ class SpreadManager(QtWidgets.QWidget): """""" self.setWindowTitle("价差交易") + self.algo_dialog = SpreadAlgoDialog(self.spread_engine) + self.data_monitor = SpreadDataMonitor( self.main_engine, self.event_engine @@ -53,12 +56,17 @@ class SpreadManager(QtWidgets.QWidget): self.event_engine ) - vbox = QtWidgets.QVBoxLayout() - vbox.addWidget(self.data_monitor) - vbox.addWidget(self.log_monitor) + vbox1 = QtWidgets.QVBoxLayout() + vbox1.addWidget(self.algo_dialog) + vbox1.addStretch() + + vbox2 = QtWidgets.QVBoxLayout() + vbox2.addWidget(self.data_monitor) + vbox2.addWidget(self.log_monitor) hbox = QtWidgets.QHBoxLayout() - hbox.addLayout(vbox) + hbox.addLayout(vbox1) + hbox.addLayout(vbox2) hbox.addWidget(self.algo_monitor) self.setLayout(hbox) @@ -146,3 +154,70 @@ class SpreadAlgoMonitor(BaseMonitor): "count": {"display": "计数", "cell": BaseCell, "update": True}, "status": {"display": "状态", "cell": EnumCell, "update": True}, } + + +class SpreadAlgoDialog(QtWidgets.QDialog): + """""" + + def __init__(self, spread_engine: SpreadEngine): + """""" + super().__init__() + + self.spread_engine: SpreadEngine = spread_engine + + self.init_ui() + + def init_ui(self): + """""" + self.setWindowTitle("启动算法") + + self.name_line = QtWidgets.QLineEdit() + + self.direction_combo = QtWidgets.QComboBox() + self.direction_combo.addItems( + [Direction.LONG.value, Direction.SHORT.value] + ) + + float_validator = QtGui.QDoubleValidator() + float_validator.setBottom(0) + + self.price_line = QtWidgets.QLineEdit() + self.price_line.setValidator(float_validator) + + self.volume_line = QtWidgets.QLineEdit() + self.volume_line.setValidator(float_validator) + + int_validator = QtGui.QIntValidator() + + self.payup_line = QtWidgets.QLineEdit() + self.payup_line.setValidator(int_validator) + + self.interval_line = QtWidgets.QLineEdit() + self.interval_line.setValidator(int_validator) + + button_start = QtWidgets.QPushButton("启动") + button_start.clicked.connect(self.start_algo) + + form = QtWidgets.QFormLayout() + form.addRow("价差", self.name_line) + form.addRow("方向", self.direction_combo) + form.addRow("价格", self.price_line) + form.addRow("数量", self.volume_line) + form.addRow("超价", self.payup_line) + form.addRow("间隔", self.interval_line) + form.addRow(button_start) + + self.setLayout(form) + + def start_algo(self): + """""" + name = self.name_line.text() + direction = Direction(self.direction_combo.currentText()) + price = float(self.price_line.text()) + volume = float(self.volume_line.text()) + payup = int(self.payup_line.text()) + interval = int(self.interval_line.text()) + + self.spread_engine.start_algo( + name, direction, price, volume, payup, interval + ) From b4081eb01e78aba14ae6ed025bd4c2c324336592 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sun, 15 Sep 2019 21:34:47 +0800 Subject: [PATCH 07/41] [Add] dialog ui for creating new spread --- vnpy/app/spread_trading/ui/widget.py | 131 +++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index e42dff6a..b1b797ad 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -56,9 +56,13 @@ class SpreadManager(QtWidgets.QWidget): self.event_engine ) + add_spread_button = QtWidgets.QPushButton("创建价差") + add_spread_button.clicked.connect(self.add_spread) + vbox1 = QtWidgets.QVBoxLayout() vbox1.addWidget(self.algo_dialog) vbox1.addStretch() + vbox1.addWidget(add_spread_button) vbox2 = QtWidgets.QVBoxLayout() vbox2.addWidget(self.data_monitor) @@ -77,6 +81,11 @@ class SpreadManager(QtWidgets.QWidget): self.showMaximized() + def add_spread(self): + """""" + dialog = SpreadDataDialog(self.spread_engine) + dialog.exec_() + class SpreadDataMonitor(BaseMonitor): """ @@ -221,3 +230,125 @@ class SpreadAlgoDialog(QtWidgets.QDialog): self.spread_engine.start_algo( name, direction, price, volume, payup, interval ) + + +class SpreadDataDialog(QtWidgets.QDialog): + """""" + + def __init__(self, spread_engine: SpreadEngine): + """""" + super().__init__() + + self.spread_engine: SpreadEngine = spread_engine + + self.leg_widgets = [] + + self.init_ui() + + def init_ui(self): + """""" + self.setWindowTitle("创建价差") + + self.name_line = QtWidgets.QLineEdit() + self.active_line = QtWidgets.QLineEdit() + + self.grid = QtWidgets.QGridLayout() + + button_add = QtWidgets.QPushButton("创建价差") + button_add.clicked.connect(self.add_spread) + + Label = QtWidgets.QLabel + + grid = QtWidgets.QGridLayout() + grid.addWidget(Label("价差名称"), 0, 0) + grid.addWidget(self.name_line, 0, 1, 1, 3) + grid.addWidget(Label("主动腿代码"), 1, 0) + grid.addWidget(self.active_line, 1, 1, 1, 3) + + grid.addWidget(Label(""), 2, 0) + grid.addWidget(Label("本地代码"), 3, 1) + grid.addWidget(Label("价格乘数"), 3, 2) + grid.addWidget(Label("交易乘数"), 3, 3) + + int_validator = QtGui.QIntValidator() + + leg_count = 5 + for i in range(leg_count): + symbol_line = QtWidgets.QLineEdit() + + price_line = QtWidgets.QLineEdit() + price_line.setValidator(int_validator) + + trading_line = QtWidgets.QLineEdit() + trading_line.setValidator(int_validator) + + grid.addWidget(Label("腿{}".format(i + 1)), 4 + i, 0) + grid.addWidget(symbol_line, 4 + i, 1) + grid.addWidget(price_line, 4 + i, 2) + grid.addWidget(trading_line, 4 + i, 3) + + d = { + "symbol": symbol_line, + "price": price_line, + "trading": trading_line + } + self.leg_widgets.append(d) + + grid.addWidget(Label(""), 4 + leg_count, 0,) + grid.addWidget(button_add, 5 + leg_count, 0, 1, 4) + + self.setLayout(grid) + + def add_spread(self): + """""" + spread_name = self.name_line.text() + if not spread_name: + QtWidgets.QMessageBox.warning( + self, + "创建失败", + "请输入价差名称", + QtWidgets.QMessageBox.Ok + ) + return + + active_symbol = self.active_line.text() + + leg_settings = {} + for d in self.leg_widgets: + try: + vt_symbol = d["symbol"].text() + price_multiplier = int(d["price"].text()) + trading_multiplier = int(d["trading"].text()) + + leg_settings[vt_symbol] = { + "vt_symbol": vt_symbol, + "price_multiplier": price_multiplier, + "trading_multiplier": trading_multiplier + } + except ValueError: + pass + + if len(leg_settings) < 2: + QtWidgets.QMessageBox.warning( + self, + "创建失败", + "价差最少需要2条腿", + QtWidgets.QMessageBox.Ok + ) + return + + if active_symbol not in leg_settings: + QtWidgets.QMessageBox.warning( + self, + "创建失败", + "各条腿中找不到主动腿代码", + QtWidgets.QMessageBox.Ok + ) + return + + self.spread_engine.add_spread( + spread_name, + list(leg_settings.values()), + active_symbol + ) + self.accept() From d4cab7bfc2a9ebf2fc45ba76358a18094cc71bf7 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sun, 15 Sep 2019 21:46:49 +0800 Subject: [PATCH 08/41] [Add] stop algo by double click monitor cells --- vnpy/app/spread_trading/engine.py | 5 +++-- vnpy/app/spread_trading/template.py | 4 ++-- vnpy/app/spread_trading/ui/widget.py | 25 +++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index f59739a7..8bcfb831 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -274,7 +274,8 @@ class SpreadAlgoEngine: self.event_engine.register(EVENT_ORDER, self.process_order_event) self.event_engine.register(EVENT_TRADE, self.process_trade_event) self.event_engine.register(EVENT_TIMER, self.process_timer_event) - self.event_engine.register(EVENT_SPREAD_DATA, self.process_spread_event) + self.event_engine.register( + EVENT_SPREAD_DATA, self.process_spread_event) def process_spread_event(self, event: Event): """""" @@ -311,7 +312,7 @@ class SpreadAlgoEngine: def process_timer_event(self, event: Event): """""" - buf = self.algos.values() + buf = list(self.algos.values()) for algo in buf: if not algo.is_active(): diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 8ab76697..6c967d91 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -103,7 +103,7 @@ class SpreadAlgoTemplate: if self.is_active(): self.cancel_all_order() self.status = Status.CANCELLED - self.put_algo_event() + self.put_event() def update_tick(self, tick: TickData): """""" @@ -138,7 +138,7 @@ class SpreadAlgoTemplate: def put_event(self): """""" - self.algo_engine.put_event(self) + self.algo_engine.put_algo_event(self) def write_log(self, msg: str): """""" diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index b1b797ad..ebfe8977 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -52,8 +52,7 @@ class SpreadManager(QtWidgets.QWidget): self.event_engine ) self.algo_monitor = SpreadAlgoMonitor( - self.main_engine, - self.event_engine + self.spread_engine ) add_spread_button = QtWidgets.QPushButton("创建价差") @@ -164,6 +163,28 @@ class SpreadAlgoMonitor(BaseMonitor): "status": {"display": "状态", "cell": EnumCell, "update": True}, } + def __init__(self, spread_engine: SpreadEngine): + """""" + super().__init__(spread_engine.main_engine, spread_engine.event_engine) + + self.spread_engine = spread_engine + + def init_ui(self): + """ + Connect signal. + """ + super().init_ui() + + self.setToolTip("双击单元格停止算法") + self.itemDoubleClicked.connect(self.stop_algo) + + def stop_algo(self, cell): + """ + Stop algo if cell double clicked. + """ + algo = cell.get_data() + self.spread_engine.stop_algo(algo.algoid) + class SpreadAlgoDialog(QtWidgets.QDialog): """""" From f94144b704c07908bba133cec33aaa690abf2abf Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sun, 15 Sep 2019 23:53:49 +0800 Subject: [PATCH 09/41] [Mod] remove test function --- vnpy/app/spread_trading/algo.py | 4 ++-- vnpy/app/spread_trading/engine.py | 19 ------------------- vnpy/app/spread_trading/ui/widget.py | 1 - 3 files changed, 2 insertions(+), 22 deletions(-) diff --git a/vnpy/app/spread_trading/algo.py b/vnpy/app/spread_trading/algo.py index 39ca2ecf..9e0066ed 100644 --- a/vnpy/app/spread_trading/algo.py +++ b/vnpy/app/spread_trading/algo.py @@ -87,7 +87,7 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): spread_order_volume = max(spread_order_volume, spread_volume_left) # Calculate active leg order volume - leg_order_volume = self.spread.caculate_leg_volume( + leg_order_volume = self.spread.calculate_leg_volume( self.spread.active_leg.vt_symbol, spread_order_volume ) @@ -114,7 +114,7 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): # Calculate passive leg target volume and do hedge for leg in self.spread.passive_legs: passive_traded = self.leg_orders[leg.vt_symbol] - passive_target = self.spread.caculate_leg_volume( + passive_target = self.spread.calculate_leg_volume( leg.vt_symbol, hedge_volume ) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 8bcfb831..42690280 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -84,28 +84,9 @@ class SpreadDataEngine: """""" self.load_setting() self.register_event() - self.test() self.write_log("价差数据引擎启动成功") - def test(self): - """""" - name = "test" - leg_settings = [ - { - "vt_symbol": "XBTUSD.BITMEX", - "price_multiplier": 1, - "trading_multiplier": 1 - }, - { - "vt_symbol": "XBTZ19.BITMEX", - "price_multiplier": -1, - "trading_multiplier": -1 - } - ] - active_symbol = "XBTUSD.BITMEX" - self.add_spread(name, leg_settings, active_symbol, True) - def load_setting(self) -> None: """""" setting = load_json(self.setting_filename) diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index ebfe8977..062e6221 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -209,7 +209,6 @@ class SpreadAlgoDialog(QtWidgets.QDialog): ) float_validator = QtGui.QDoubleValidator() - float_validator.setBottom(0) self.price_line = QtWidgets.QLineEdit() self.price_line.setValidator(float_validator) From be9142e878ca4328a14917ebb9aa619adb32310b Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Mon, 16 Sep 2019 14:51:57 +0800 Subject: [PATCH 10/41] [Mod] add send/cancel order function of algo engine --- vnpy/app/spread_trading/algo.py | 5 +- vnpy/app/spread_trading/engine.py | 93 ++++++++++++++++++++++++++-- vnpy/app/spread_trading/template.py | 5 +- vnpy/app/spread_trading/ui/widget.py | 14 ++++- 4 files changed, 108 insertions(+), 9 deletions(-) diff --git a/vnpy/app/spread_trading/algo.py b/vnpy/app/spread_trading/algo.py index 9e0066ed..13b3e968 100644 --- a/vnpy/app/spread_trading/algo.py +++ b/vnpy/app/spread_trading/algo.py @@ -21,12 +21,13 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): price: float, volume: float, payup: int, - interval: int + interval: int, + lock: bool ): """""" super().__init__( algo_engine, algoid, spread, direction, - price, volume, payup, interval + price, volume, payup, interval, lock ) self.cancel_interval: int = 2 diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 42690280..e12afeb2 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -1,4 +1,4 @@ -from typing import List, Dict +from typing import List, Dict, Set from collections import defaultdict from copy import copy @@ -13,7 +13,8 @@ from vnpy.trader.object import ( TickData, ContractData, LogData, SubscribeRequest, OrderRequest, CancelRequest ) -from vnpy.trader.constant import Direction +from vnpy.trader.constant import Direction, Offset, OrderType +from vnpy.trader.converter import OffsetConverter, PositionHolding from .base import ( LegData, SpreadData, @@ -242,6 +243,11 @@ class SpreadAlgoEngine: self.symbol_algo_map: dict[str: SpreadAlgoTemplate] = defaultdict(list) self.algo_count: int = 0 + self.vt_tradeids: Set = set() + + self.offset_converter: OffsetConverter = OffsetConverter( + self.main_engine + ) def start(self): """""" @@ -254,9 +260,11 @@ class SpreadAlgoEngine: self.event_engine.register(EVENT_TICK, self.process_tick_event) self.event_engine.register(EVENT_ORDER, self.process_order_event) self.event_engine.register(EVENT_TRADE, self.process_trade_event) + self.event_engine.register(EVENT_POSITION, self.process_position_event) self.event_engine.register(EVENT_TIMER, self.process_timer_event) self.event_engine.register( - EVENT_SPREAD_DATA, self.process_spread_event) + EVENT_SPREAD_DATA, self.process_spread_event + ) def process_spread_event(self, event: Event): """""" @@ -280,6 +288,9 @@ class SpreadAlgoEngine: def process_order_event(self, event: Event): """""" order = event.data + + self.offset_converter.update_order(order) + algo = self.order_algo_map.get(order.vt_orderid, None) if algo and algo.is_active(): algo.update_order(order) @@ -287,10 +298,24 @@ class SpreadAlgoEngine: def process_trade_event(self, event: Event): """""" trade = event.data + + # Filter duplicate trade push + if trade.vt_tradeid in self.vt_tradeids: + return + self.vt_tradeids.add(trade.vt_tradeid) + + self.offset_converter.update_trade(trade) + algo = self.order_algo_map.get(trade.vt_orderid, None) if algo and algo.is_active(): algo.update_trade(trade) + def process_position_event(self, event: Event): + """""" + position = event.data + + self.offset_converter.update_position(position) + def process_timer_event(self, event: Event): """""" buf = list(self.algos.values()) @@ -372,13 +397,71 @@ class SpreadAlgoEngine: price: float, volume: float, direction: Direction, + lock: bool ) -> List[str]: """""" - pass + holding = self.offset_converter.get_position_holding(vt_symbol) + contract = self.main_engine.get_contract(vt_symbol) + + if direction == Direction.LONG: + available = holding.short_pos - holding.short_pos_frozen + else: + available = holding.long_pos - holding.long_pos_frozen + + # If no position to close, just open new + if not available: + offset = Offset.OPEN + # If enougth position to close, just close old + elif volume < available: + offset = Offset.CLOSE + # Otherwise, just close existing position + else: + volume = available + offset = Offset.CLOSE + + original_req = OrderRequest( + contract.symbol, + contract.exchange, + direction, + offset, + OrderType.LIMIT, + price, + volume + ) + + # Convert with offset converter + req_list = self.offset_converter.convert_order_request( + original_req, lock) + + # Send Orders + vt_orderids = [] + + for req in req_list: + vt_orderid = self.main_engine.send_order( + req, contract.gateway_name) + + # Check if sending order successful + if not vt_orderid: + continue + + vt_orderids.append(vt_orderid) + + self.offset_converter.update_order_request(req, vt_orderid) + + # Save relationship between orderid and algo. + self.order_algo_map[vt_orderid] = algo + + return vt_orderids def cancel_order(self, algo: SpreadAlgoTemplate, vt_orderid: str) -> None: """""" - pass + order = self.main_engine.get_order(vt_orderid) + if not order: + self.write_algo_log(algo, "撤单失败,找不到委托{}".format(vt_orderid)) + return + + req = order.create_cancel_request() + self.main_engine.cancel_order(req, order.gateway_name) def get_tick(self, vt_symbol: str) -> TickData: """""" diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 6c967d91..0a0767ec 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -25,7 +25,8 @@ class SpreadAlgoTemplate: price: float, volume: float, payup: int, - interval: int + interval: int, + lock: bool ): """""" self.algo_engine = algo_engine @@ -39,6 +40,7 @@ class SpreadAlgoTemplate: self.volume: float = volume self.payup: int = payup self.interval = interval + self.lock = lock if direction == Direction.LONG: self.target = volume @@ -166,6 +168,7 @@ class SpreadAlgoTemplate: price, volume, direction, + self.lock ) self.leg_orders[vt_symbol].extend(vt_orderids) diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index 062e6221..644bcef7 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -227,6 +227,11 @@ class SpreadAlgoDialog(QtWidgets.QDialog): button_start = QtWidgets.QPushButton("启动") button_start.clicked.connect(self.start_algo) + self.lock_combo = QtWidgets.QComboBox() + self.lock_combo.addItems( + ["否", "是"] + ) + form = QtWidgets.QFormLayout() form.addRow("价差", self.name_line) form.addRow("方向", self.direction_combo) @@ -234,6 +239,7 @@ class SpreadAlgoDialog(QtWidgets.QDialog): form.addRow("数量", self.volume_line) form.addRow("超价", self.payup_line) form.addRow("间隔", self.interval_line) + form.addRow("锁仓", self.lock_line) form.addRow(button_start) self.setLayout(form) @@ -247,8 +253,14 @@ class SpreadAlgoDialog(QtWidgets.QDialog): payup = int(self.payup_line.text()) interval = int(self.interval_line.text()) + lock_str = self.lock_combo.currentText() + if lock_str == "是": + lock = True + else: + lock = False + self.spread_engine.start_algo( - name, direction, price, volume, payup, interval + name, direction, price, volume, payup, interval, lock ) From 80c9dfe3785f958ff9b7808024f816b196497c36 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Mon, 16 Sep 2019 16:42:16 +0800 Subject: [PATCH 11/41] [Mod] complete test of algo trading function --- vnpy/app/spread_trading/algo.py | 9 +++++--- vnpy/app/spread_trading/engine.py | 26 ++++++++++++---------- vnpy/app/spread_trading/template.py | 32 +++++++++++++++++++++++---- vnpy/app/spread_trading/ui/widget.py | 12 +++++----- vnpy/gateway/bitmex/bitmex_gateway.py | 5 ++++- vnpy/trader/constant.py | 1 + vnpy/trader/ui/widget.py | 2 +- 7 files changed, 59 insertions(+), 28 deletions(-) diff --git a/vnpy/app/spread_trading/algo.py b/vnpy/app/spread_trading/algo.py index 13b3e968..bda5d317 100644 --- a/vnpy/app/spread_trading/algo.py +++ b/vnpy/app/spread_trading/algo.py @@ -1,5 +1,4 @@ from typing import Any -from math import floor, ceil from vnpy.trader.constant import Direction from vnpy.trader.object import (TickData, OrderData, TradeData) @@ -35,6 +34,10 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): def on_tick(self, tick: TickData): """""" + # Return if tick not inited + if not self.spread.bid_volume or not self.spread.ask_volume: + return + # Return if there are any existing orders if not self.check_order_finished(): return @@ -114,7 +117,7 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): # Calculate passive leg target volume and do hedge for leg in self.spread.passive_legs: - passive_traded = self.leg_orders[leg.vt_symbol] + passive_traded = self.leg_traded[leg.vt_symbol] passive_target = self.spread.calculate_leg_volume( leg.vt_symbol, hedge_volume @@ -133,6 +136,6 @@ class SpreadTakerAlgo(SpreadAlgoTemplate): if leg_volume > 0: price = leg_tick.ask_price_1 + leg_contract.pricetick * self.payup self.send_long_order(leg.vt_symbol, price, abs(leg_volume)) - else: + elif leg_volume < 0: price = leg_tick.bid_price_1 - leg_contract.pricetick * self.payup self.send_short_order(leg.vt_symbol, price, abs(leg_volume)) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index e12afeb2..a9f1d66e 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -11,15 +11,15 @@ from vnpy.trader.event import ( from vnpy.trader.utility import load_json, save_json from vnpy.trader.object import ( TickData, ContractData, LogData, - SubscribeRequest, OrderRequest, CancelRequest + SubscribeRequest, OrderRequest ) from vnpy.trader.constant import Direction, Offset, OrderType -from vnpy.trader.converter import OffsetConverter, PositionHolding +from vnpy.trader.converter import OffsetConverter from .base import ( LegData, SpreadData, EVENT_SPREAD_DATA, EVENT_SPREAD_ALGO, - EVENT_SPREAD_LOG, EVENT_SPREAD_STRATEGY + EVENT_SPREAD_LOG ) from .template import SpreadAlgoTemplate from .algo import SpreadTakerAlgo @@ -333,7 +333,8 @@ class SpreadAlgoEngine: price: float, volume: float, payup: int, - interval: int + interval: int, + lock: bool ) -> str: # Find spread object spread = self.spreads.get(spread_name, None) @@ -355,7 +356,8 @@ class SpreadAlgoEngine: price, volume, payup, - interval + interval, + lock ) self.algos[algoid] = algo @@ -420,13 +422,13 @@ class SpreadAlgoEngine: offset = Offset.CLOSE original_req = OrderRequest( - contract.symbol, - contract.exchange, - direction, - offset, - OrderType.LIMIT, - price, - volume + symbol=contract.symbol, + exchange=contract.exchange, + direction=direction, + offset=offset, + type=OrderType.LIMIT, + price=price, + volume=volume ) # Convert with offset converter diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 0a0767ec..cef6781e 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -55,6 +55,8 @@ class SpreadAlgoTemplate: self.leg_traded: Dict[str, float] = defaultdict(int) self.leg_orders: Dict[str, List[str]] = defaultdict(list) + self.write_log("算法已启动") + def is_active(self): """""" if self.status not in [Status.CANCELLED, Status.ALLTRADED]: @@ -105,6 +107,7 @@ class SpreadAlgoTemplate: if self.is_active(): self.cancel_all_order() self.status = Status.CANCELLED + self.write_log("算法已停止") self.put_event() def update_tick(self, tick: TickData): @@ -118,14 +121,25 @@ class SpreadAlgoTemplate: else: self.leg_traded[trade.vt_symbol] -= trade.volume + msg = "委托成交,{},{},{}@{}".format( + trade.vt_symbol, + trade.direction, + trade.volume, + trade.price + ) + self.write_log(msg) + self.calculate_traded() + self.put_event() self.on_trade(trade) def update_order(self, order: OrderData): """""" if not order.is_active(): - self.leg_orders[order.vt_symbol].remove(order.vt_orderid) + vt_orderids = self.leg_orders[order.vt_symbol] + if order.vt_orderid in vt_orderids: + vt_orderids.remove(order.vt_orderid) self.on_order(order) @@ -144,7 +158,7 @@ class SpreadAlgoTemplate: def write_log(self, msg: str): """""" - self.algo_engine.write_algo_log(msg) + self.algo_engine.write_algo_log(self, msg) def send_long_order(self, vt_symbol: str, price: float, volume: float): """""" @@ -173,10 +187,18 @@ class SpreadAlgoTemplate: self.leg_orders[vt_symbol].extend(vt_orderids) + msg = "发出委托,{},{},{}@{}".format( + vt_symbol, + direction, + volume, + price + ) + self.write_log(msg) + def cancel_leg_order(self, vt_symbol: str): """""" for vt_orderid in self.leg_orders[vt_symbol]: - self.algo_engine.cancel_order(vt_orderid) + self.algo_engine.cancel_order(self, vt_orderid) def cancel_all_order(self): """""" @@ -201,8 +223,10 @@ class SpreadAlgoTemplate: else: if adjusted_leg_traded > 0: self.traded = min(self.traded, adjusted_leg_traded) - else: + elif adjusted_leg_traded < 0: self.traded = max(self.traded, adjusted_leg_traded) + else: + self.traded = 0 self.traded_volume = abs(self.traded) diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index 644bcef7..33ab52c9 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -9,9 +9,8 @@ from vnpy.trader.ui import QtWidgets, QtCore, QtGui from vnpy.trader.ui.widget import ( BaseMonitor, BaseCell, BidCell, AskCell, - TimeCell, MsgCell, - PnlCell, DirectionCell, - EnumCell, + TimeCell, PnlCell, + DirectionCell, EnumCell, ) from ..engine import ( @@ -19,8 +18,7 @@ from ..engine import ( APP_NAME, EVENT_SPREAD_DATA, EVENT_SPREAD_LOG, - EVENT_SPREAD_ALGO, - EVENT_SPREAD_STRATEGY + EVENT_SPREAD_ALGO ) @@ -153,7 +151,7 @@ class SpreadAlgoMonitor(BaseMonitor): headers = { "algoid": {"display": "算法", "cell": BaseCell, "update": False}, "spread_name": {"display": "价差", "cell": BaseCell, "update": False}, - "direction": {"display": "方向", "cell": EnumCell, "update": False}, + "direction": {"display": "方向", "cell": DirectionCell, "update": False}, "price": {"display": "价格", "cell": BaseCell, "update": False}, "payup": {"display": "超价", "cell": BaseCell, "update": False}, "volume": {"display": "数量", "cell": BaseCell, "update": False}, @@ -239,7 +237,7 @@ class SpreadAlgoDialog(QtWidgets.QDialog): form.addRow("数量", self.volume_line) form.addRow("超价", self.payup_line) form.addRow("间隔", self.interval_line) - form.addRow("锁仓", self.lock_line) + form.addRow("锁仓", self.lock_combo) form.addRow(button_start) self.setLayout(form) diff --git a/vnpy/gateway/bitmex/bitmex_gateway.py b/vnpy/gateway/bitmex/bitmex_gateway.py index ca62365f..18de3404 100644 --- a/vnpy/gateway/bitmex/bitmex_gateway.py +++ b/vnpy/gateway/bitmex/bitmex_gateway.py @@ -471,7 +471,10 @@ class BitmexRestApi(RestClient): headers = request.response.headers self.rate_limit_remaining = int(headers["x-ratelimit-remaining"]) - self.rate_limit_sleep = int(headers.get("Retry-After", 0)) + 1 # 1 extra second sleep + + self.rate_limit_sleep = int(headers.get("Retry-After", 0)) + if self.rate_limit_sleep: + self.rate_limit_sleep += 1 # 1 extra second sleep def reset_rate_limit(self): """ diff --git a/vnpy/trader/constant.py b/vnpy/trader/constant.py index 7bce5e10..72aea310 100644 --- a/vnpy/trader/constant.py +++ b/vnpy/trader/constant.py @@ -117,6 +117,7 @@ class Exchange(Enum): BINANCE = "BINANCE" COINBASE = "COINBASE" + class Currency(Enum): """ Currency. diff --git a/vnpy/trader/ui/widget.py b/vnpy/trader/ui/widget.py index 78f860dd..591b0b00 100644 --- a/vnpy/trader/ui/widget.py +++ b/vnpy/trader/ui/widget.py @@ -158,7 +158,7 @@ class TimeCell(BaseCell): """ if content is None: return - + timestamp = content.strftime("%H:%M:%S") millisecond = int(content.microsecond / 1000) From f46f796475e4283464cb0d3a3f80c8ec244abec3 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Mon, 16 Sep 2019 17:22:47 +0800 Subject: [PATCH 12/41] [Mod] move leg multiplier to SpreadData --- vnpy/app/spread_trading/base.py | 67 ++++++++++++++++------------- vnpy/app/spread_trading/engine.py | 27 ++++++++---- vnpy/app/spread_trading/template.py | 4 +- 3 files changed, 58 insertions(+), 40 deletions(-) diff --git a/vnpy/app/spread_trading/base.py b/vnpy/app/spread_trading/base.py index aee999c4..d9ab9529 100644 --- a/vnpy/app/spread_trading/base.py +++ b/vnpy/app/spread_trading/base.py @@ -15,21 +15,10 @@ EVENT_SPREAD_STRATEGY = "eSpreadStrategy" class LegData: """""" - def __init__( - self, - vt_symbol: str, - price_multiplier: float, - trading_multiplier: float - ): + def __init__(self, vt_symbol: str): """""" self.vt_symbol: str = vt_symbol - # For calculating spread price - self.price_multiplier: float = price_multiplier - - # For calculating spread pos and sending orders - self.trading_multiplier: float = trading_multiplier - # Price and position data self.bid_price: float = 0 self.ask_price: float = 0 @@ -66,6 +55,8 @@ class SpreadData: self, name: str, legs: List[LegData], + price_multipliers: Dict[str, int], + trading_multipliers: Dict[str, int], active_symbol: str ): """""" @@ -75,6 +66,12 @@ class SpreadData: self.active_leg: LegData = None self.passive_legs: List[LegData] = [] + # For calculating spread price + self.price_multipliers: Dict[str: int] = price_multipliers + + # For calculating spread pos and sending orders + self.trading_multipliers: Dict[str: int] = trading_multipliers + self.price_formula: str = "" self.trading_formula: str = "" @@ -85,15 +82,17 @@ class SpreadData: else: self.passive_legs.append(leg) - if leg.price_multiplier > 0: - self.price_formula += f"+{leg.trading_multiplier}*{leg.vt_symbol}" + price_multiplier = self.price_multipliers[leg.vt_symbol] + if price_multiplier > 0: + self.price_formula += f"+{price_multiplier}*{leg.vt_symbol}" else: - self.price_formula += f"{leg.trading_multiplier}*{leg.vt_symbol}" + self.price_formula += f"{price_multiplier}*{leg.vt_symbol}" - if leg.trading_multiplier > 0: - self.trading_formula += f"+{leg.trading_multiplier}*{leg.vt_symbol}" + trading_multiplier = self.trading_multipliers[leg.vt_symbol] + if trading_multiplier > 0: + self.trading_formula += f"+{trading_multiplier}*{leg.vt_symbol}" else: - self.trading_formula += f"{leg.trading_multiplier}*{leg.vt_symbol}" + self.trading_formula += f"{trading_multiplier}*{leg.vt_symbol}" # Spread data self.bid_price: float = 0 @@ -116,24 +115,27 @@ class SpreadData: return # Calculate price - if leg.price_multiplier > 0: - self.bid_price += leg.bid_price * leg.price_multiplier - self.ask_price += leg.ask_price * leg.price_multiplier + price_multiplier = self.price_multipliers[leg.vt_symbol] + if price_multiplier > 0: + self.bid_price += leg.bid_price * price_multiplier + self.ask_price += leg.ask_price * price_multiplier else: - self.bid_price += leg.ask_price * leg.price_multiplier - self.ask_price += leg.bid_price * leg.price_multiplier + self.bid_price += leg.ask_price * price_multiplier + self.ask_price += leg.bid_price * price_multiplier # Calculate volume - if leg.trading_multiplier > 0: + trading_multiplier = self.trading_multipliers[leg.vt_symbol] + + if trading_multiplier > 0: adjusted_bid_volume = floor( - leg.bid_volume / leg.trading_multiplier) + leg.bid_volume / trading_multiplier) adjusted_ask_volume = floor( - leg.ask_volume / leg.trading_multiplier) + leg.ask_volume / trading_multiplier) else: adjusted_bid_volume = floor( - leg.ask_volume / abs(leg.trading_multiplier)) + leg.ask_volume / abs(trading_multiplier)) adjusted_ask_volume = floor( - leg.bid_volume / abs(leg.trading_multiplier)) + leg.bid_volume / abs(trading_multiplier)) # For the first leg, just initialize if not n: @@ -152,7 +154,8 @@ class SpreadData: self.net_pos = 0 for n, leg in enumerate(self.legs.values()): - adjusted_net_pos = leg.net_pos / leg.trading_multiplier + trading_multiplier = self.trading_multipliers[leg.vt_symbol] + adjusted_net_pos = leg.net_pos / trading_multiplier if adjusted_net_pos > 0: adjusted_net_pos = floor(adjusted_net_pos) @@ -177,13 +180,15 @@ class SpreadData: def calculate_leg_volume(self, vt_symbol: str, spread_volume: float) -> float: """""" leg = self.legs[vt_symbol] - leg_volume = spread_volume * leg.trading_multiplier + trading_multiplier = self.trading_multipliers[leg.vt_symbol] + leg_volume = spread_volume * trading_multiplier return leg_volume def calculate_spread_volume(self, vt_symbol: str, leg_volume: float) -> float: """""" leg = self.legs[vt_symbol] - spread_volume = leg_volume / leg.trading_multiplier + trading_multiplier = self.trading_multipliers[leg.vt_symbol] + spread_volume = leg_volume / trading_multiplier if spread_volume > 0: spread_volume = floor(spread_volume) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index a9f1d66e..71be653b 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -107,10 +107,13 @@ class SpreadDataEngine: for spread in self.spreads.values(): leg_settings = [] for leg in spread.legs.values(): + price_multiplier = spread.price_multipliers[leg.vt_symbol] + trading_multiplier = spread.trading_multipliers[leg.vt_symbol] + leg_setting = { "vt_symbol": leg.vt_symbol, - "price_multiplier": leg.price_multiplier, - "trading_multiplier": leg.trading_multiplier + "price_multiplier": price_multiplier, + "trading_multiplier": trading_multiplier } leg_settings.append(leg_setting) @@ -185,21 +188,28 @@ class SpreadDataEngine: return legs: List[LegData] = [] + price_multipliers: Dict[str, int] = {} + trading_multipliers: Dict[str, int] = {} + for leg_setting in leg_settings: vt_symbol = leg_setting["vt_symbol"] leg = self.legs.get(vt_symbol, None) if not leg: - leg = LegData( - vt_symbol, - leg_setting["price_multiplier"], - leg_setting["trading_multiplier"] - ) + leg = LegData(vt_symbol) self.legs[vt_symbol] = leg legs.append(leg) + price_multipliers[vt_symbol] = leg_setting["price_multiplier"] + trading_multipliers[vt_symbol] = leg_setting["trading_multiplier"] - spread = SpreadData(name, legs, active_symbol) + spread = SpreadData( + name, + legs, + price_multipliers, + trading_multipliers, + active_symbol + ) self.spreads[name] = spread for leg in spread.legs.values(): @@ -221,6 +231,7 @@ class SpreadDataEngine: for leg in spread.legs: self.symbol_spread_map[leg.vt_symbol].remove(spread) + self.save_setting() self.write_log("价差删除成功:{}".format(name)) diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index cef6781e..c723010c 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -211,7 +211,9 @@ class SpreadAlgoTemplate: for n, leg in enumerate(self.spread.legs.values()): leg_traded = self.leg_traded[leg.vt_symbol] - adjusted_leg_traded = leg_traded / leg.trading_multiplier + trading_multiplier = self.spread.trading_multipliers[ + leg.vt_symbol] + adjusted_leg_traded = leg_traded / trading_multiplier if adjusted_leg_traded > 0: adjusted_leg_traded = floor(adjusted_leg_traded) From bbd62e02b72e8a0cd92b3f0a4404ebfae2084725 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Mon, 16 Sep 2019 23:06:40 +0800 Subject: [PATCH 13/41] [Mod] add EVENT_SPREAD_POS event type --- vnpy/app/spread_trading/base.py | 41 ++++++++++++++++++++++++++-- vnpy/app/spread_trading/ui/widget.py | 8 ++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/vnpy/app/spread_trading/base.py b/vnpy/app/spread_trading/base.py index d9ab9529..5eff4b48 100644 --- a/vnpy/app/spread_trading/base.py +++ b/vnpy/app/spread_trading/base.py @@ -2,11 +2,12 @@ from typing import Dict, List from math import floor, ceil from datetime import datetime -from vnpy.trader.object import TickData, PositionData -from vnpy.trader.constant import Direction +from vnpy.trader.object import TickData, PositionData, TradeData +from vnpy.trader.constant import Direction, Offset, Exchange EVENT_SPREAD_DATA = "eSpreadData" +EVENT_SPREAD_POS = "eSpreadPos" EVENT_SPREAD_LOG = "eSpreadLog" EVENT_SPREAD_ALGO = "eSpreadAlgo" EVENT_SPREAD_STRATEGY = "eSpreadStrategy" @@ -29,6 +30,9 @@ class LegData: self.short_pos: float = 0 self.net_pos: float = 0 + # Tick data buf + self.tick: TickData = None + def update_tick(self, tick: TickData): """""" self.bid_price = tick.bid_price_1 @@ -36,6 +40,8 @@ class LegData: self.bid_volume = tick.bid_volume_1 self.ask_volume = tick.ask_volume_1 + self.tick = tick + def update_position(self, position: PositionData): """""" if position.direction == Direction.NET: @@ -47,6 +53,21 @@ class LegData: self.short_pos = position.volume self.net_pos = self.long_pos - self.short_pos + def update_trade(self, trade: TradeData): + """""" + if trade.direction == Direction.LONG: + if trade.offset == Offset.OPEN: + self.long_pos += trade.volume + else: + self.short_pos -= trade.volume + else: + if trade.offset == Offset.OPEN: + self.short_pos += trade.volume + else: + self.long_pos -= trade.volume + + self.net_pos = self.long_pos - self.net_pos + class SpreadData: """""" @@ -196,3 +217,19 @@ class SpreadData: spread_volume = ceil(spread_volume) return spread_volume + + def to_tick(self): + """""" + tick = TickData( + symbol=self.name, + exchange=Exchange.LOCAL, + datetime=self.datetime, + name=self.name, + last_price=(self.bid_price + self.ask_price) / 2, + bid_price_1=self.bid_price, + ask_price_1=self.ask_price, + bid_volume_1=self.bid_volume, + ask_volume_1=self.ask_volume, + gateway_name="SPREAD" + ) + return tick diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index 33ab52c9..289b38fa 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -17,6 +17,7 @@ from ..engine import ( SpreadEngine, APP_NAME, EVENT_SPREAD_DATA, + EVENT_SPREAD_POS, EVENT_SPREAD_LOG, EVENT_SPREAD_ALGO ) @@ -105,6 +106,13 @@ class SpreadDataMonitor(BaseMonitor): "datetime": {"display": "时间", "cell": TimeCell, "update": True}, } + def register_event(self): + """ + Register event handler into event engine. + """ + super().register_event() + self.event_engine.register(EVENT_SPREAD_POS, self.signal.emit) + class SpreadLogMonitor(QtWidgets.QTextEdit): """ From 68090e4552e4e471edc41655c2d7589b51995d9f Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Mon, 16 Sep 2019 23:33:36 +0800 Subject: [PATCH 14/41] [Mod] add SpreadStrategyTemplate for creating spread strategies --- vnpy/app/spread_trading/engine.py | 135 ++++++++++++++++++++++-- vnpy/app/spread_trading/template.py | 155 +++++++++++++++++++++++++++- vnpy/trader/constant.py | 3 + 3 files changed, 285 insertions(+), 8 deletions(-) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 71be653b..deb7e801 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -18,10 +18,11 @@ from vnpy.trader.converter import OffsetConverter from .base import ( LegData, SpreadData, - EVENT_SPREAD_DATA, EVENT_SPREAD_ALGO, - EVENT_SPREAD_LOG + EVENT_SPREAD_DATA, EVENT_SPREAD_POS, + EVENT_SPREAD_ALGO, EVENT_SPREAD_LOG, + EVENT_SPREAD_STRATEGY ) -from .template import SpreadAlgoTemplate +from .template import SpreadAlgoTemplate, SpreadStrategyTemplate from .algo import SpreadTakerAlgo @@ -129,6 +130,7 @@ class SpreadDataEngine: def register_event(self) -> None: """""" self.event_engine.register(EVENT_TICK, self.process_tick_event) + self.event_engine.register(EVENT_TRADE, self.process_trade_event) self.event_engine.register(EVENT_POSITION, self.process_position_event) self.event_engine.register(EVENT_CONTRACT, self.process_contract_event) @@ -143,8 +145,7 @@ class SpreadDataEngine: for spread in self.symbol_spread_map[tick.vt_symbol]: spread.calculate_price() - - self.put_data_event(spread) + self.put_data_event(spread) def process_position_event(self, event: Event) -> None: """""" @@ -157,8 +158,20 @@ class SpreadDataEngine: for spread in self.symbol_spread_map[position.vt_symbol]: spread.calculate_pos() + self.put_pos_event(spread) - self.put_data_event(spread) + def process_trade_event(self, event: Event) -> None: + """""" + trade = event.data + + leg = self.legs.get(trade.vt_symbol, None) + if not leg: + return + leg.update_trade(trade) + + for spread in self.symbol_spread_map[trade.vt_symbol]: + spread.calculate_pos() + self.put_pos_event(spread) def process_contract_event(self, event: Event) -> None: """""" @@ -175,6 +188,11 @@ class SpreadDataEngine: event = Event(EVENT_SPREAD_DATA, spread) self.event_engine.put(event) + def put_pos_event(self, spread: SpreadData) -> None: + """""" + event = Event(EVENT_SPREAD_POS, spread) + self.event_engine.put(event) + def add_spread( self, name: str, @@ -483,3 +501,108 @@ class SpreadAlgoEngine: def get_contract(self, vt_symbol: str) -> ContractData: """""" return self.main_engine.get_contract(vt_symbol) + + +class SpreadStrategyEngine: + """""" + + def __init__(self, spread_engine: SpreadEngine): + """""" + self.spread_engine: SpreadEngine = spread_engine + self.main_engine: MainEngine = spread_engine.main_engine + self.event_engine: EventEngine = spread_engine.event_engine + + self.write_log = spread_engine.write_log + + self.strategies: Dict[str: SpreadStrategyTemplate] = {} + + self.order_strategy_map: dict[str: SpreadStrategyTemplate] = {} + self.name_strategy_map: dict[str: SpreadStrategyTemplate] = defaultdict( + list) + + self.vt_tradeids: Set = set() + + def start(self): + """""" + self.load_setting() + self.register_event() + + self.write_log("价差策略引擎启动成功") + + def load_setting(self): + """""" + pass + + def save_setting(self): + """""" + pass + + def register_event(self): + """""" + ee = self.event_engine + ee.register(EVENT_ORDER, self.process_order_event) + ee.register(EVENT_TRADE, self.process_trade_event) + ee.register(EVENT_SPREAD_DATA, self.process_spread_data_event) + ee.register(EVENT_SPREAD_POS, self.process_spread_pos_event) + ee.register(EVENT_SPREAD_ALGO, self.process_spread_algo_event) + + def process_spread_data_event(self, event: Event): + """""" + pass + + def process_spread_pos_event(self, event: Event): + """""" + pass + + def process_spread_algo_event(self, event: Event): + """""" + pass + + def process_order_event(self, event: Event): + """""" + pass + + def process_trade_event(self, event: Event): + """""" + pass + + def start_algo( + self, + strategy: SpreadStrategyTemplate, + direction: Direction, + price: float, + volume: float, + payup: int, + interval: int, + lock: bool + ) -> str: + """""" + pass + + def stop_algo(self, algoid: str): + """""" + pass + + def send_order( + self, + strategy: SpreadStrategyTemplate, + vt_symbol: str, + price: float, + volume: float, + direction: Direction, + offset: Offset + ) -> str: + pass + + def cancel_order(self, vt_orderid: str): + """""" + pass + + def put_strategy_event(self, strategy: SpreadStrategyTemplate): + """""" + pass + + def write_strategy_log(self, strategy: SpreadStrategyTemplate, msg: str): + """""" + pass + diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index c723010c..8f428d4b 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -4,7 +4,7 @@ from typing import Dict, List from math import floor, ceil from vnpy.trader.object import TickData, TradeData, OrderData, ContractData -from vnpy.trader.constant import Direction, Status +from vnpy.trader.constant import Direction, Status, Offset from vnpy.trader.utility import virtual from .base import SpreadData @@ -12,7 +12,7 @@ from .base import SpreadData class SpreadAlgoTemplate: """ - Template for writing spread trading algos. + Template for implementing spread trading algos. """ algo_name = "AlgoTemplate" @@ -266,3 +266,154 @@ class SpreadAlgoTemplate: def on_interval(self): """""" pass + + +class SpreadStrategyTemplate: + """ + Template for implementing spread trading strategies. + """ + strategy_name = "StrategyTemplate" + + def __init__( + self, + strategy_engine, + strategy_id: str, + spread: SpreadData + ): + """""" + self.strategy_engine = strategy_engine + self.strategy_id = strategy_id + self.spread = spread + + @virtual + def on_spread_data(self): + """""" + pass + + @virtual + def on_spread_pos(self): + """""" + pass + + @virtual + def on_spread_algo(self, algo: SpreadAlgoTemplate): + """""" + pass + + @virtual + def on_order(self, order: OrderData): + """""" + pass + + @virtual + def on_trade(self, trade: TradeData): + """""" + pass + + def start_algo( + self, + direction: Direction, + price: float, + volume: float, + payup: int, + interval: int, + lock: bool + ) -> str: + """""" + pass + + def start_long_algo( + self, + price: float, + volume: float, + payup: int, + interval: int, + lock: bool + ) -> str: + """""" + return self.start_algo(Direction.LONG, price, volume, payup, interval, lock) + + def start_short_algo( + self, + price: float, + volume: float, + payup: int, + interval: int, + lock: bool + ) -> str: + """""" + return self.start_algo(Direction.SHORT, price, volume, payup, interval, lock) + + def stop_algo(self, algoid: str): + """""" + pass + + def buy(self, vt_symbol: str, price: float, volume: float): + """""" + return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.OPEN) + + def sell(self, vt_symbol: str, price: float, volume: float): + """""" + return self.send_order(vt_symbol, price, volume, Direction.SHORT, Offset.CLOSE) + + def short(self, vt_symbol: str, price: float, volume: float): + """""" + return self.send_order(vt_symbol, price, volume, Direction.SHORT, Offset.OPEN) + + def cover(self, vt_symbol: str, price: float, volume: float): + """""" + return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.CLOSE) + + def send_order( + self, + vt_symbol: str, + price: float, + volume: float, + direction: Direction, + offset: Offset + ): + """""" + pass + + def cancel_order(self, vt_orderid: str): + """""" + pass + + def put_event(self): + """""" + pass + + def write_log(self, msg: str): + """""" + pass + + def get_spread_tick(self) -> TickData: + """""" + return self.spread.to_tick() + + def get_spread_pos(self) -> float: + """""" + return self.spread.net_pos + + def get_leg_tick(self, vt_symbol: str) -> TickData: + """""" + leg = self.spread.legs.get(vt_symbol, None) + + if not leg: + return None + + return leg.tick + + def get_leg_pos(self, vt_symbol: str, direction: Direction = Direction.NET) -> float: + """""" + leg = self.spread.legs.get(vt_symbol, None) + + if not leg: + return None + + if direction == Direction.NET: + return leg.net_pos + elif direction == Direction.LONG: + return leg.long_pos + else: + return leg.short_pos diff --git a/vnpy/trader/constant.py b/vnpy/trader/constant.py index 72aea310..1ebb2aa8 100644 --- a/vnpy/trader/constant.py +++ b/vnpy/trader/constant.py @@ -117,6 +117,9 @@ class Exchange(Enum): BINANCE = "BINANCE" COINBASE = "COINBASE" + # Special Function + LOCAL = "LOCAL" # For local generated data + class Currency(Enum): """ From 3b9f1c314826b202f26f17012d37b9a7f32bb916 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 16:26:48 +0800 Subject: [PATCH 15/41] [Add] SpreadStrategyEngine for managing spread trading strategies --- vnpy/app/spread_trading/engine.py | 326 ++++++++++++++++++++++++++-- vnpy/app/spread_trading/template.py | 227 ++++++++++++++++--- 2 files changed, 504 insertions(+), 49 deletions(-) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index deb7e801..6025d30e 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -1,6 +1,10 @@ -from typing import List, Dict, Set +import traceback +import importlib +import os +from typing import List, Dict, Set, Callable, Any, Type from collections import defaultdict from copy import copy +from path import Path from vnpy.event import EventEngine, Event from vnpy.trader.engine import BaseEngine, MainEngine @@ -40,6 +44,7 @@ class SpreadEngine(BaseEngine): self.data_engine: SpreadDataEngine = SpreadDataEngine(self) self.algo_engine: SpreadAlgoEngine = SpreadAlgoEngine(self) + self.strategy_engine: SpreadStrategyEngine = SpreadStrategyEngine(self) self.add_spread = self.data_engine.add_spread self.remove_spread = self.data_engine.remove_spread @@ -506,6 +511,8 @@ class SpreadAlgoEngine: class SpreadStrategyEngine: """""" + setting_filename = "spraed_trading_strategy.json" + def __init__(self, spread_engine: SpreadEngine): """""" self.spread_engine: SpreadEngine = spread_engine @@ -514,28 +521,107 @@ class SpreadStrategyEngine: self.write_log = spread_engine.write_log + self.strategy_setting: Dict[str: Dict] = {} + + self.classes: Dict[str: Type[SpreadStrategyTemplate]] = {} self.strategies: Dict[str: SpreadStrategyTemplate] = {} self.order_strategy_map: dict[str: SpreadStrategyTemplate] = {} - self.name_strategy_map: dict[str: SpreadStrategyTemplate] = defaultdict( + self.algo_strategy_map: dict[str: SpreadStrategyTemplate] = {} + self.spread_strategy_map: dict[str: SpreadStrategyTemplate] = defaultdict( list) self.vt_tradeids: Set = set() def start(self): """""" - self.load_setting() + self.load_strategy_class() + self.load_strategy_setting() self.register_event() self.write_log("价差策略引擎启动成功") - def load_setting(self): + def close(self): """""" - pass + self.stop_all_strategies() - def save_setting(self): - """""" - pass + def load_strategy_class(self): + """ + Load strategy class from source code. + """ + path1 = Path(__file__).parent.joinpath("strategies") + self.load_strategy_class_from_folder( + path1, "vnpy.app.cta_strategy.strategies") + + path2 = Path.cwd().joinpath("strategies") + self.load_strategy_class_from_folder(path2, "strategies") + + def load_strategy_class_from_folder(self, path: Path, module_name: str = ""): + """ + Load strategy class from certain folder. + """ + for dirpath, dirnames, filenames in os.walk(str(path)): + for filename in filenames: + if filename.endswith(".py"): + strategy_module_name = ".".join( + [module_name, filename.replace(".py", "")]) + elif filename.endswith(".pyd"): + strategy_module_name = ".".join( + [module_name, filename.split(".")[0]]) + + self.load_strategy_class_from_module(strategy_module_name) + + def load_strategy_class_from_module(self, module_name: str): + """ + Load strategy class from module file. + """ + try: + module = importlib.import_module(module_name) + + for name in dir(module): + value = getattr(module, name) + if (isinstance(value, type) and issubclass(value, SpreadStrategyTemplate) and value is not SpreadStrategyTemplate): + self.classes[value.__name__] = value + except: # noqa + msg = f"策略文件{module_name}加载失败,触发异常:\n{traceback.format_exc()}" + self.write_log(msg) + + def load_strategy_setting(self): + """ + Load setting file. + """ + self.strategy_setting = load_json(self.setting_filename) + + for strategy_name, strategy_config in self.strategy_setting.items(): + self.add_strategy( + strategy_config["class_name"], + strategy_name, + strategy_config["spread_name"], + strategy_config["setting"] + ) + + def update_strategy_setting(self, strategy_name: str, setting: dict): + """ + Update setting file. + """ + strategy = self.strategies[strategy_name] + + self.strategy_setting[strategy_name] = { + "class_name": strategy.__class__.__name__, + "spread_name": strategy.spread_name, + "setting": setting, + } + save_json(self.setting_filename, self.strategy_setting) + + def remove_strategy_setting(self, strategy_name: str): + """ + Update setting file. + """ + if strategy_name not in self.strategy_setting: + return + + self.strategy_setting.pop(strategy_name) + save_json(self.setting_filename, self.strategy_setting) def register_event(self): """""" @@ -548,27 +634,152 @@ class SpreadStrategyEngine: def process_spread_data_event(self, event: Event): """""" - pass + spread = event.data + strategies = self.spread_strategy_map[spread.name] + + for strategy in strategies: + self.call_strategy_func(strategy, strategy.on_spread_data) def process_spread_pos_event(self, event: Event): """""" - pass + spread = event.data + strategies = self.spread_strategy_map[spread.name] + + for strategy in strategies: + self.call_strategy_func(strategy, strategy.on_spread_pos) def process_spread_algo_event(self, event: Event): """""" - pass + algo = event.data + strategy = self.algo_strategy_map.get(algo.algoid, None) + + if strategy: + self.call_strategy_func(strategy, strategy.update_spread_algo, algo) def process_order_event(self, event: Event): """""" - pass + order = event.data + strategy = self.order_strategy_map.get(order.vt_orderid, None) + + if strategy: + self.call_strategy_func(strategy, strategy.update_order, order) def process_trade_event(self, event: Event): """""" - pass + trade = event.data + strategy = self.trade_strategy_map.get(trade.vt_orderid, None) + + if strategy: + self.call_strategy_func(strategy, strategy.on_trade, trade) + + def call_strategy_func( + self, strategy: SpreadStrategyTemplate, func: Callable, params: Any = None + ): + """ + Call function of a strategy and catch any exception raised. + """ + try: + if params: + func(params) + else: + func() + except Exception: + strategy.trading = False + strategy.inited = False + + msg = f"触发异常已停止\n{traceback.format_exc()}" + self.write_log(msg, strategy) + + def add_strategy( + self, class_name: str, strategy_name: str, spread_name: str, setting: dict + ): + """ + Add a new strategy. + """ + if strategy_name in self.strategies: + self.write_log(f"创建策略失败,存在重名{strategy_name}") + return + + strategy_class = self.classes.get(class_name, None) + if not strategy_class: + self.write_log(f"创建策略失败,找不到策略类{class_name}") + return + + strategy = strategy_class(self, strategy_name, spread_name, setting) + self.strategies[strategy_name] = strategy + + # Add vt_symbol to strategy map. + strategies = self.spread_strategy_map[spread_name] + strategies.append(strategy) + + # Update to setting file. + self.update_strategy_setting(strategy_name, setting) + + self.put_strategy_event(strategy) + + def init_strategy(self, strategy_name: str): + """""" + strategy = self.strategies[strategy_name] + + if strategy.inited: + self.write_log(f"{strategy_name}已经完成初始化,禁止重复操作") + return + + self.call_strategy_func(strategy, strategy.on_init) + strategy.inited = True + + self.put_strategy_event(strategy) + self.write_log(f"{strategy_name}初始化完成") + + def start_strategy(self, strategy_name: str): + """""" + strategy = self.strategies[strategy_name] + if not strategy.inited: + self.write_log(f"策略{strategy.strategy_name}启动失败,请先初始化") + return + + if strategy.trading: + self.write_log(f"{strategy_name}已经启动,请勿重复操作") + return + + self.call_strategy_func(strategy, strategy.on_start) + strategy.trading = True + + self.put_strategy_event(strategy) + + def stop_strategy(self, strategy_name: str): + """""" + strategy = self.strategies[strategy_name] + if not strategy.trading: + return + + self.call_strategy_func(strategy, strategy.on_stop) + strategy.trading = False + + strategy.stop_all_algos() + strategy.cancel_all_orders() + + self.put_strategy_event(strategy) + + def init_all_strategies(self): + """""" + for strategy in self.strategies.values(): + self.init_strategy(strategy) + + def start_all_strategies(self): + """""" + for strategy in self.strategies.values(): + self.start_strategy(strategy) + + def stop_all_strategies(self): + """""" + for strategy in self.strategies.values(): + self.stop_strategy(strategy) def start_algo( self, strategy: SpreadStrategyTemplate, + spread_name: str, direction: Direction, price: float, volume: float, @@ -577,9 +788,25 @@ class SpreadStrategyEngine: lock: bool ) -> str: """""" - pass + algoid = self.spread_engine.start_algo( + spread_name, + direction, + price, + volume, + payup, + interval, + lock + ) - def stop_algo(self, algoid: str): + self.algo_strategy_map[algoid] = strategy + + return algoid + + def stop_algo(self, strategy: SpreadStrategyTemplate, algoid: str): + """""" + self.spread_engine.stop_algo(algoid) + + def stop_all_algos(self, strategy: SpreadStrategyTemplate): """""" pass @@ -590,19 +817,74 @@ class SpreadStrategyEngine: price: float, volume: float, direction: Direction, - offset: Offset - ) -> str: - pass + offset: Offset, + lock: bool + ) -> List[str]: + contract = self.main_engine.get_contract(vt_symbol) - def cancel_order(self, vt_orderid: str): + original_req = OrderRequest( + symbol=contract.symbol, + exchange=contract.exchange, + direction=direction, + offset=offset, + type=OrderType.LIMIT, + price=price, + volume=volume + ) + + # Convert with offset converter + req_list = self.offset_converter.convert_order_request( + original_req, lock) + + # Send Orders + vt_orderids = [] + + for req in req_list: + vt_orderid = self.main_engine.send_order( + req, contract.gateway_name) + + # Check if sending order successful + if not vt_orderid: + continue + + vt_orderids.append(vt_orderid) + + self.offset_converter.update_order_request(req, vt_orderid) + + # Save relationship between orderid and strategy. + self.order_strategy_map[vt_orderid] = strategy + + return vt_orderids + + def cancel_order(self, strategy: SpreadStrategyTemplate, vt_orderid: str): + """""" + order = self.main_engine.get_order(vt_orderid) + if not order: + self.write_strategy_log(strategy, "撤单失败,找不到委托{}".format(vt_orderid)) + return + + req = order.create_cancel_request() + self.main_engine.cancel_order(req, order.gateway_name) + + def cancel_all_orders(self, strategy: SpreadStrategyTemplate): """""" pass def put_strategy_event(self, strategy: SpreadStrategyTemplate): """""" - pass + event = Event(EVENT_SPREAD_STRATEGY, strategy) + self.event_engine.put(event) def write_strategy_log(self, strategy: SpreadStrategyTemplate, msg: str): """""" - pass - + msg = f"{strategy.strategy_name}:{msg}" + self.write_log(msg) + + def send_strategy_email(self, strategy: SpreadStrategyTemplate, msg: str): + """""" + if strategy: + subject = f"{strategy.strategy_name}" + else: + subject = "价差策略引擎" + + self.main_engine.send_email(subject, msg) diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 8f428d4b..88f572ed 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -1,7 +1,8 @@ from collections import defaultdict -from typing import Dict, List +from typing import Dict, List, Set from math import floor, ceil +from copy import copy from vnpy.trader.object import TickData, TradeData, OrderData, ContractData from vnpy.trader.constant import Direction, Status, Offset @@ -272,42 +273,158 @@ class SpreadStrategyTemplate: """ Template for implementing spread trading strategies. """ - strategy_name = "StrategyTemplate" + + author: str = "" + parameters: List[str] = [] + variables: List[str] = [] def __init__( self, strategy_engine, - strategy_id: str, - spread: SpreadData + strategy_name: str, + spread: SpreadData, + setting: dict ): """""" self.strategy_engine = strategy_engine - self.strategy_id = strategy_id + self.strategy_name = strategy_name self.spread = spread + self.spread_name = spread.name + + self.inited = False + self.trading = False + + self.variables = copy(self.variables) + self.variables.insert(0, "inited") + self.variables.insert(1, "trading") + + self.vt_orderids: Set[str] = set() + self.algoids: Set[str] = set() + + self.update_setting(setting) + + def update_setting(self, setting: dict): + """ + Update strategy parameter wtih value in setting dict. + """ + for name in self.parameters: + if name in setting: + setattr(self, name, setting[name]) + + @classmethod + def get_class_parameters(cls): + """ + Get default parameters dict of strategy class. + """ + class_parameters = {} + for name in cls.parameters: + class_parameters[name] = getattr(cls, name) + return class_parameters + + def get_parameters(self): + """ + Get strategy parameters dict. + """ + strategy_parameters = {} + for name in self.parameters: + strategy_parameters[name] = getattr(self, name) + return strategy_parameters + + def get_variables(self): + """ + Get strategy variables dict. + """ + strategy_variables = {} + for name in self.variables: + strategy_variables[name] = getattr(self, name) + return strategy_variables + + def get_data(self): + """ + Get strategy data. + """ + strategy_data = { + "strategy_name": self.strategy_name, + "spread_name": self.spread_name, + "class_name": self.__class__.__name__, + "author": self.author, + "parameters": self.get_parameters(), + "variables": self.get_variables(), + } + return strategy_data + + def update_spread_algo(self, algo: SpreadAlgoTemplate): + """ + Callback when algo status is updated. + """ + if not algo.is_active() and algo.algoid in self.algoids: + self.algoids.pop(algo.algoid) + + self.on_spread_algo(algo) + + def update_order(self, order: OrderData): + """ + Callback when order status is updated. + """ + if not order.is_active() and order.vt_orderid in self.vt_orderids: + self.vt_orderids.pop(order.vt_orderid) + + self.on_order(order) + + @virtual + def on_init(self): + """ + Callback when strategy is inited. + """ + pass + + @virtual + def on_start(self): + """ + Callback when strategy is started. + """ + pass + + @virtual + def on_stop(self): + """ + Callback when strategy is stopped. + """ + pass @virtual def on_spread_data(self): - """""" + """ + Callback when spread price is updated. + """ pass @virtual def on_spread_pos(self): - """""" + """ + Callback when spread position is updated. + """ pass @virtual def on_spread_algo(self, algo: SpreadAlgoTemplate): - """""" + """ + Callback when algo status is updated. + """ pass @virtual def on_order(self, order: OrderData): - """""" + """ + Callback when order status is updated. + """ pass @virtual def on_trade(self, trade: TradeData): - """""" + """ + Callback when new trade data is received. + """ pass def start_algo( @@ -320,7 +437,23 @@ class SpreadStrategyTemplate: lock: bool ) -> str: """""" - pass + if not self.trading: + return "" + + algoid: str = self.strategy_engine.start_algo( + self, + self.spread_name, + direction, + price, + volume, + payup, + interval, + lock + ) + + self.algoids.add(algoid) + + return algoid def start_long_algo( self, @@ -346,23 +479,31 @@ class SpreadStrategyTemplate: def stop_algo(self, algoid: str): """""" - pass + if not self.trading: + return - def buy(self, vt_symbol: str, price: float, volume: float): - """""" - return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.OPEN) + self.strategy_engine.stop_algo(self, algoid) - def sell(self, vt_symbol: str, price: float, volume: float): + def stop_all_algos(self): """""" - return self.send_order(vt_symbol, price, volume, Direction.SHORT, Offset.CLOSE) + for algoid in self.algoids: + self.stop_algo(algoid) - def short(self, vt_symbol: str, price: float, volume: float): + def buy(self, vt_symbol: str, price: float, volume: float, lock: bool = False) -> List[str]: """""" - return self.send_order(vt_symbol, price, volume, Direction.SHORT, Offset.OPEN) + return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.OPEN, lock) - def cover(self, vt_symbol: str, price: float, volume: float): + def sell(self, vt_symbol: str, price: float, volume: float, lock: bool = False) -> List[str]: """""" - return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.CLOSE) + return self.send_order(vt_symbol, price, volume, Direction.SHORT, Offset.CLOSE, lock) + + def short(self, vt_symbol: str, price: float, volume: float, lock: bool = False) -> List[str]: + """""" + return self.send_order(vt_symbol, price, volume, Direction.SHORT, Offset.OPEN, lock) + + def cover(self, vt_symbol: str, price: float, volume: float, lock: bool = False) -> List[str]: + """""" + return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.CLOSE, lock) def send_order( self, @@ -370,22 +511,47 @@ class SpreadStrategyTemplate: price: float, volume: float, direction: Direction, - offset: Offset - ): + offset: Offset, + lock: bool + ) -> List[str]: """""" - pass + if not self.trading: + return [] + + vt_orderids: List[str] = self.strategy_engine.send_order( + self, + vt_symbol, + price, + volume, + direction, + offset, + lock + ) + + for vt_orderid in vt_orderids: + self.vt_orderids.add(vt_orderid) + + return vt_orderids def cancel_order(self, vt_orderid: str): """""" - pass + if not self.trading: + return + + self.strategy_engine.cancel_order(self, vt_orderid) + + def cancel_all_orders(self): + """""" + for vt_orderid in self.vt_orderids: + self.cancel_order(vt_orderid) def put_event(self): """""" - pass + self.strategy_engine.put_strategy_event(self) def write_log(self, msg: str): """""" - pass + self.strategy_engine.write_strategy_log(self, msg) def get_spread_tick(self) -> TickData: """""" @@ -417,3 +583,10 @@ class SpreadStrategyTemplate: return leg.long_pos else: return leg.short_pos + + def send_email(self, msg: str): + """ + Send email to default receiver. + """ + if self.inited: + self.strategy_engine.send_email(msg, self) From 80d89d1cb802eb18952d67b5f7d7cc2738282cb8 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 17:41:20 +0800 Subject: [PATCH 16/41] [Add] UI component for managing strategies --- vnpy/app/spread_trading/engine.py | 6 +- vnpy/app/spread_trading/ui/widget.py | 414 +++++++++++++++++++++++++-- 2 files changed, 393 insertions(+), 27 deletions(-) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 6025d30e..84e65393 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -4,7 +4,7 @@ import os from typing import List, Dict, Set, Callable, Any, Type from collections import defaultdict from copy import copy -from path import Path +from pathlib import Path from vnpy.event import EventEngine, Event from vnpy.trader.engine import BaseEngine, MainEngine @@ -586,6 +586,10 @@ class SpreadStrategyEngine: msg = f"策略文件{module_name}加载失败,触发异常:\n{traceback.format_exc()}" self.write_log(msg) + def get_all_strategy_class_names(self): + """""" + return list(self.classes.keys()) + def load_strategy_setting(self): """ Load setting file. diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index 289b38fa..c5038f3d 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -15,11 +15,13 @@ from vnpy.trader.ui.widget import ( from ..engine import ( SpreadEngine, + SpreadStrategyEngine, APP_NAME, EVENT_SPREAD_DATA, EVENT_SPREAD_POS, EVENT_SPREAD_LOG, - EVENT_SPREAD_ALGO + EVENT_SPREAD_ALGO, + EVENT_SPREAD_STRATEGY ) @@ -40,7 +42,9 @@ class SpreadManager(QtWidgets.QWidget): """""" self.setWindowTitle("价差交易") - self.algo_dialog = SpreadAlgoDialog(self.spread_engine) + self.algo_dialog = SpreadAlgoWidget(self.spread_engine) + algo_tab = self.create_tab("交易", self.algo_dialog) + algo_tab.setMaximumWidth(300) self.data_monitor = SpreadDataMonitor( self.main_engine, @@ -54,22 +58,19 @@ class SpreadManager(QtWidgets.QWidget): self.spread_engine ) - add_spread_button = QtWidgets.QPushButton("创建价差") - add_spread_button.clicked.connect(self.add_spread) + self.strategy_monitor = SpreadStrategyMonitor( + self.spread_engine + ) - vbox1 = QtWidgets.QVBoxLayout() - vbox1.addWidget(self.algo_dialog) - vbox1.addStretch() - vbox1.addWidget(add_spread_button) - - vbox2 = QtWidgets.QVBoxLayout() - vbox2.addWidget(self.data_monitor) - vbox2.addWidget(self.log_monitor) + grid = QtWidgets.QGridLayout() + grid.addWidget(self.create_tab("价差", self.data_monitor), 0, 0) + grid.addWidget(self.create_tab("日志", self.log_monitor), 1, 0) + grid.addWidget(self.create_tab("算法", self.algo_monitor), 0, 1) + grid.addWidget(self.create_tab("策略", self.strategy_monitor), 1, 1) hbox = QtWidgets.QHBoxLayout() - hbox.addLayout(vbox1) - hbox.addLayout(vbox2) - hbox.addWidget(self.algo_monitor) + hbox.addWidget(algo_tab) + hbox.addLayout(grid) self.setLayout(hbox) @@ -79,10 +80,11 @@ class SpreadManager(QtWidgets.QWidget): self.showMaximized() - def add_spread(self): + def create_tab(self, title: str, widget: QtWidgets.QWidget): """""" - dialog = SpreadDataDialog(self.spread_engine) - dialog.exec_() + tab = QtWidgets.QTabWidget() + tab.addTab(widget, title) + return tab class SpreadDataMonitor(BaseMonitor): @@ -96,14 +98,14 @@ class SpreadDataMonitor(BaseMonitor): headers = { "name": {"display": "名称", "cell": BaseCell, "update": False}, - "price_formula": {"display": "定价", "cell": BaseCell, "update": False}, - "trading_formula": {"display": "交易", "cell": BaseCell, "update": False}, "bid_volume": {"display": "买量", "cell": BidCell, "update": True}, "bid_price": {"display": "买价", "cell": BidCell, "update": True}, "ask_price": {"display": "卖价", "cell": AskCell, "update": True}, "ask_volume": {"display": "卖量", "cell": AskCell, "update": True}, "net_pos": {"display": "净仓", "cell": PnlCell, "update": True}, "datetime": {"display": "时间", "cell": TimeCell, "update": True}, + "price_formula": {"display": "定价", "cell": BaseCell, "update": False}, + "trading_formula": {"display": "交易", "cell": BaseCell, "update": False}, } def register_event(self): @@ -143,7 +145,7 @@ class SpreadLogMonitor(QtWidgets.QTextEdit): def process_log_event(self, event: Event): """""" log = event.data - msg = f"{log.time}:{log.msg}" + msg = f"{log.time.strftime('%H:%M:%S')}:{log.msg}" self.append(msg) @@ -192,7 +194,7 @@ class SpreadAlgoMonitor(BaseMonitor): self.spread_engine.stop_algo(algo.algoid) -class SpreadAlgoDialog(QtWidgets.QDialog): +class SpreadAlgoWidget(QtWidgets.QFrame): """""" def __init__(self, spread_engine: SpreadEngine): @@ -200,12 +202,16 @@ class SpreadAlgoDialog(QtWidgets.QDialog): super().__init__() self.spread_engine: SpreadEngine = spread_engine + self.strategy_engine: SpreadStrategyEngine = spread_engine.strategy_engine self.init_ui() + self.update_class_combo() def init_ui(self): """""" self.setWindowTitle("启动算法") + self.setFrameShape(self.Box) + self.setLineWidth(1) self.name_line = QtWidgets.QLineEdit() @@ -238,6 +244,26 @@ class SpreadAlgoDialog(QtWidgets.QDialog): ["否", "是"] ) + self.class_combo = QtWidgets.QComboBox() + + add_button = QtWidgets.QPushButton("添加策略") + add_button.clicked.connect(self.add_strategy) + + init_button = QtWidgets.QPushButton("全部初始化") + init_button.clicked.connect(self.strategy_engine.init_all_strategies) + + start_button = QtWidgets.QPushButton("全部启动") + start_button.clicked.connect(self.strategy_engine.start_all_strategies) + + stop_button = QtWidgets.QPushButton("全部停止") + stop_button.clicked.connect(self.strategy_engine.stop_all_strategies) + + add_spread_button = QtWidgets.QPushButton("创建价差") + add_spread_button.clicked.connect(self.add_spread) + + remove_spread_button = QtWidgets.QPushButton("移除价差") + remove_spread_button.clicked.connect(self.remove_spread) + form = QtWidgets.QFormLayout() form.addRow("价差", self.name_line) form.addRow("方向", self.direction_combo) @@ -248,7 +274,19 @@ class SpreadAlgoDialog(QtWidgets.QDialog): form.addRow("锁仓", self.lock_combo) form.addRow(button_start) - self.setLayout(form) + vbox = QtWidgets.QVBoxLayout() + vbox.addLayout(form) + vbox.addStretch() + vbox.addWidget(self.class_combo) + vbox.addWidget(add_button) + vbox.addWidget(init_button) + vbox.addWidget(start_button) + vbox.addWidget(stop_button) + vbox.addStretch() + vbox.addWidget(add_spread_button) + vbox.addWidget(remove_spread_button) + + self.setLayout(vbox) def start_algo(self): """""" @@ -269,6 +307,46 @@ class SpreadAlgoDialog(QtWidgets.QDialog): name, direction, price, volume, payup, interval, lock ) + def add_spread(self): + """""" + dialog = SpreadDataDialog(self.spread_engine) + dialog.exec_() + + def remove_spread(self): + """""" + pass + + def update_class_combo(self): + """""" + self.class_combo.addItems( + self.strategy_engine.get_all_strategy_class_names() + ) + + def remove_strategy(self, strategy_name): + """""" + manager = self.managers.pop(strategy_name) + manager.deleteLater() + + def add_strategy(self): + """""" + class_name = str(self.class_combo.currentText()) + if not class_name: + return + + parameters = self.strategy_engine.get_strategy_class_parameters( + class_name) + editor = SettingEditor(parameters, class_name=class_name) + n = editor.exec_() + + if n == editor.Accepted: + setting = editor.get_setting() + spread_name = setting.pop("spread_name") + strategy_name = setting.pop("strategy_name") + + self.strategy_engine.add_strategy( + class_name, strategy_name, spread_name, setting + ) + class SpreadDataDialog(QtWidgets.QDialog): """""" @@ -354,12 +432,12 @@ class SpreadDataDialog(QtWidgets.QDialog): leg_settings = {} for d in self.leg_widgets: try: - vt_symbol = d["symbol"].text() + spread_name = d["symbol"].text() price_multiplier = int(d["price"].text()) trading_multiplier = int(d["trading"].text()) - leg_settings[vt_symbol] = { - "vt_symbol": vt_symbol, + leg_settings[spread_name] = { + "spread_name": spread_name, "price_multiplier": price_multiplier, "trading_multiplier": trading_multiplier } @@ -390,3 +468,287 @@ class SpreadDataDialog(QtWidgets.QDialog): active_symbol ) self.accept() + + +class SpreadStrategyMonitor(QtWidgets.QScrollArea): + """""" + + signal_strategy = QtCore.pyqtSignal(Event) + + def __init__(self, spread_engine: SpreadEngine): + super().__init__() + + self.strategy_engine = spread_engine.strategy_engine + self.main_engine = spread_engine.main_engine + self.event_engine = spread_engine.event_engine + + self.managers = {} + + self.init_ui() + self.register_event() + + def init_ui(self): + """""" + self.scroll_layout = QtWidgets.QVBoxLayout() + self.scroll_layout.addStretch() + + scroll_widget = QtWidgets.QWidget() + scroll_widget.setLayout(self.scroll_layout) + + self.setWidgetResizable(True) + self.setWidget(scroll_widget) + + def register_event(self): + """""" + self.signal_strategy.connect(self.process_strategy_event) + + self.event_engine.register( + EVENT_SPREAD_STRATEGY, self.signal_strategy.emit + ) + + def process_strategy_event(self, event): + """ + Update strategy status onto its monitor. + """ + data = event.data + strategy_name = data["strategy_name"] + + if strategy_name in self.managers: + manager = self.managers[strategy_name] + manager.update_data(data) + else: + manager = SpreadStrategyWidget(self.strategy_engine, data) + self.scroll_layout.insertWidget(0, manager) + self.managers[strategy_name] = manager + + +class SpreadStrategyWidget(QtWidgets.QFrame): + """ + Manager for a strategy + """ + + def __init__( + self, + strategy_engine: SpreadStrategyEngine, + data: dict + ): + """""" + super().__init__() + + self.strategy_engine = strategy_engine + + self.strategy_name = data["strategy_name"] + self._data = data + + self.init_ui() + + def init_ui(self): + """""" + self.setFixedHeight(300) + self.setFrameShape(self.Box) + self.setLineWidth(1) + + init_button = QtWidgets.QPushButton("初始化") + init_button.clicked.connect(self.init_strategy) + + start_button = QtWidgets.QPushButton("启动") + start_button.clicked.connect(self.start_strategy) + + stop_button = QtWidgets.QPushButton("停止") + stop_button.clicked.connect(self.stop_strategy) + + edit_button = QtWidgets.QPushButton("编辑") + edit_button.clicked.connect(self.edit_strategy) + + remove_button = QtWidgets.QPushButton("移除") + remove_button.clicked.connect(self.remove_strategy) + + strategy_name = self._data["strategy_name"] + spread_name = self._data["spread_name"] + class_name = self._data["class_name"] + author = self._data["author"] + + label_text = ( + f"{strategy_name} - {spread_name} ({class_name} by {author})" + ) + label = QtWidgets.QLabel(label_text) + label.setAlignment(QtCore.Qt.AlignCenter) + + self.parameters_monitor = StrategyDataMonitor(self._data["parameters"]) + self.variables_monitor = StrategyDataMonitor(self._data["variables"]) + + hbox = QtWidgets.QHBoxLayout() + hbox.addWidget(init_button) + hbox.addWidget(start_button) + hbox.addWidget(stop_button) + hbox.addWidget(edit_button) + hbox.addWidget(remove_button) + + vbox = QtWidgets.QVBoxLayout() + vbox.addWidget(label) + vbox.addLayout(hbox) + vbox.addWidget(self.parameters_monitor) + vbox.addWidget(self.variables_monitor) + self.setLayout(vbox) + + def update_data(self, data: dict): + """""" + self._data = data + + self.parameters_monitor.update_data(data["parameters"]) + self.variables_monitor.update_data(data["variables"]) + + def init_strategy(self): + """""" + self.strategy_engine.init_strategy(self.strategy_name) + + def start_strategy(self): + """""" + self.strategy_engine.start_strategy(self.strategy_name) + + def stop_strategy(self): + """""" + self.strategy_engine.stop_strategy(self.strategy_name) + + def edit_strategy(self): + """""" + strategy_name = self._data["strategy_name"] + + parameters = self.strategy_engine.get_strategy_parameters( + strategy_name) + editor = SettingEditor(parameters, strategy_name=strategy_name) + n = editor.exec_() + + if n == editor.Accepted: + setting = editor.get_setting() + self.strategy_engine.edit_strategy(strategy_name, setting) + + def remove_strategy(self): + """""" + result = self.strategy_engine.remove_strategy(self.strategy_name) + + # Only remove strategy gui manager if it has been removed from engine + if result: + self.spread_manager.remove_strategy(self.strategy_name) + + +class StrategyDataMonitor(QtWidgets.QTableWidget): + """ + Table monitor for parameters and variables. + """ + + def __init__(self, data: dict): + """""" + super().__init__() + + self._data = data + self.cells = {} + + self.init_ui() + + def init_ui(self): + """""" + labels = list(self._data.keys()) + self.setColumnCount(len(labels)) + self.setHorizontalHeaderLabels(labels) + + self.setRowCount(1) + self.verticalHeader().setSectionResizeMode( + QtWidgets.QHeaderView.Stretch + ) + self.verticalHeader().setVisible(False) + self.setEditTriggers(self.NoEditTriggers) + + for column, name in enumerate(self._data.keys()): + value = self._data[name] + + cell = QtWidgets.QTableWidgetItem(str(value)) + cell.setTextAlignment(QtCore.Qt.AlignCenter) + + self.setItem(0, column, cell) + self.cells[name] = cell + + def update_data(self, data: dict): + """""" + for name, value in data.items(): + cell = self.cells[name] + cell.setText(str(value)) + + +class SettingEditor(QtWidgets.QDialog): + """ + For creating new strategy and editing strategy parameters. + """ + + def __init__( + self, parameters: dict, strategy_name: str = "", class_name: str = "" + ): + """""" + super(SettingEditor, self).__init__() + + self.parameters = parameters + self.strategy_name = strategy_name + self.class_name = class_name + + self.edits = {} + + self.init_ui() + + def init_ui(self): + """""" + form = QtWidgets.QFormLayout() + + # Add vt_symbol and name edit if add new strategy + if self.class_name: + self.setWindowTitle(f"添加策略:{self.class_name}") + button_text = "添加" + parameters = {"strategy_name": "", "vt_symbol": ""} + parameters.update(self.parameters) + else: + self.setWindowTitle(f"参数编辑:{self.strategy_name}") + button_text = "确定" + parameters = self.parameters + + for name, value in parameters.items(): + type_ = type(value) + + edit = QtWidgets.QLineEdit(str(value)) + if type_ is int: + validator = QtGui.QIntValidator() + edit.setValidator(validator) + elif type_ is float: + validator = QtGui.QDoubleValidator() + edit.setValidator(validator) + + form.addRow(f"{name} {type_}", edit) + + self.edits[name] = (edit, type_) + + button = QtWidgets.QPushButton(button_text) + button.clicked.connect(self.accept) + form.addRow(button) + + self.setLayout(form) + + def get_setting(self): + """""" + setting = {} + + if self.class_name: + setting["class_name"] = self.class_name + + for name, tp in self.edits.items(): + edit, type_ = tp + value_text = edit.text() + + if type_ == bool: + if value_text == "True": + value = True + else: + value = False + else: + value = type_(value_text) + + setting[name] = value + + return setting From 6a5d04e61f65dc4cf18a96c9413f8468ff9546c1 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 22:35:40 +0800 Subject: [PATCH 17/41] [Add] BasicSpreadStrategy for demo --- examples/vn_trader/run.py | 2 +- vnpy/app/spread_trading/__init__.py | 13 +- vnpy/app/spread_trading/engine.py | 120 +++++++++++-- .../app/spread_trading/strategies/__init__.py | 0 .../strategies/basic_spread_strategy.py | 168 ++++++++++++++++++ vnpy/app/spread_trading/template.py | 16 +- vnpy/app/spread_trading/ui/widget.py | 100 ++++++++--- 7 files changed, 371 insertions(+), 48 deletions(-) create mode 100644 vnpy/app/spread_trading/strategies/__init__.py create mode 100644 vnpy/app/spread_trading/strategies/basic_spread_strategy.py diff --git a/examples/vn_trader/run.py b/examples/vn_trader/run.py index f063a687..229679e6 100644 --- a/examples/vn_trader/run.py +++ b/examples/vn_trader/run.py @@ -75,7 +75,7 @@ def main(): # main_engine.add_gateway(DaGateway) main_engine.add_gateway(CoinbaseGateway) - # main_engine.add_app(CtaStrategyApp) + main_engine.add_app(CtaStrategyApp) # main_engine.add_app(CtaBacktesterApp) # main_engine.add_app(CsvLoaderApp) # main_engine.add_app(AlgoTradingApp) diff --git a/vnpy/app/spread_trading/__init__.py b/vnpy/app/spread_trading/__init__.py index 36ab7f9b..360a4390 100644 --- a/vnpy/app/spread_trading/__init__.py +++ b/vnpy/app/spread_trading/__init__.py @@ -1,8 +1,19 @@ from pathlib import Path from vnpy.trader.app import BaseApp +from vnpy.trader.object import ( + OrderData, + TradeData +) -from .engine import SpreadEngine, APP_NAME +from .engine import ( + SpreadEngine, + APP_NAME, + SpreadData, + LegData, + SpreadStrategyTemplate, + SpreadAlgoTemplate +) class SpreadTradingApp(BaseApp): diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 84e65393..c3157b6a 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -48,6 +48,8 @@ class SpreadEngine(BaseEngine): self.add_spread = self.data_engine.add_spread self.remove_spread = self.data_engine.remove_spread + self.get_spread = self.data_engine.get_spread + self.get_all_spreads = self.data_engine.get_all_spreads self.start_algo = self.algo_engine.start_algo self.stop_algo = self.algo_engine.stop_algo @@ -60,6 +62,13 @@ class SpreadEngine(BaseEngine): self.data_engine.start() self.algo_engine.start() + self.strategy_engine.start() + + def stop(self): + """""" + self.data_engine.stop() + self.algo_engine.stop() + self.strategy_engine.stop() def write_log(self, msg: str): """""" @@ -94,6 +103,10 @@ class SpreadDataEngine: self.write_log("价差数据引擎启动成功") + def stop(self): + """""" + pass + def load_setting(self) -> None: """""" setting = load_json(self.setting_filename) @@ -251,11 +264,20 @@ class SpreadDataEngine: spread = self.spreads.pop(name) - for leg in spread.legs: + for leg in spread.legs.values(): self.symbol_spread_map[leg.vt_symbol].remove(spread) self.save_setting() - self.write_log("价差删除成功:{}".format(name)) + self.write_log("价差移除成功:{},重启后生效".format(name)) + + def get_spread(self, name: str) -> SpreadData: + """""" + spread = self.spreads.get(name, None) + return spread + + def get_all_spreads(self) -> List[SpreadData]: + """""" + return list(self.spreads.values()) class SpreadAlgoEngine: @@ -289,6 +311,11 @@ class SpreadAlgoEngine: self.write_log("价差算法引擎启动成功") + def stop(self): + """""" + for algo in self.algos.values(): + self.stop_algo(algo) + def register_event(self): """""" self.event_engine.register(EVENT_TICK, self.process_tick_event) @@ -533,9 +560,10 @@ class SpreadStrategyEngine: self.vt_tradeids: Set = set() + self.load_strategy_class() + def start(self): """""" - self.load_strategy_class() self.load_strategy_setting() self.register_event() @@ -551,7 +579,7 @@ class SpreadStrategyEngine: """ path1 = Path(__file__).parent.joinpath("strategies") self.load_strategy_class_from_folder( - path1, "vnpy.app.cta_strategy.strategies") + path1, "vnpy.app.spread_trading.strategies") path2 = Path.cwd().joinpath("strategies") self.load_strategy_class_from_folder(path2, "strategies") @@ -642,7 +670,8 @@ class SpreadStrategyEngine: strategies = self.spread_strategy_map[spread.name] for strategy in strategies: - self.call_strategy_func(strategy, strategy.on_spread_data) + if strategy.inited: + self.call_strategy_func(strategy, strategy.on_spread_data) def process_spread_pos_event(self, event: Event): """""" @@ -650,7 +679,8 @@ class SpreadStrategyEngine: strategies = self.spread_strategy_map[spread.name] for strategy in strategies: - self.call_strategy_func(strategy, strategy.on_spread_pos) + if strategy.inited: + self.call_strategy_func(strategy, strategy.on_spread_pos) def process_spread_algo_event(self, event: Event): """""" @@ -671,7 +701,7 @@ class SpreadStrategyEngine: def process_trade_event(self, event: Event): """""" trade = event.data - strategy = self.trade_strategy_map.get(trade.vt_orderid, None) + strategy = self.order_strategy_map.get(trade.vt_orderid, None) if strategy: self.call_strategy_func(strategy, strategy.on_trade, trade) @@ -692,7 +722,7 @@ class SpreadStrategyEngine: strategy.inited = False msg = f"触发异常已停止\n{traceback.format_exc()}" - self.write_log(msg, strategy) + self.write_strategy_log(strategy, msg) def add_strategy( self, class_name: str, strategy_name: str, spread_name: str, setting: dict @@ -709,7 +739,12 @@ class SpreadStrategyEngine: self.write_log(f"创建策略失败,找不到策略类{class_name}") return - strategy = strategy_class(self, strategy_name, spread_name, setting) + spread = self.spread_engine.get_spread(spread_name) + if not spread: + self.write_log(f"创建策略失败,找不到价差{spread_name}") + return + + strategy = strategy_class(self, strategy_name, spread, setting) self.strategies[strategy_name] = strategy # Add vt_symbol to strategy map. @@ -721,6 +756,37 @@ class SpreadStrategyEngine: self.put_strategy_event(strategy) + def edit_strategy(self, strategy_name: str, setting: dict): + """ + Edit parameters of a strategy. + """ + strategy = self.strategies[strategy_name] + strategy.update_setting(setting) + + self.update_strategy_setting(strategy_name, setting) + self.put_strategy_event(strategy) + + def remove_strategy(self, strategy_name: str): + """ + Remove a strategy. + """ + strategy = self.strategies[strategy_name] + if strategy.trading: + self.write_log(f"策略{strategy.strategy_name}移除失败,请先停止") + return + + # Remove setting + self.remove_strategy_setting(strategy_name) + + # Remove from symbol strategy map + strategies = self.spread_strategy_map[strategy.spread_name] + strategies.remove(strategy) + + # Remove from strategies + self.strategies.pop(strategy_name) + + return True + def init_strategy(self, strategy_name: str): """""" strategy = self.strategies[strategy_name] @@ -758,28 +824,48 @@ class SpreadStrategyEngine: return self.call_strategy_func(strategy, strategy.on_stop) - strategy.trading = False - + strategy.stop_all_algos() strategy.cancel_all_orders() + strategy.trading = False + self.put_strategy_event(strategy) def init_all_strategies(self): """""" - for strategy in self.strategies.values(): + for strategy in self.strategies.keys(): self.init_strategy(strategy) def start_all_strategies(self): """""" - for strategy in self.strategies.values(): + for strategy in self.strategies.keys(): self.start_strategy(strategy) def stop_all_strategies(self): """""" - for strategy in self.strategies.values(): + for strategy in self.strategies.keys(): self.stop_strategy(strategy) + def get_strategy_class_parameters(self, class_name: str): + """ + Get default parameters of a strategy class. + """ + strategy_class = self.classes[class_name] + + parameters = {} + for name in strategy_class.parameters: + parameters[name] = getattr(strategy_class, name) + + return parameters + + def get_strategy_parameters(self, strategy_name): + """ + Get parameters of a strategy. + """ + strategy = self.strategies[strategy_name] + return strategy.get_parameters() + def start_algo( self, strategy: SpreadStrategyTemplate, @@ -864,7 +950,8 @@ class SpreadStrategyEngine: """""" order = self.main_engine.get_order(vt_orderid) if not order: - self.write_strategy_log(strategy, "撤单失败,找不到委托{}".format(vt_orderid)) + self.write_strategy_log( + strategy, "撤单失败,找不到委托{}".format(vt_orderid)) return req = order.create_cancel_request() @@ -876,7 +963,8 @@ class SpreadStrategyEngine: def put_strategy_event(self, strategy: SpreadStrategyTemplate): """""" - event = Event(EVENT_SPREAD_STRATEGY, strategy) + data = strategy.get_data() + event = Event(EVENT_SPREAD_STRATEGY, data) self.event_engine.put(event) def write_strategy_log(self, strategy: SpreadStrategyTemplate, msg: str): diff --git a/vnpy/app/spread_trading/strategies/__init__.py b/vnpy/app/spread_trading/strategies/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vnpy/app/spread_trading/strategies/basic_spread_strategy.py b/vnpy/app/spread_trading/strategies/basic_spread_strategy.py new file mode 100644 index 00000000..b1213531 --- /dev/null +++ b/vnpy/app/spread_trading/strategies/basic_spread_strategy.py @@ -0,0 +1,168 @@ +from vnpy.app.spread_trading import ( + SpreadStrategyTemplate, + SpreadAlgoTemplate, + SpreadData, + OrderData, + TradeData +) + + +class BasicSpreadStrategy(SpreadStrategyTemplate): + """""" + + author = "用Python的交易员" + + buy_price = 0.0 + sell_price = 0.0 + cover_price = 0.0 + short_price = 0.0 + max_pos = 0.0 + payup = 10 + interval = 5 + + spread_pos = 0.0 + buy_algoid = "" + sell_algoid = "" + short_algoid = "" + cover_algoid = "" + + parameters = [ + "buy_price", + "sell_price", + "cover_price", + "short_price", + "max_pos", + "payup", + "interval" + ] + variables = [ + "spread_pos", + "buy_algoid", + "sell_algoid", + "short_algoid", + "cover_algoid", + ] + + def __init__( + self, + strategy_engine, + strategy_name: str, + spread: SpreadData, + setting: dict + ): + """""" + super().__init__( + strategy_engine, strategy_name, spread, setting + ) + + def on_init(self): + """ + Callback when strategy is inited. + """ + self.write_log("策略初始化") + + def on_start(self): + """ + Callback when strategy is started. + """ + self.write_log("策略启动") + + def on_stop(self): + """ + Callback when strategy is stopped. + """ + self.write_log("策略停止") + + self.buy_algoid = "" + self.sell_algoid = "" + self.short_algoid = "" + self.cover_algoid = "" + self.put_event() + + def on_spread_data(self): + """ + Callback when spread price is updated. + """ + self.spread_pos = self.get_spread_pos() + + # No position + if not self.spread_pos: + # Start open algos + if not self.buy_algoid: + self.buy_algoid = self.start_long_algo( + self.buy_price, self.max_pos, self.payup, self.interval + ) + + if not self.short_algoid: + self.short_algoid = self.start_short_algo( + self.short_price, self.max_pos, self.payup, self.interval + ) + + # Stop close algos + if self.sell_algoid: + self.stop_algo(self.sell_algoid) + + if self.cover_algoid: + self.stop_algo(self.cover_algoid) + + # Long position + elif self.spread_pos > 0: + # Start sell close algo + if not self.sell_algoid: + self.sell_algoid = self.start_short_algo( + self.sell_price, self.spread_pos, self.payup, self.interval + ) + + # Stop buy open algo + if self.buy_algoid: + self.stop_algo(self.buy_algoid) + + # Short position + elif self.spread_pos < 0: + # Start cover close algo + if not self.cover_algoid: + self.cover_algoid = self.start_long_algo( + self.cover_price, abs( + self.spread_pos), self.payup, self.interval + ) + + # Stop short open algo + if self.short_algoid: + self.stop_algo(self.short_algoid) + + self.put_event() + + def on_spread_pos(self): + """ + Callback when spread position is updated. + """ + self.spread_pos = self.get_spread_pos() + self.put_event() + + def on_spread_algo(self, algo: SpreadAlgoTemplate): + """ + Callback when algo status is updated. + """ + if not algo.is_active(): + if self.buy_algoid == algo.algoid: + self.buy_algoid = "" + elif self.sell_algoid == algo.algoid: + self.sell_algoid = "" + elif self.short_algoid == algo.algoid: + self.short_algoid = "" + else: + self.cover_algoid = "" + + self.put_event() + + def on_order(self, order: OrderData): + """ + Callback when order status is updated. + """ + pass + + def on_trade(self, trade: TradeData): + """ + Callback when new trade data is received. + """ + pass diff --git a/vnpy/app/spread_trading/template.py b/vnpy/app/spread_trading/template.py index 88f572ed..de4ca343 100644 --- a/vnpy/app/spread_trading/template.py +++ b/vnpy/app/spread_trading/template.py @@ -147,11 +147,11 @@ class SpreadAlgoTemplate: def update_timer(self): """""" self.count += 1 - if self.count < self.interval: - return - self.count = 0 + if self.count > self.interval: + self.count = 0 + self.on_interval() - self.on_interval() + self.put_event() def put_event(self): """""" @@ -358,7 +358,7 @@ class SpreadStrategyTemplate: Callback when algo status is updated. """ if not algo.is_active() and algo.algoid in self.algoids: - self.algoids.pop(algo.algoid) + self.algoids.remove(algo.algoid) self.on_spread_algo(algo) @@ -367,7 +367,7 @@ class SpreadStrategyTemplate: Callback when order status is updated. """ if not order.is_active() and order.vt_orderid in self.vt_orderids: - self.vt_orderids.pop(order.vt_orderid) + self.vt_orderids.remove(order.vt_orderid) self.on_order(order) @@ -461,7 +461,7 @@ class SpreadStrategyTemplate: volume: float, payup: int, interval: int, - lock: bool + lock: bool = False ) -> str: """""" return self.start_algo(Direction.LONG, price, volume, payup, interval, lock) @@ -472,7 +472,7 @@ class SpreadStrategyTemplate: volume: float, payup: int, interval: int, - lock: bool + lock: bool = False ) -> str: """""" return self.start_algo(Direction.SHORT, price, volume, payup, interval, lock) diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index c5038f3d..35415892 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -34,6 +34,7 @@ class SpreadManager(QtWidgets.QWidget): self.main_engine = main_engine self.event_engine = event_engine + self.spread_engine = main_engine.get_engine(APP_NAME) self.init_ui() @@ -43,8 +44,8 @@ class SpreadManager(QtWidgets.QWidget): self.setWindowTitle("价差交易") self.algo_dialog = SpreadAlgoWidget(self.spread_engine) - algo_tab = self.create_tab("交易", self.algo_dialog) - algo_tab.setMaximumWidth(300) + algo_group = self.create_group("交易", self.algo_dialog) + algo_group.setMaximumWidth(300) self.data_monitor = SpreadDataMonitor( self.main_engine, @@ -63,13 +64,13 @@ class SpreadManager(QtWidgets.QWidget): ) grid = QtWidgets.QGridLayout() - grid.addWidget(self.create_tab("价差", self.data_monitor), 0, 0) - grid.addWidget(self.create_tab("日志", self.log_monitor), 1, 0) - grid.addWidget(self.create_tab("算法", self.algo_monitor), 0, 1) - grid.addWidget(self.create_tab("策略", self.strategy_monitor), 1, 1) + grid.addWidget(self.create_group("价差", self.data_monitor), 0, 0) + grid.addWidget(self.create_group("日志", self.log_monitor), 1, 0) + grid.addWidget(self.create_group("算法", self.algo_monitor), 0, 1) + grid.addWidget(self.create_group("策略", self.strategy_monitor), 1, 1) hbox = QtWidgets.QHBoxLayout() - hbox.addWidget(algo_tab) + hbox.addWidget(algo_group) hbox.addLayout(grid) self.setLayout(hbox) @@ -77,14 +78,20 @@ class SpreadManager(QtWidgets.QWidget): def show(self): """""" self.spread_engine.start() - + self.algo_dialog.update_class_combo() self.showMaximized() - def create_tab(self, title: str, widget: QtWidgets.QWidget): + def create_group(self, title: str, widget: QtWidgets.QWidget): """""" - tab = QtWidgets.QTabWidget() - tab.addTab(widget, title) - return tab + group = QtWidgets.QGroupBox() + + vbox = QtWidgets.QVBoxLayout() + vbox.addWidget(widget) + + group.setLayout(vbox) + group.setTitle(title) + + return group class SpreadDataMonitor(BaseMonitor): @@ -145,7 +152,7 @@ class SpreadLogMonitor(QtWidgets.QTextEdit): def process_log_event(self, event: Event): """""" log = event.data - msg = f"{log.time.strftime('%H:%M:%S')}:{log.msg}" + msg = f"{log.time.strftime('%H:%M:%S')}\t{log.msg}" self.append(msg) @@ -205,7 +212,6 @@ class SpreadAlgoWidget(QtWidgets.QFrame): self.strategy_engine: SpreadStrategyEngine = spread_engine.strategy_engine self.init_ui() - self.update_class_combo() def init_ui(self): """""" @@ -314,7 +320,8 @@ class SpreadAlgoWidget(QtWidgets.QFrame): def remove_spread(self): """""" - pass + dialog = SpreadRemoveDialog(self.spread_engine) + dialog.exec_() def update_class_combo(self): """""" @@ -470,7 +477,44 @@ class SpreadDataDialog(QtWidgets.QDialog): self.accept() -class SpreadStrategyMonitor(QtWidgets.QScrollArea): +class SpreadRemoveDialog(QtWidgets.QDialog): + """""" + + def __init__(self, spread_engine: SpreadEngine): + """""" + super().__init__() + + self.spread_engine: SpreadEngine = spread_engine + + self.init_ui() + + def init_ui(self): + """""" + self.setWindowTitle("移除价差") + self.setMinimumWidth(300) + + self.name_combo = QtWidgets.QComboBox() + spreads = self.spread_engine.get_all_spreads() + for spread in spreads: + self.name_combo.addItem(spread.name) + + button_remove = QtWidgets.QPushButton("移除") + button_remove.clicked.connect(self.remove_spread) + + hbox = QtWidgets.QHBoxLayout() + hbox.addWidget(self.name_combo) + hbox.addWidget(button_remove) + + self.setLayout(hbox) + + def remove_spread(self): + """""" + spread_name = self.name_combo.currentText() + self.spread_engine.remove_spread(spread_name) + self.accept() + + +class SpreadStrategyMonitor(QtWidgets.QWidget): """""" signal_strategy = QtCore.pyqtSignal(Event) @@ -495,8 +539,13 @@ class SpreadStrategyMonitor(QtWidgets.QScrollArea): scroll_widget = QtWidgets.QWidget() scroll_widget.setLayout(self.scroll_layout) - self.setWidgetResizable(True) - self.setWidget(scroll_widget) + scroll_area = QtWidgets.QScrollArea() + scroll_area.setWidgetResizable(True) + scroll_area.setWidget(scroll_widget) + + vbox = QtWidgets.QVBoxLayout() + vbox.addWidget(scroll_area) + self.setLayout(vbox) def register_event(self): """""" @@ -517,10 +566,15 @@ class SpreadStrategyMonitor(QtWidgets.QScrollArea): manager = self.managers[strategy_name] manager.update_data(data) else: - manager = SpreadStrategyWidget(self.strategy_engine, data) + manager = SpreadStrategyWidget(self, self.strategy_engine, data) self.scroll_layout.insertWidget(0, manager) self.managers[strategy_name] = manager + def remove_strategy(self, strategy_name): + """""" + manager = self.managers.pop(strategy_name) + manager.deleteLater() + class SpreadStrategyWidget(QtWidgets.QFrame): """ @@ -529,12 +583,14 @@ class SpreadStrategyWidget(QtWidgets.QFrame): def __init__( self, + strategy_monitor: SpreadStrategyMonitor, strategy_engine: SpreadStrategyEngine, data: dict ): """""" super().__init__() + self.strategy_monitor = strategy_monitor self.strategy_engine = strategy_engine self.strategy_name = data["strategy_name"] @@ -629,7 +685,7 @@ class SpreadStrategyWidget(QtWidgets.QFrame): # Only remove strategy gui manager if it has been removed from engine if result: - self.spread_manager.remove_strategy(self.strategy_name) + self.strategy_monitor.remove_strategy(self.strategy_name) class StrategyDataMonitor(QtWidgets.QTableWidget): @@ -698,11 +754,11 @@ class SettingEditor(QtWidgets.QDialog): """""" form = QtWidgets.QFormLayout() - # Add vt_symbol and name edit if add new strategy + # Add spread_name and name edit if add new strategy if self.class_name: self.setWindowTitle(f"添加策略:{self.class_name}") button_text = "添加" - parameters = {"strategy_name": "", "vt_symbol": ""} + parameters = {"strategy_name": "", "spread_name": ""} parameters.update(self.parameters) else: self.setWindowTitle(f"参数编辑:{self.strategy_name}") From 06797b475f54a0d2c1256b058c80869685b3ce82 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 22:48:20 +0800 Subject: [PATCH 18/41] [Mod] update README.md --- .github/ISSUE_TEMPLATE.md | 4 +- README.md | 114 +++++++++++++++++++++----------------- vnpy/__init__.py | 2 +- 3 files changed, 67 insertions(+), 53 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index d0d205ee..f37c5876 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,8 +1,8 @@ ## 环境 * 操作系统: 如Windows 10或者Ubuntu 18.04 -* Anaconda版本: 如Anaconda 18.12 Python 3.7 64位 -* vn.py版本: 如v2.0发行版或者dev branch 20190101(下载日期) +* Python版本: 如VNStudio-2.0.6 +* vn.py版本: 如v2.0.5发行版或者dev branch 20190101(下载日期) ## Issue类型 三选一:Bug/Enhancement/Question diff --git a/README.md b/README.md index 4ed0dc18..93e04168 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

- + @@ -20,9 +20,9 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1

-在使用vn.py进行二次开发(策略、模块等)的过程中有任何疑问,请查看[**vn.py项目文档**](https://www.vnpy.com/docs/cn/index.html),如果无法解决请前往[**官方社区论坛**](https://www.vnpy.com/forum/)的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! +在使用vn.py进行二次开发(策略、模块等)的过程中有任何疑问,请查看[**vn.py项目文档**](https://www.vnpy.com/docs/cn/index.html),如果无法解决请前往[**官方社区论坛**](https://www.vnpy.com/forum/)的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! -2.0版本基于Python 3.7全新重构开发,如需Python 2上的版本请点击:[长期支持版本v1.9.2 LTS](https://github.com/vnpy/vnpy/tree/v1.9.2-LTS)。 +2.0版本基于Python 3.7全新重构开发,如需Python 2上的版本请点击:[长期支持版本v1.9.2 LTS](https://github.com/vnpy/vnpy/tree/v1.9.2-LTS)。 ## 功能特点 @@ -32,49 +32,61 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 * 国内市场 - * CTP(ctp):国内期货、期权 + * CTP(ctp):国内期货、期权 - * CTP Mini(mini):国内期货、期权 + * CTP Mini(mini):国内期货、期权 - * 飞马(femas):国内期货 + * CTP证券(sopt):ETF期权 - * 宽睿(oes):国内证券(A股) + * 飞马(femas):国内期货 - * 中泰XTP(xtp):国内证券(A股) + * 宽睿(oes):国内证券(A股) - * 华鑫奇点(tora):国内证券(A股) + * 中泰XTP(xtp):国内证券(A股) + + * 华鑫奇点(tora):国内证券(A股) + + * 鑫管家(xgj):期货资管 + + * 融航(rohon):期货资管 * 海外市场 - - * 富途证券(futu):港股、美股 - * 老虎证券(tiger):全球证券、期货、期权、外汇等 + * 富途证券(futu):港股、美股 - * Interactive Brokers(ib):全球证券、期货、期权、外汇等 + * 老虎证券(tiger):全球证券、期货、期权、外汇等 - * 易盛9.0外盘(tap):全球期货 + * Interactive Brokers(ib):全球证券、期货、期权、外汇等 + + * 易盛9.0外盘(tap):全球期货 + + * 直达期货(da):全球期货 * 数字货币 - * BitMEX(bitmex):数字货币期货、期权、永续合约 + * BitMEX(bitmex):数字货币期货、期权、永续合约 - * OKEX合约(okexf):数字货币期货 + * OKEX永续(okexs):数字货币永续合约 - * 火币合约(hbdm):数字货币期货 + * OKEX合约(okexf):数字货币期货 - * 币安(binance):数字货币现货 + * 火币合约(hbdm):数字货币期货 - * OKEX(okex):数字货币现货 + * 币安(binance):数字货币现货 - * 火币(huobi):数字货币现货 + * OKEX(okex):数字货币现货 - * Bitfinex(bitfinex):数字货币现货 + * 火币(huobi):数字货币现货 - * 1Token(onetoken):数字货币券商(现货、期货) + * Bitfinex(bitfinex):数字货币现货 + + * Coinbase(coinbase):数字货币现货 + + * 1Token(onetoken):数字货币券商(现货、期货) * 特殊应用 - * RPC服务(rpc):跨进程通讯接口,用于分布式架构 + * RPC服务(rpc):跨进程通讯接口,用于分布式架构 3. 开箱即用的各类量化策略交易应用(vnpy.app): @@ -82,6 +94,8 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 * cta_backtester:CTA策略回测模块,无需使用Jupyter Notebook,直接使用图形界面直接进行策略回测分析、参数优化等相关工作 + * spread_trading:价差交易模块,支持自定义价差,实时计算价差行情和持仓,支持半自动价差算法交易以及全自动价差策略交易两种模式 + * algo_trading:算法交易模块,提供多种常用的智能交易算法:TWAP、Sniper、Iceberg、BestLimit等等,支持常用算法配置保存 * script_trader:脚本策略模块,针对多标的组合类交易策略设计,同时也可以直接在命令行中实现REPL指令形式的交易,不支持回测功能 @@ -102,19 +116,19 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 7. Python高性能K线图表(vnpy.chart),支持大数据量图表显示以及实时数据更新功能。 -8. [社区论坛](http://www.vnpy.com)和[知乎专栏](http://zhuanlan.zhihu.com/vn-py),内容包括vn.py项目的开发教程和Python在量化交易领域的应用研究等内容。 +8. [社区论坛](http://www.vnpy.com)和[知乎专栏](http://zhuanlan.zhihu.com/vn-py),内容包括vn.py项目的开发教程和Python在量化交易领域的应用研究等内容。 9. 官方交流群262656087(QQ),管理严格(定期清除长期潜水的成员),入群费将捐赠给vn.py社区基金。 ## 环境准备 -* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.4](https://download.vnpy.com/vnstudio-2.0.4-r.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装 +* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.6](https://download.vnpy.com/vnstudio-2.0.6.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装 * 支持的系统版本:Windows 7以上/Windows Server 2008以上/Ubuntu 18.04 LTS * 支持的Python版本:Python 3.7 64位(**注意必须是Python 3.7 64位版本**) ## 安装步骤 -在[这里](https://github.com/vnpy/vnpy/releases)下载最新版本,解压后运行以下命令安装: +在[这里](https://github.com/vnpy/vnpy/releases)下载最新版本,解压后运行以下命令安装: **Windows** @@ -127,9 +141,9 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 ## 使用指南 -1. 在[SimNow](http://www.simnow.com.cn/)注册CTP仿真账号,并在[该页面](http://www.simnow.com.cn/product.action)获取经纪商代码以及交易行情服务器地址。 +1. 在[SimNow](http://www.simnow.com.cn/)注册CTP仿真账号,并在[该页面](http://www.simnow.com.cn/product.action)获取经纪商代码以及交易行情服务器地址。 -2. 在[vn.py社区论坛](https://www.vnpy.com/forum/)注册获得VN Station账号密码(论坛账号密码即是) +2. 在[vn.py社区论坛](https://www.vnpy.com/forum/)注册获得VN Station账号密码(论坛账号密码即是) 3. 启动VN Station(安装VNConda后会在桌面自动创建快捷方式),输入上一步的账号密码登录 @@ -153,24 +167,24 @@ from vnpy.gateway.ctp import CtpGateway from vnpy.app.cta_strategy import CtaStrategyApp from vnpy.app.cta_backtester import CtaBacktesterApp -def main(): +def main(): """Start VN Trader""" - qapp = create_qapp() + qapp = create_qapp() - event_engine = EventEngine() - main_engine = MainEngine(event_engine) + event_engine = EventEngine() + main_engine = MainEngine(event_engine) - main_engine.add_gateway(CtpGateway) - main_engine.add_app(CtaStrategyApp) - main_engine.add_app(CtaBacktesterApp) + main_engine.add_gateway(CtpGateway) + main_engine.add_app(CtaStrategyApp) + main_engine.add_app(CtaBacktesterApp) - main_window = MainWindow(main_engine, event_engine) - main_window.showMaximized() + main_window = MainWindow(main_engine, event_engine) + main_window.showMaximized() - qapp.exec() + qapp.exec() if __name__ == "__main__": - main() + main() ``` 在该目录下打开CMD(按住Shift->点击鼠标右键->在此处打开命令窗口/PowerShell)后运行下列命令启动VN Trader: @@ -179,27 +193,27 @@ if __name__ == "__main__": ## 贡献代码 -vn.py使用Github托管其源代码,如果希望贡献代码请使用github的PR(Pull Request)的流程: +vn.py使用Github托管其源代码,如果希望贡献代码请使用github的PR(Pull Request)的流程: -1. [创建 Issue](https://github.com/vnpy/vnpy/issues/new) - 对于较大的改动(如新功能,大型重构等)最好先开issue讨论一下,较小的improvement(如文档改进,bugfix等)直接发PR即可 +1. [创建 Issue](https://github.com/vnpy/vnpy/issues/new) - 对于较大的改动(如新功能,大型重构等)最好先开issue讨论一下,较小的improvement(如文档改进,bugfix等)直接发PR即可 -2. Fork [vn.py](https://github.com/vnpy/vnpy) - 点击右上角**Fork**按钮 +2. Fork [vn.py](https://github.com/vnpy/vnpy) - 点击右上角**Fork**按钮 3. Clone你自己的fork: ```git clone https://github.com/$userid/vnpy.git``` - * 如果你的fork已经过时,需要手动sync:[https://help.github.com/articles/syncing-a-fork/](https://help.github.com/articles/syncing-a-fork/) + * 如果你的fork已经过时,需要手动sync:[https://help.github.com/articles/syncing-a-fork/](https://help.github.com/articles/syncing-a-fork/) 4. 从**dev**创建你自己的feature branch: ```git checkout -b $my_feature_branch dev``` 5. 在$my_feature_branch上修改并将修改push到你的fork上 -6. 创建从你的fork的$my_feature_branch分支到主项目的**dev**分支的[Pull Request] - [在此](https://github.com/vnpy/vnpy/compare?expand=1)点击**compare across forks**,选择需要的fork和branch创建PR +6. 创建从你的fork的$my_feature_branch分支到主项目的**dev**分支的[Pull Request] - [在此](https://github.com/vnpy/vnpy/compare?expand=1)点击**compare across forks**,选择需要的fork和branch创建PR 7. 等待review, 需要继续改进,或者被Merge! 在提交代码的时候,请遵守以下规则,以提高代码质量: - * 使用[autopep8](https://github.com/hhatto/autopep8)格式化你的代码。运行```autopep8 --in-place --recursive . ```即可。 - * 使用[flake8](https://pypi.org/project/flake8/)检查你的代码,确保没有error和warning。在项目根目录下运行```flake8```即可。 + * 使用[autopep8](https://github.com/hhatto/autopep8)格式化你的代码。运行```autopep8 --in-place --recursive . ```即可。 + * 使用[flake8](https://pypi.org/project/flake8/)检查你的代码,确保没有error和warning。在项目根目录下运行```flake8```即可。 @@ -217,10 +231,10 @@ vn.py使用Github托管其源代码,如果希望贡献代码请使用github的 ## 其他内容 -* [获取帮助](https://github.com/vnpy/vnpy/blob/dev/docs/SUPPORT.md) -* [社区行为准侧](https://github.com/vnpy/vnpy/blob/dev/docs/CODE_OF_CONDUCT.md) -* [Issue模板](https://github.com/vnpy/vnpy/blob/dev/docs/ISSUE_TEMPLATE.md) -* [PR模板](https://github.com/vnpy/vnpy/blob/dev/docs/PULL_REQUEST_TEMPLATE.md) +* [获取帮助](https://github.com/vnpy/vnpy/blob/dev/docs/SUPPORT.md) +* [社区行为准侧](https://github.com/vnpy/vnpy/blob/dev/docs/CODE_OF_CONDUCT.md) +* [Issue模板](https://github.com/vnpy/vnpy/blob/dev/docs/ISSUE_TEMPLATE.md) +* [PR模板](https://github.com/vnpy/vnpy/blob/dev/docs/PULL_REQUEST_TEMPLATE.md) diff --git a/vnpy/__init__.py b/vnpy/__init__.py index ff6ef86d..962c851b 100644 --- a/vnpy/__init__.py +++ b/vnpy/__init__.py @@ -1 +1 @@ -__version__ = "2.0.6" +__version__ = "2.0.7" From 1053eb2d239b9d5480f939b17a7bb3c7947b6e84 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 22:56:40 +0800 Subject: [PATCH 19/41] [Mod] close #1938 --- vnpy/gateway/ctp/ctp_gateway.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vnpy/gateway/ctp/ctp_gateway.py b/vnpy/gateway/ctp/ctp_gateway.py index d08f3864..a72f4598 100644 --- a/vnpy/gateway/ctp/ctp_gateway.py +++ b/vnpy/gateway/ctp/ctp_gateway.py @@ -717,6 +717,10 @@ class CtpTdApi(TdApi): """ self.order_ref += 1 + if req.offset not in OFFSET_VT2CTP: + self.gateway.write_log("请选择开平方向") + return "" + ctp_req = { "InstrumentID": req.symbol, "ExchangeID": req.exchange.value, From cf2a7ad2f7004f7bf96635dea72c683c3fbb3a50 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:01:28 +0800 Subject: [PATCH 20/41] [Mod] close #1950 --- vnpy/gateway/hbdm/hbdm_gateway.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vnpy/gateway/hbdm/hbdm_gateway.py b/vnpy/gateway/hbdm/hbdm_gateway.py index 663feaf0..b8de5b76 100644 --- a/vnpy/gateway/hbdm/hbdm_gateway.py +++ b/vnpy/gateway/hbdm/hbdm_gateway.py @@ -63,6 +63,9 @@ ORDERTYPE_VT2HBDM = { ORDERTYPE_HBDM2VT = {v: k for k, v in ORDERTYPE_VT2HBDM.items()} ORDERTYPE_HBDM2VT[1] = OrderType.LIMIT ORDERTYPE_HBDM2VT[3] = OrderType.MARKET +ORDERTYPE_HBDM2VT[4] = OrderType.MARKET +ORDERTYPE_HBDM2VT[5] = OrderType.STOP +ORDERTYPE_HBDM2VT[6] = OrderType.LIMIT DIRECTION_VT2HBDM = { Direction.LONG: "buy", From 1356aac89447008c810e694850f87395994d36d9 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:11:17 +0800 Subject: [PATCH 21/41] [Mod] close #1937 --- .../cta_strategy/strategies/turtle_signal_strategy.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py b/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py index aa608b95..bcbe766d 100644 --- a/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py +++ b/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py @@ -78,7 +78,12 @@ class TurtleSignalStrategy(CtaTemplate): if not self.am.inited: return - self.entry_up, self.entry_down = self.am.donchian(self.entry_window) + # Only calculates new entry channel when no position holding + if not self.pos: + self.entry_up, self.entry_down = self.am.donchian( + self.entry_window + ) + self.exit_up, self.exit_down = self.am.donchian(self.exit_window) if not self.pos: @@ -92,13 +97,13 @@ class TurtleSignalStrategy(CtaTemplate): self.send_buy_orders(self.entry_up) self.send_short_orders(self.entry_down) elif self.pos > 0: - self.send_buy_orders(self.long_entry) + self.send_buy_orders(self.entry_up) sell_price = max(self.long_stop, self.exit_down) self.sell(sell_price, abs(self.pos), True) elif self.pos < 0: - self.send_short_orders(self.short_entry) + self.send_short_orders(self.entry_down) cover_price = min(self.short_stop, self.exit_up) self.cover(cover_price, abs(self.pos), True) From 8baafc5cf914b604dfd0e43f6b4e6db133a37cc0 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:14:43 +0800 Subject: [PATCH 22/41] [Add] CBOE exchange enum --- vnpy/trader/constant.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vnpy/trader/constant.py b/vnpy/trader/constant.py index 1ebb2aa8..f7159a53 100644 --- a/vnpy/trader/constant.py +++ b/vnpy/trader/constant.py @@ -100,6 +100,7 @@ class Exchange(Enum): HKFE = "HKFE" # Hong Kong Futures Exchange SGX = "SGX" # Singapore Global Exchange CBOT = "CBT" # Chicago Board of Trade + CBOE = "CBOE" # Chicago Board Options Exchange DME = "DME" # Dubai Mercantile Exchange EUREX = "EUX" # Eurex Exchange APEX = "APEX" # Asia Pacific Exchange From 0c1dc817b9b456d1f8cd344439f2f7e39bcada00 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:28:36 +0800 Subject: [PATCH 23/41] [Fic] close #2021 --- examples/vn_trader/run.py | 2 +- vnpy/app/cta_backtester/engine.py | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/examples/vn_trader/run.py b/examples/vn_trader/run.py index 229679e6..f6f7a376 100644 --- a/examples/vn_trader/run.py +++ b/examples/vn_trader/run.py @@ -76,7 +76,7 @@ def main(): main_engine.add_gateway(CoinbaseGateway) main_engine.add_app(CtaStrategyApp) - # main_engine.add_app(CtaBacktesterApp) + main_engine.add_app(CtaBacktesterApp) # main_engine.add_app(CsvLoaderApp) # main_engine.add_app(AlgoTradingApp) # main_engine.add_app(DataRecorderApp) diff --git a/vnpy/app/cta_backtester/engine.py b/vnpy/app/cta_backtester/engine.py index b64045a2..c501f350 100644 --- a/vnpy/app/cta_backtester/engine.py +++ b/vnpy/app/cta_backtester/engine.py @@ -354,18 +354,24 @@ class BacktesterEngine(BaseEngine): contract = self.main_engine.get_contract(vt_symbol) - # If history data provided in gateway, then query - if contract and contract.history_data: - data = self.main_engine.query_history(req, contract.gateway_name) - # Otherwise use RQData to query data - else: - data = rqdata_client.query_history(req) + try: + # If history data provided in gateway, then query + if contract and contract.history_data: + data = self.main_engine.query_history( + req, contract.gateway_name + ) + # Otherwise use RQData to query data + else: + data = rqdata_client.query_history(req) - if data: - database_manager.save_bar_data(data) - self.write_log(f"{vt_symbol}-{interval}历史数据下载完成") - else: - self.write_log(f"数据下载失败,无法获取{vt_symbol}的历史数据") + if data: + database_manager.save_bar_data(data) + self.write_log(f"{vt_symbol}-{interval}历史数据下载完成") + else: + self.write_log(f"数据下载失败,无法获取{vt_symbol}的历史数据") + except Exception: + msg = f"数据下载失败,触发异常:\n{traceback.format_exc()}" + self.write_log(msg) # Clear thread object handler. self.thread = None From 38d090bed4965d2afa0c7d2035d5df1b27fb5a9d Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:30:30 +0800 Subject: [PATCH 24/41] [Mod] close #2019 --- vnpy/gateway/okexf/okexf_gateway.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vnpy/gateway/okexf/okexf_gateway.py b/vnpy/gateway/okexf/okexf_gateway.py index e1b9d3cd..abcb660b 100644 --- a/vnpy/gateway/okexf/okexf_gateway.py +++ b/vnpy/gateway/okexf/okexf_gateway.py @@ -561,7 +561,7 @@ class OkexfRestApi(RestClient): for l in data: ts, o, h, l, c, v, _ = l - dt = datetime.strptime(ts, "%Y-%m-%dT%H:%M:%S.%fZ") + dt = utc_to_local(ts) bar = BarData( symbol=req.symbol, exchange=req.exchange, From 69f9a21c3e5ad3ea3cc10a279edfd1f757c23205 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:41:10 +0800 Subject: [PATCH 25/41] [Fix] close #2037 --- examples/vn_trader/run.py | 4 ++-- vnpy/gateway/bitfinex/bitfinex_gateway.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/vn_trader/run.py b/examples/vn_trader/run.py index f6f7a376..1c31e879 100644 --- a/examples/vn_trader/run.py +++ b/examples/vn_trader/run.py @@ -18,7 +18,7 @@ from vnpy.gateway.bitmex import BitmexGateway # from vnpy.gateway.oes import OesGateway # from vnpy.gateway.okex import OkexGateway # from vnpy.gateway.huobi import HuobiGateway -# from vnpy.gateway.bitfinex import BitfinexGateway +from vnpy.gateway.bitfinex import BitfinexGateway # from vnpy.gateway.onetoken import OnetokenGateway from vnpy.gateway.okexf import OkexfGateway from vnpy.gateway.okexs import OkexsGateway @@ -63,7 +63,7 @@ def main(): # main_engine.add_gateway(OesGateway) # main_engine.add_gateway(OkexGateway) # main_engine.add_gateway(HuobiGateway) - # main_engine.add_gateway(BitfinexGateway) + main_engine.add_gateway(BitfinexGateway) # main_engine.add_gateway(OnetokenGateway) # main_engine.add_gateway(OkexfGateway) # main_engine.add_gateway(HbdmGateway) diff --git a/vnpy/gateway/bitfinex/bitfinex_gateway.py b/vnpy/gateway/bitfinex/bitfinex_gateway.py index 47d58fdd..ac2d614e 100644 --- a/vnpy/gateway/bitfinex/bitfinex_gateway.py +++ b/vnpy/gateway/bitfinex/bitfinex_gateway.py @@ -558,7 +558,7 @@ class BitfinexWebsocketApi(WebsocketClient): # ASK ask_keys = ask.keys() - askPriceList = sorted(ask_keys, reverse=True) + askPriceList = sorted(ask_keys) tick.ask_price_1 = askPriceList[0] tick.ask_price_2 = askPriceList[1] From 15bdeea4007481f1e2d4662fc6287f4301f1c6e0 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:46:05 +0800 Subject: [PATCH 26/41] [Mod] close #2060 --- vnpy/app/cta_backtester/ui/widget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vnpy/app/cta_backtester/ui/widget.py b/vnpy/app/cta_backtester/ui/widget.py index 70752e05..6412a99a 100644 --- a/vnpy/app/cta_backtester/ui/widget.py +++ b/vnpy/app/cta_backtester/ui/widget.py @@ -332,7 +332,7 @@ class BacktesterManager(QtWidgets.QWidget): end_date = self.end_date_edit.date() start = datetime(start_date.year(), start_date.month(), start_date.day()) - end = datetime(end_date.year(), end_date.month(), end_date.day()) + end = datetime(end_date.year(), end_date.month(), end_date.day(), 23, 59, 59) self.backtester_engine.start_downloading( vt_symbol, From 6279ab4ddf6baf554bdbed2ce8949e3c636289bf Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Tue, 17 Sep 2019 23:58:16 +0800 Subject: [PATCH 27/41] [Mod] update README.md --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 93e04168..b6ed4ad0 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1

-在使用vn.py进行二次开发(策略、模块等)的过程中有任何疑问,请查看[**vn.py项目文档**](https://www.vnpy.com/docs/cn/index.html),如果无法解决请前往[**官方社区论坛**](https://www.vnpy.com/forum/)的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! +在使用vn.py进行二次开发(策略、模块等)的过程中有任何疑问,请查看[**vn.py项目文档**](https://www.vnpy.com/docs/cn/index.html),如果无法解决请前往[**官方社区论坛**](https://www.vnpy.com/forum/)的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! -2.0版本基于Python 3.7全新重构开发,如需Python 2上的版本请点击:[长期支持版本v1.9.2 LTS](https://github.com/vnpy/vnpy/tree/v1.9.2-LTS)。 +2.0版本基于Python 3.7全新重构开发,如需Python 2上的版本请点击:[长期支持版本v1.9.2 LTS](https://github.com/vnpy/vnpy/tree/v1.9.2-LTS)。 ## 功能特点 @@ -116,19 +116,19 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 7. Python高性能K线图表(vnpy.chart),支持大数据量图表显示以及实时数据更新功能。 -8. [社区论坛](http://www.vnpy.com)和[知乎专栏](http://zhuanlan.zhihu.com/vn-py),内容包括vn.py项目的开发教程和Python在量化交易领域的应用研究等内容。 +8. [社区论坛](http://www.vnpy.com)和[知乎专栏](http://zhuanlan.zhihu.com/vn-py),内容包括vn.py项目的开发教程和Python在量化交易领域的应用研究等内容。 9. 官方交流群262656087(QQ),管理严格(定期清除长期潜水的成员),入群费将捐赠给vn.py社区基金。 ## 环境准备 -* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.6](https://download.vnpy.com/vnstudio-2.0.6.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装 +* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.6](https://download.vnpy.com/vnstudio-2.0.6.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装 * 支持的系统版本:Windows 7以上/Windows Server 2008以上/Ubuntu 18.04 LTS * 支持的Python版本:Python 3.7 64位(**注意必须是Python 3.7 64位版本**) ## 安装步骤 -在[这里](https://github.com/vnpy/vnpy/releases)下载最新版本,解压后运行以下命令安装: +在[这里](https://github.com/vnpy/vnpy/releases)下载最新版本,解压后运行以下命令安装: **Windows** @@ -141,9 +141,9 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 ## 使用指南 -1. 在[SimNow](http://www.simnow.com.cn/)注册CTP仿真账号,并在[该页面](http://www.simnow.com.cn/product.action)获取经纪商代码以及交易行情服务器地址。 +1. 在[SimNow](http://www.simnow.com.cn/)注册CTP仿真账号,并在[该页面](http://www.simnow.com.cn/product.action)获取经纪商代码以及交易行情服务器地址。 -2. 在[vn.py社区论坛](https://www.vnpy.com/forum/)注册获得VN Station账号密码(论坛账号密码即是) +2. 在[vn.py社区论坛](https://www.vnpy.com/forum/)注册获得VN Station账号密码(论坛账号密码即是) 3. 启动VN Station(安装VNConda后会在桌面自动创建快捷方式),输入上一步的账号密码登录 @@ -195,25 +195,25 @@ if __name__ == "__main__": vn.py使用Github托管其源代码,如果希望贡献代码请使用github的PR(Pull Request)的流程: -1. [创建 Issue](https://github.com/vnpy/vnpy/issues/new) - 对于较大的改动(如新功能,大型重构等)最好先开issue讨论一下,较小的improvement(如文档改进,bugfix等)直接发PR即可 +1. [创建 Issue](https://github.com/vnpy/vnpy/issues/new) - 对于较大的改动(如新功能,大型重构等)最好先开issue讨论一下,较小的improvement(如文档改进,bugfix等)直接发PR即可 -2. Fork [vn.py](https://github.com/vnpy/vnpy) - 点击右上角**Fork**按钮 +2. Fork [vn.py](https://github.com/vnpy/vnpy) - 点击右上角**Fork**按钮 3. Clone你自己的fork: ```git clone https://github.com/$userid/vnpy.git``` - * 如果你的fork已经过时,需要手动sync:[https://help.github.com/articles/syncing-a-fork/](https://help.github.com/articles/syncing-a-fork/) + * 如果你的fork已经过时,需要手动sync:[同步方法](https://help.github.com/articles/syncing-a-fork/) 4. 从**dev**创建你自己的feature branch: ```git checkout -b $my_feature_branch dev``` 5. 在$my_feature_branch上修改并将修改push到你的fork上 -6. 创建从你的fork的$my_feature_branch分支到主项目的**dev**分支的[Pull Request] - [在此](https://github.com/vnpy/vnpy/compare?expand=1)点击**compare across forks**,选择需要的fork和branch创建PR +6. 创建从你的fork的$my_feature_branch分支到主项目的**dev**分支的[Pull Request] - [在此](https://github.com/vnpy/vnpy/compare?expand=1)点击**compare across forks**,选择需要的fork和branch创建PR 7. 等待review, 需要继续改进,或者被Merge! 在提交代码的时候,请遵守以下规则,以提高代码质量: - * 使用[autopep8](https://github.com/hhatto/autopep8)格式化你的代码。运行```autopep8 --in-place --recursive . ```即可。 - * 使用[flake8](https://pypi.org/project/flake8/)检查你的代码,确保没有error和warning。在项目根目录下运行```flake8```即可。 + * 使用[autopep8](https://github.com/hhatto/autopep8)格式化你的代码。运行```autopep8 --in-place --recursive . ```即可。 + * 使用[flake8](https://pypi.org/project/flake8/)检查你的代码,确保没有error和warning。在项目根目录下运行```flake8```即可。 @@ -231,10 +231,10 @@ vn.py使用Github托管其源代码,如果希望贡献代码请使用github的 ## 其他内容 -* [获取帮助](https://github.com/vnpy/vnpy/blob/dev/docs/SUPPORT.md) -* [社区行为准侧](https://github.com/vnpy/vnpy/blob/dev/docs/CODE_OF_CONDUCT.md) -* [Issue模板](https://github.com/vnpy/vnpy/blob/dev/docs/ISSUE_TEMPLATE.md) -* [PR模板](https://github.com/vnpy/vnpy/blob/dev/docs/PULL_REQUEST_TEMPLATE.md) +* [获取帮助](https://github.com/vnpy/vnpy/blob/dev/docs/SUPPORT.md) +* [社区行为准侧](https://github.com/vnpy/vnpy/blob/dev/docs/CODE_OF_CONDUCT.md) +* [Issue模板](https://github.com/vnpy/vnpy/blob/dev/docs/ISSUE_TEMPLATE.md) +* [PR模板](https://github.com/vnpy/vnpy/blob/dev/docs/PULL_REQUEST_TEMPLATE.md) From c02b37bde22d3644315fc34ce2d6f8ddd3a7db29 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 18 Sep 2019 11:44:11 +0800 Subject: [PATCH 28/41] [Mod] auto subscribe market data when add new legs --- README.md | 2 +- vnpy/app/spread_trading/engine.py | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b6ed4ad0..6fbc5446 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - +

diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index c3157b6a..87310395 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -211,6 +211,24 @@ class SpreadDataEngine: event = Event(EVENT_SPREAD_POS, spread) self.event_engine.put(event) + def get_leg(self, vt_symbol: str) -> LegData: + """""" + leg = self.legs.get(vt_symbol, None) + + if not leg: + leg = LegData(vt_symbol) + self.legs[vt_symbol] = leg + + # Subscribe market data + contract = self.main_engine.get_contract(vt_symbol) + req = SubscribeRequest( + contract.symbol, + contract.exchange + ) + self.main_engine.subscribe(req, contract.gateway_name) + + return leg + def add_spread( self, name: str, @@ -229,11 +247,7 @@ class SpreadDataEngine: for leg_setting in leg_settings: vt_symbol = leg_setting["vt_symbol"] - - leg = self.legs.get(vt_symbol, None) - if not leg: - leg = LegData(vt_symbol) - self.legs[vt_symbol] = leg + leg = self.get_leg(vt_symbol) legs.append(leg) price_multipliers[vt_symbol] = leg_setting["price_multiplier"] @@ -824,7 +838,7 @@ class SpreadStrategyEngine: return self.call_strategy_func(strategy, strategy.on_stop) - + strategy.stop_all_algos() strategy.cancel_all_orders() From 2448ef072dcd5e69a77e963c6c8bc8bc931e718d Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 18 Sep 2019 12:02:04 +0800 Subject: [PATCH 29/41] [Mod] use decimal.Decimal to ensure round_to precision, close #2002 --- vnpy/trader/utility.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/vnpy/trader/utility.py b/vnpy/trader/utility.py index 2c7f4b50..38a6e7db 100644 --- a/vnpy/trader/utility.py +++ b/vnpy/trader/utility.py @@ -5,6 +5,7 @@ General utility functions. import json from pathlib import Path from typing import Callable +from decimal import Decimal import numpy as np import talib @@ -109,11 +110,13 @@ def save_json(filename: str, data: dict): ) -def round_to(value: float, target: float): +def round_to(value: float, target: float) -> float: """ Round price to price tick value. """ - rounded = int(round(value / target)) * target + value = Decimal(str(value)) + target = Decimal(str(target)) + rounded = float(int(round(value / target)) * target) return rounded From 99ea570b6c285251629dcd0a4dacb77483036c80 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 18 Sep 2019 12:57:17 +0800 Subject: [PATCH 30/41] [Add] resubscribe logic to solve websocket data push stop problem, close #2045 --- vnpy/gateway/bitfinex/bitfinex_gateway.py | 52 +++++++++++++++++------ 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/vnpy/gateway/bitfinex/bitfinex_gateway.py b/vnpy/gateway/bitfinex/bitfinex_gateway.py index ac2d614e..de1aff81 100644 --- a/vnpy/gateway/bitfinex/bitfinex_gateway.py +++ b/vnpy/gateway/bitfinex/bitfinex_gateway.py @@ -11,6 +11,8 @@ from datetime import datetime, timedelta from urllib.parse import urlencode from vnpy.api.rest import Request, RestClient from vnpy.api.websocket import WebsocketClient +from vnpy.event import Event +from vnpy.trader.event import EVENT_TIMER from vnpy.trader.constant import ( Direction, @@ -92,6 +94,9 @@ class BitfinexGateway(BaseGateway): """Constructor""" super(BitfinexGateway, self).__init__(event_engine, "BITFINEX") + self.timer_count = 0 + self.resubscribe_interval = 60 + self.rest_api = BitfinexRestApi(self) self.ws_api = BitfinexWebsocketApi(self) @@ -104,9 +109,10 @@ class BitfinexGateway(BaseGateway): proxy_port = setting["proxy_port"] self.rest_api.connect(key, secret, session, proxy_host, proxy_port) - self.ws_api.connect(key, secret, proxy_host, proxy_port) + self.event_engine.register(EVENT_TIMER, self.process_timer_event) + def subscribe(self, req: SubscribeRequest): """""" self.ws_api.subscribe(req) @@ -136,6 +142,16 @@ class BitfinexGateway(BaseGateway): self.rest_api.stop() self.ws_api.stop() + def process_timer_event(self, event: Event): + """""" + self.timer_count += 1 + + if self.timer_count < self.resubscribe_interval: + return + + self.timer_count = 0 + self.ws_api.resubscribe() + class BitfinexRestApi(RestClient): """ @@ -359,11 +375,12 @@ class BitfinexWebsocketApi(WebsocketClient): self.accounts = {} self.orders = {} self.trades = set() - self.tickDict = {} - self.bidDict = {} - self.askDict = {} - self.orderLocalDict = {} - self.channelDict = {} # channel_id : (Channel, Symbol) + self.ticks = {} + self.bids = {} + self.asks = {} + self.channels = {} # channel_id : (Channel, Symbol) + + self.subscribed = {} def connect( self, key: str, secret: str, proxy_host: str, proxy_port: int @@ -378,12 +395,16 @@ class BitfinexWebsocketApi(WebsocketClient): """ Subscribe to tick data upate. """ + if req.symbol not in self.subscribed: + self.subscribed[req.symbol] = req + d = { "event": "subscribe", "channel": "book", "symbol": req.symbol, } self.send_packet(d) + d = { "event": "subscribe", "channel": "ticker", @@ -393,6 +414,11 @@ class BitfinexWebsocketApi(WebsocketClient): return int(round(time.time() * 1000)) + def resubscribe(self): + """""" + for req in self.subscribed.values(): + self.subscribe(req) + def _gen_unqiue_cid(self): self.order_id += 1 local_oid = time.strftime("%y%m%d") + str(self.order_id) @@ -463,7 +489,7 @@ class BitfinexWebsocketApi(WebsocketClient): if data["event"] == "subscribed": symbol = str(data["symbol"].replace("t", "")) - self.channelDict[data["chanId"]] = (data["channel"], symbol) + self.channels[data["chanId"]] = (data["channel"], symbol) def on_update(self, data): """""" @@ -480,12 +506,12 @@ class BitfinexWebsocketApi(WebsocketClient): def on_data_update(self, data): """""" channel_id = data[0] - channel, symbol = self.channelDict[channel_id] + channel, symbol = self.channels[channel_id] symbol = str(symbol.replace("t", "")) # Get the Tick object - if symbol in self.tickDict: - tick = self.tickDict[symbol] + if symbol in self.ticks: + tick = self.ticks[symbol] else: tick = TickData( symbol=symbol, @@ -495,7 +521,7 @@ class BitfinexWebsocketApi(WebsocketClient): gateway_name=self.gateway_name, ) - self.tickDict[symbol] = tick + self.ticks[symbol] = tick l_data1 = data[1] @@ -509,8 +535,8 @@ class BitfinexWebsocketApi(WebsocketClient): # Update deep quote elif channel == "book": - bid = self.bidDict.setdefault(symbol, {}) - ask = self.askDict.setdefault(symbol, {}) + bid = self.bids.setdefault(symbol, {}) + ask = self.asks.setdefault(symbol, {}) if len(l_data1) > 3: for price, count, amount in l_data1: From 8ec0f439ee2e1ac931341df235e1df592c9ad35c Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 18 Sep 2019 13:03:13 +0800 Subject: [PATCH 31/41] [Add] CFE exchange, close #2096 --- vnpy/gateway/ib/ib_gateway.py | 1 + vnpy/trader/constant.py | 1 + 2 files changed, 2 insertions(+) diff --git a/vnpy/gateway/ib/ib_gateway.py b/vnpy/gateway/ib/ib_gateway.py index 1f0387d7..2e4b0d87 100644 --- a/vnpy/gateway/ib/ib_gateway.py +++ b/vnpy/gateway/ib/ib_gateway.py @@ -64,6 +64,7 @@ EXCHANGE_VT2IB = { Exchange.ICE: "ICE", Exchange.SEHK: "SEHK", Exchange.HKFE: "HKFE", + Exchange.CFE: "CFE" } EXCHANGE_IB2VT = {v: k for k, v in EXCHANGE_VT2IB.items()} diff --git a/vnpy/trader/constant.py b/vnpy/trader/constant.py index f7159a53..8cbfbd21 100644 --- a/vnpy/trader/constant.py +++ b/vnpy/trader/constant.py @@ -101,6 +101,7 @@ class Exchange(Enum): SGX = "SGX" # Singapore Global Exchange CBOT = "CBT" # Chicago Board of Trade CBOE = "CBOE" # Chicago Board Options Exchange + CFE = "CFE" # CBOE Futures Exchange DME = "DME" # Dubai Mercantile Exchange EUREX = "EUX" # Eurex Exchange APEX = "APEX" # Asia Pacific Exchange From 6967a825f2539184d5d3c880766a14e4337853b3 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 18 Sep 2019 22:51:25 +0800 Subject: [PATCH 32/41] [Fix] typo of vt_symbol --- vnpy/app/spread_trading/ui/widget.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vnpy/app/spread_trading/ui/widget.py b/vnpy/app/spread_trading/ui/widget.py index 35415892..00ef63a5 100644 --- a/vnpy/app/spread_trading/ui/widget.py +++ b/vnpy/app/spread_trading/ui/widget.py @@ -439,12 +439,12 @@ class SpreadDataDialog(QtWidgets.QDialog): leg_settings = {} for d in self.leg_widgets: try: - spread_name = d["symbol"].text() + vt_symbol = d["symbol"].text() price_multiplier = int(d["price"].text()) trading_multiplier = int(d["trading"].text()) - leg_settings[spread_name] = { - "spread_name": spread_name, + leg_settings[vt_symbol] = { + "vt_symbol": vt_symbol, "price_multiplier": price_multiplier, "trading_multiplier": trading_multiplier } From 6f3a2b49c88c0c80a4cf3283a07fac8731732277 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Thu, 19 Sep 2019 12:30:38 +0800 Subject: [PATCH 33/41] [Del] remove unused ci config files --- .gitlab-ci.yml | 142 ---------------------- .travis.yml | 101 --------------- vnpy/gateway/bitfinex/bitfinex_gateway.py | 2 +- 3 files changed, 1 insertion(+), 244 deletions(-) delete mode 100644 .gitlab-ci.yml delete mode 100644 .travis.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index d12c40ca..00000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,142 +0,0 @@ -# This file is a template, and might need editing before it works on your project. -# Official language image. Look for the different tagged releases at: -# https://hub.docker.com/r/library/python/tags/ -image: registry.cn-shanghai.aliyuncs.com/vnpy-ci/gcc-7-python-3.7:latest - -.services: - services: &services - - postgres:latest - - mysql:latest - - mongo:latest - -# Change pip's cache directory to be inside the project directory since we can -# only cache local items. -variables: &variables - GIT_DEPTH: "1" - PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" - POSTGRES_DB: &db_name "vnpy" - POSTGRES_USER: "postgres" - POSTGRES_PASSWORD: &db_password "1234" - VNPY_TEST_POSTGRESQL_PASSWORD: *db_password - MYSQL_DATABASE: *db_name - MYSQL_ROOT_PASSWORD: *db_password - VNPY_TEST_MYSQL_PASSWORD: *db_password - VNPY_BUILD_PARALLEL: "auto" - -# Pip's cache doesn't store the python packages -# https://pip.pypa.io/en/stable/reference/pip_install/#caching -# -# If you want to also cache the installed packages, you have to install -# them in a virtualenv and cache it as well. -.default_cache: - cache: - <<: &cache - key: "pip_and_venv" - untracked: false - policy: pull - paths: - - .cache/pip - - venv/ - - - -before_script: - - echo $PWD - - python -V - - gcc --version - - free - - date - - # venv - - pip install virtualenv - - virtualenv venv - - source venv/bin/activate - - # some envs - - source ci/env.sh - -.scripts: - script: - - &install_scripts | - date - python -m pip --version - python -m pip install --upgrade pip wheel setuptools - python -m pip install https://pip.vnpy.com/colletion/ibapi-9.75.1-001-py3-none-any.whl - bash ci/gitlab_pre_install.sh - - date - bash ./install.sh - date - - - &test_scripts | - date - cd tests - python test_all.py - date -################################## -# stages - -stages: # I use anchors for IDE hints only - - &single_module single_module - - &build_all build_all - - -########################################### -## jobs: -flake8: - stage: *single_module - image: python:3.7 - cache: - key: 'flake8' - paths: - - .cache/pip - - venv/ - script: - - pip install flake8 - - flake8 - -ctp: - <<: &test_single_module - stage: *single_module - image: registry.cn-shanghai.aliyuncs.com/vnpy-ci/gcc-8-python-3.7:latest - services: *services - cache: - <<: *cache - script: - - *install_scripts - - *test_scripts - variables: - <<: *variables - VNPY_BUILD_CTP: 1 - -oes: - <<: *test_single_module - variables: - <<: *variables - VNPY_BUILD_OES: 1 - -no_building: - <<: *test_single_module - cache: - <<: *cache - policy: pull-push - variables: - <<: *variables - VNPY_BUILD_OES: 0 - VNPY_BUILD_CTP: 0 - -build-all-gcc8: - stage: *build_all - variables: - <<: *variables - image: registry.cn-shanghai.aliyuncs.com/vnpy-ci/gcc-8-python-3.7:latest - services: *services - cache: - key: "build-all" - paths: [] - script: - - unset VNPY_BUILD_CTP - - unset VNPY_BUILD_OES - - *install_scripts - - *test_scripts - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 10ca263c..00000000 --- a/.travis.yml +++ /dev/null @@ -1,101 +0,0 @@ -language: python - -dist: xenial # required for Python >= 3.7 (travis-ci/travis-ci#9069) - -cache: pip - -git: - depth: 1 - -env: - - > - VNPY_BUILD_PARALLEL=1 - VNPY_BUILD_CTP=1 - VNPY_BUILD_OES=1 - -python: - - "3.7" - -services: - - mongodb - - mysql - - postgresql - -before_script: - - psql -d postgresql://postgres:${VNPY_TEST_POSTGRESQL_PASSWORD}@localhost -c "create database vnpy;" - - mysql -u root --password=${VNPY_TEST_MYSQL_PASSWORD} -e 'CREATE DATABASE vnpy;' - - source ci/env.sh; - -script: - - cd tests; - - python test_all.py - -matrix: - include: - - name: "code quality analysis: flake8" - before_install: - - python -m pip install flake8 - install: - - "" # prevent running "pip install -r requirements.txt" - script: - - flake8 - - - name: "pip install under Ubuntu: gcc-8" - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-8 - before_install: - - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 90 - - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-8 90 - - sudo update-alternatives --install /usr/bin/gcc cc /usr/bin/gcc-8 90 - install: - # update pip & setuptools - - python -m pip install --upgrade pip wheel setuptools - # Linux install script - - python -m pip install https://pip.vnpy.com/colletion/ibapi-9.75.1-001-py3-none-any.whl - - bash ./install.sh - - - name: "sdist install under Ubuntu: gcc-7" - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-7 - before_install: - - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 90 - - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-7 90 - - sudo update-alternatives --install /usr/bin/gcc cc /usr/bin/gcc-7 90 - install: - # Linux install script - - python -m pip install --upgrade pip wheel setuptools - - pushd /tmp - - wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz - - tar -xf ta-lib-0.4.0-src.tar.gz - - cd ta-lib - - ./configure --prefix=/usr - - make # -j under gcc-7 failed!!? - - sudo make install - - popd - - python -m pip install numpy - - python -m pip install --pre --extra-index-url https://rquser:ricequant99@py.ricequant.com/simple/ rqdatac - - python -m pip install https://pip.vnpy.com/colletion/ibapi-9.75.1-001-py3-none-any.whl - - python setup.py sdist - - python -m pip install dist/`ls dist` - - - name: "pip install under osx" - os: osx - language: shell # osx supports only shell - services: [] - before_install: [] - install: - - python3 -m pip install https://pip.vnpy.com/colletion/ibapi-9.75.1-001-py3-none-any.whl - - bash ./install_osx.sh - before_script: [] - script: - - source ci/env.sh; - - cd tests; - - VNPY_TEST_ONLY_SQLITE=1 python3 test_all.py diff --git a/vnpy/gateway/bitfinex/bitfinex_gateway.py b/vnpy/gateway/bitfinex/bitfinex_gateway.py index de1aff81..a37dd995 100644 --- a/vnpy/gateway/bitfinex/bitfinex_gateway.py +++ b/vnpy/gateway/bitfinex/bitfinex_gateway.py @@ -145,7 +145,7 @@ class BitfinexGateway(BaseGateway): def process_timer_event(self, event: Event): """""" self.timer_count += 1 - + if self.timer_count < self.resubscribe_interval: return From 5e8a64887472e0beaa045e7e5770dd68aa822fab Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Thu, 19 Sep 2019 15:18:51 +0800 Subject: [PATCH 34/41] [Fix] bug when __thread not created --- vnpy/rpc/__init__.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vnpy/rpc/__init__.py b/vnpy/rpc/__init__.py index d1b4877a..b74e1f4e 100644 --- a/vnpy/rpc/__init__.py +++ b/vnpy/rpc/__init__.py @@ -1,3 +1,4 @@ +from zmq.backend.cython.constants import NOBLOCK import signal import threading import traceback @@ -7,10 +8,11 @@ from typing import Any, Callable import zmq -_ = lambda x: x + +def _(x): return x # Achieve Ctrl-c interrupt recv -from zmq.backend.cython.constants import NOBLOCK + signal.signal(signal.SIGINT, signal.SIG_DFL) @@ -100,7 +102,7 @@ class RpcServer: def join(self): # Wait for RpcServer thread to exit - if self.__thread.isAlive(): + if self.__thread and self.__thread.is_alive(): self.__thread.join() self.__thread = None From 2322406a931926e186afc7a0b23dd199c66681a3 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Thu, 19 Sep 2019 16:07:32 +0800 Subject: [PATCH 35/41] [Fix] only subscribe if contract data found --- vnpy/app/spread_trading/engine.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vnpy/app/spread_trading/engine.py b/vnpy/app/spread_trading/engine.py index 87310395..837d299e 100644 --- a/vnpy/app/spread_trading/engine.py +++ b/vnpy/app/spread_trading/engine.py @@ -221,11 +221,12 @@ class SpreadDataEngine: # Subscribe market data contract = self.main_engine.get_contract(vt_symbol) - req = SubscribeRequest( - contract.symbol, - contract.exchange - ) - self.main_engine.subscribe(req, contract.gateway_name) + if contract: + req = SubscribeRequest( + contract.symbol, + contract.exchange + ) + self.main_engine.subscribe(req, contract.gateway_name) return leg From 7de6e0fb428f1662d7f31835cffe15c228492bf7 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Thu, 19 Sep 2019 21:55:33 +0800 Subject: [PATCH 36/41] [Mod] add wmi into requirements --- requirements.txt | 3 ++- vnpy/rpc/__init__.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 66137198..4f68c40d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,4 +18,5 @@ rqdatac ta-lib ibapi deap -pyzmq \ No newline at end of file +pyzmq +wmi \ No newline at end of file diff --git a/vnpy/rpc/__init__.py b/vnpy/rpc/__init__.py index b74e1f4e..f29bc00b 100644 --- a/vnpy/rpc/__init__.py +++ b/vnpy/rpc/__init__.py @@ -239,7 +239,7 @@ class RpcClient: def join(self): # Wait for RpcClient thread to exit - if self.__thread.isAlive(): + if self.__thread and self.__thread.is_alive(): self.__thread.join() self.__thread = None From bb0362762712f0d51800c91ef6df91d3a6372d72 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Thu, 19 Sep 2019 22:23:41 +0800 Subject: [PATCH 37/41] [Mod] update vnstudio link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6fbc5446..25959d96 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ vn.py是一套基于Python的开源量化交易系统开发框架,于2015年1 ## 环境准备 -* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.6](https://download.vnpy.com/vnstudio-2.0.6.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装 +* 推荐使用vn.py团队为量化交易专门打造的Python发行版[VNStudio-2.0.7](https://download.vnpy.com/vnstudio-2.0.7.exe),内置了最新版的vn.py框架以及VN Station量化管理平台,无需手动安装 * 支持的系统版本:Windows 7以上/Windows Server 2008以上/Ubuntu 18.04 LTS * 支持的Python版本:Python 3.7 64位(**注意必须是Python 3.7 64位版本**) From 846ea95093c54b05f0be2fde374ce61e91ee1bc9 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Fri, 20 Sep 2019 11:37:32 +0800 Subject: [PATCH 38/41] [Fix] close #1997 --- examples/vn_trader/run.py | 4 +- vnpy/gateway/ctp/ctp_gateway.py | 70 ++++++++++++----------- vnpy/gateway/ctptest/ctptest_gateway.py | 70 ++++++++++++----------- vnpy/gateway/mini/mini_gateway.py | 2 +- vnpy/gateway/minitest/minitest_gateway.py | 2 +- 5 files changed, 76 insertions(+), 72 deletions(-) diff --git a/examples/vn_trader/run.py b/examples/vn_trader/run.py index 1c31e879..f7c23125 100644 --- a/examples/vn_trader/run.py +++ b/examples/vn_trader/run.py @@ -8,7 +8,7 @@ from vnpy.trader.ui import MainWindow, create_qapp from vnpy.gateway.bitmex import BitmexGateway # from vnpy.gateway.futu import FutuGateway # from vnpy.gateway.ib import IbGateway -# from vnpy.gateway.ctp import CtpGateway +from vnpy.gateway.ctp import CtpGateway # from vnpy.gateway.ctptest import CtptestGateway # from vnpy.gateway.mini import MiniGateway # from vnpy.gateway.sopt import SoptGateway @@ -50,7 +50,7 @@ def main(): main_engine = MainEngine(event_engine) # main_engine.add_gateway(BinanceGateway) - # main_engine.add_gateway(CtpGateway) + main_engine.add_gateway(CtpGateway) # main_engine.add_gateway(CtptestGateway) # main_engine.add_gateway(MiniGateway) # main_engine.add_gateway(SoptGateway) diff --git a/vnpy/gateway/ctp/ctp_gateway.py b/vnpy/gateway/ctp/ctp_gateway.py index a72f4598..ab7919bf 100644 --- a/vnpy/gateway/ctp/ctp_gateway.py +++ b/vnpy/gateway/ctp/ctp_gateway.py @@ -479,46 +479,48 @@ class CtpTdApi(TdApi): if not data: return - # Get buffered position object - key = f"{data['InstrumentID'], data['PosiDirection']}" - position = self.positions.get(key, None) - if not position: - position = PositionData( - symbol=data["InstrumentID"], - exchange=symbol_exchange_map[data["InstrumentID"]], - direction=DIRECTION_CTP2VT[data["PosiDirection"]], - gateway_name=self.gateway_name - ) - self.positions[key] = position + # Check if contract data received + if data["InstrumentID"] in symbol_exchange_map: + # Get buffered position object + key = f"{data['InstrumentID'], data['PosiDirection']}" + position = self.positions.get(key, None) + if not position: + position = PositionData( + symbol=data["InstrumentID"], + exchange=symbol_exchange_map[data["InstrumentID"]], + direction=DIRECTION_CTP2VT[data["PosiDirection"]], + gateway_name=self.gateway_name + ) + self.positions[key] = position - # For SHFE position data update - if position.exchange == Exchange.SHFE: - if data["YdPosition"] and not data["TodayPosition"]: - position.yd_volume = data["Position"] - # For other exchange position data update - else: - position.yd_volume = data["Position"] - data["TodayPosition"] + # For SHFE position data update + if position.exchange == Exchange.SHFE: + if data["YdPosition"] and not data["TodayPosition"]: + position.yd_volume = data["Position"] + # For other exchange position data update + else: + position.yd_volume = data["Position"] - data["TodayPosition"] - # Get contract size (spread contract has no size value) - size = symbol_size_map.get(position.symbol, 0) + # Get contract size (spread contract has no size value) + size = symbol_size_map.get(position.symbol, 0) - # Calculate previous position cost - cost = position.price * position.volume * size + # Calculate previous position cost + cost = position.price * position.volume * size - # Update new position volume - position.volume += data["Position"] - position.pnl += data["PositionProfit"] + # Update new position volume + position.volume += data["Position"] + position.pnl += data["PositionProfit"] - # Calculate average position price - if position.volume and size: - cost += data["PositionCost"] - position.price = cost / (position.volume * size) + # Calculate average position price + if position.volume and size: + cost += data["PositionCost"] + position.price = cost / (position.volume * size) - # Get frozen volume - if position.direction == Direction.LONG: - position.frozen += data["ShortFrozen"] - else: - position.frozen += data["LongFrozen"] + # Get frozen volume + if position.direction == Direction.LONG: + position.frozen += data["ShortFrozen"] + else: + position.frozen += data["LongFrozen"] if last: for position in self.positions.values(): diff --git a/vnpy/gateway/ctptest/ctptest_gateway.py b/vnpy/gateway/ctptest/ctptest_gateway.py index a25f9dec..e22ef0a6 100644 --- a/vnpy/gateway/ctptest/ctptest_gateway.py +++ b/vnpy/gateway/ctptest/ctptest_gateway.py @@ -478,46 +478,48 @@ class CtpTdApi(TdApi): if not data: return - # Get buffered position object - key = f"{data['InstrumentID'], data['PosiDirection']}" - position = self.positions.get(key, None) - if not position: - position = PositionData( - symbol=data["InstrumentID"], - exchange=symbol_exchange_map[data["InstrumentID"]], - direction=DIRECTION_CTP2VT[data["PosiDirection"]], - gateway_name=self.gateway_name - ) - self.positions[key] = position + # Check if contract data received + if data["InstrumentID"] in symbol_exchange_map: + # Get buffered position object + key = f"{data['InstrumentID'], data['PosiDirection']}" + position = self.positions.get(key, None) + if not position: + position = PositionData( + symbol=data["InstrumentID"], + exchange=symbol_exchange_map[data["InstrumentID"]], + direction=DIRECTION_CTP2VT[data["PosiDirection"]], + gateway_name=self.gateway_name + ) + self.positions[key] = position - # For SHFE position data update - if position.exchange == Exchange.SHFE: - if data["YdPosition"] and not data["TodayPosition"]: - position.yd_volume = data["Position"] - # For other exchange position data update - else: - position.yd_volume = data["Position"] - data["TodayPosition"] + # For SHFE position data update + if position.exchange == Exchange.SHFE: + if data["YdPosition"] and not data["TodayPosition"]: + position.yd_volume = data["Position"] + # For other exchange position data update + else: + position.yd_volume = data["Position"] - data["TodayPosition"] - # Get contract size (spread contract has no size value) - size = symbol_size_map.get(position.symbol, 0) + # Get contract size (spread contract has no size value) + size = symbol_size_map.get(position.symbol, 0) - # Calculate previous position cost - cost = position.price * position.volume * size + # Calculate previous position cost + cost = position.price * position.volume * size - # Update new position volume - position.volume += data["Position"] - position.pnl += data["PositionProfit"] + # Update new position volume + position.volume += data["Position"] + position.pnl += data["PositionProfit"] - # Calculate average position price - if position.volume and size: - cost += data["PositionCost"] - position.price = cost / (position.volume * size) + # Calculate average position price + if position.volume and size: + cost += data["PositionCost"] + position.price = cost / (position.volume * size) - # Get frozen volume - if position.direction == Direction.LONG: - position.frozen += data["ShortFrozen"] - else: - position.frozen += data["LongFrozen"] + # Get frozen volume + if position.direction == Direction.LONG: + position.frozen += data["ShortFrozen"] + else: + position.frozen += data["LongFrozen"] if last: for position in self.positions.values(): diff --git a/vnpy/gateway/mini/mini_gateway.py b/vnpy/gateway/mini/mini_gateway.py index 1811396f..ff41b911 100644 --- a/vnpy/gateway/mini/mini_gateway.py +++ b/vnpy/gateway/mini/mini_gateway.py @@ -491,7 +491,7 @@ class MiniTdApi(TdApi): def onRspQryInvestorPosition(self, data: dict, error: dict, reqid: int, last: bool): """""" - if data: + if data and data["InstrumentID"] in symbol_exchange_map: # Get buffered position object key = f"{data['InstrumentID'], data['PosiDirection']}" position = self.positions.get(key, None) diff --git a/vnpy/gateway/minitest/minitest_gateway.py b/vnpy/gateway/minitest/minitest_gateway.py index cd315540..0a96ef87 100644 --- a/vnpy/gateway/minitest/minitest_gateway.py +++ b/vnpy/gateway/minitest/minitest_gateway.py @@ -491,7 +491,7 @@ class MiniTdApi(TdApi): def onRspQryInvestorPosition(self, data: dict, error: dict, reqid: int, last: bool): """""" - if data: + if data and data["InstrumentID"] in symbol_exchange_map: # Get buffered position object key = f"{data['InstrumentID'], data['PosiDirection']}" position = self.positions.get(key, None) From 391d94411ad000fa8fbac362c65920854d61431d Mon Sep 17 00:00:00 2001 From: nanoric Date: Fri, 20 Sep 2019 14:30:57 +0800 Subject: [PATCH 39/41] [Mod] TapGateway: roll back custom callback_wrapper to fix invalid pointer BUG. --- vnpy/api/tap/vntap.pyd | Bin 1982464 -> 1984000 bytes vnpy/api/tap/vntap/custom/custom_wrappers.hpp | 301 +++++++++--------- vnpy/api/tap/vntap/vntap.vcxproj | 16 +- vnpy/api/tap/vntap/vntap.vcxproj.filters | 3 - 4 files changed, 159 insertions(+), 161 deletions(-) diff --git a/vnpy/api/tap/vntap.pyd b/vnpy/api/tap/vntap.pyd index 699dff7360e768d53347007a355fd0ba028aa61f..ce2c9f272b357b7895fe7be2719682ef30801241 100644 GIT binary patch delta 546670 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

=4&OJ5Pm5>4@i?rOL!IGk999ec_#_rX{nv~G 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%0DgvSrqMz;Als}Nyr(Ar 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 L`R{OB$9De%|Kw=o delta 545325 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

`=B;N@-fbr?$D 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 z zsALT^t6l6=zJ^wfHTgheYiMn}Vtt_-y0G=dSoCC58DDx?LksoH1~}e@k5Q5P=c3@6 z+VE`ebMpE+ESGh4O)b=r?_V=0Egw^2d=t`e$0vqbO%DLFH1JJ{3Bb~4Grg##4UXvw znDYT%!*O>}M?}!PYgc~f#-ZII6mFU}zZ9Bc~4bK=Suw|Ze8mUf!iUs&c-=zZ&>78QfqlgRcVggVXpC%+=U|r+L0ifue5D#4wHa)}-*mI1c017XOD69&c+ASX z?iae!3A_tR6!1RySs-)X9q|IOm^K2CX0m^#yq&djVNvKZ*$;E=Lz5%BBguJ`f>PTF zPqqc;?RLEAQazjS*pYMidPygPZo8V3iwp%M!D2S>VB)30UbZvWxs7s2@IUV`B=EsmoyG@8_SkVSj4fGS z3Ht#lCFTL?_N{_c~zA8S^uDqd}z43iC z{S9e-w7hC6Qd7cb;UA01hP|OGebASz^Tyh}kJi`7KA*SV?62)KvET;u(@^aNi>puL zhiNHnPd%&WaIL$cTu5ECK%!$;u&n6Lr=D@w0cZO1Dw}Hd&O|Xtlpbej!w4-(4S(!` zPv5H9QmYvzn?fJczazBJ;$I&Lukxzc6_2*l2e{szE%BUC=>u-_!xW=u9mG-sFF&Gs zBhhLk9y$Twm;UVETvG>USx4IG5w0?ba&Bqq?i^X0_Toe zZS&ZS+SPRpZ|SB0=rU@S?T?M1n3fzo3~}8Y1NI>!spgF14*NXoBJ9Ka$4z9~t<1EG zBF%Cvfx@qN<)Br`T5WbFj@~3|$CziFbry{2im4Tb;S#FJ+5AuhZ5x{PQdaz;jiMC9Nm@|~{z!WwU+ZPT?0?D={s zKSRsoU2Tude}e6E3*_H!KCqs;&%n1&&dh|fG9h(6%|ilvw3~L%!0=&?9dsmG^U3a7 zU%b(Jl{Hb4DMtYNV>{)WiGibpvQ%Xzh5+8LrztbFBJA{f+A&l6jk&C+jX!AxbCll# z#W59dJ0Z0mGInvD05jtjy8IIcZEkL+&p)ANtlUgxe%2N#CO%t{V!)7SstG%LZ~u(< z(%cGjXMtmEc{(-=1Dm%Z=+i8`yhlb*%h{0lB7!FKus{TD=V2l2_nnROhzM)c9BnOQ z&(_fs(mIy&E$65;b#sbZW8LT|74I6zS`*BNRYk=rDp6){r18Ii*{HHKe4Z9U+2(0| zS!WSxXbwK*;k3;;&XU{=WwqjO1296PoT7X4P&)j!kZC@?hmNFC@%dUT>%4~g&&Q}% zzsConnw!BmYlSl( z|1n#eFV^xKSo7u9(MvET!1^zx&danNZ2Nr5ycBI zt*FiDgDR7!rl^7izvzE5Yh4qLh_r6)w-E zUsvKw>-|D!%-9{}#R+%6&yeLmWiGv2sg)_P@mu2Msiu7gq-!RBbIr;FRCAS9#G@H; zQM{JTB^tX5B`WVivaZsIE#61Z&4FT6XGp;-7+6JioYzKYZpyerdd#V%urt~aYwFw37+0XQ3lh&AR-)4>4to>$SmZ@aiijvqeHx=EgHOV`43oj5sqnxp# zpf|p2x+0Eu@@xcl^Yawz(ydw*BYQuM?(NWeu&L9i_D-#vU(hsXr#Oo(E~R&p7_^JQ z*d8W;+@{g*JGH98$1L14A8PZ3gy@vcLAgq>v_6kzadP)E);uh;Q1~vbD=TlI#k(-$ zwstC&u%dQPoQkd^N=n12G{LHE$+a}a8B?oH_+S$&;IVrJ-_w>9sDeKzP`+$Pk)AdkSO%m@NAZ44Lsw=qVkwbNmQna&jE09VqdkZ50y#gHT#slG<|ZR} zv6E{V$1a6|aH{xNYIH=a!Rjxi#YeR3Y{(Lv)((;nljy{6TDbeX;hY3RWiyA9%Te?* z2MnWPN43a;>3n>Pzg2Ce(?9d~+x+peC5yIQ4-xJAydji&6wUbS3AEv;R)M`3O^=V_ zODFeGYI#h{%d!upQO7iY=PIL}ov1{|9Jy$;S#zb`$6#dRXu5n1o|!p>-XB9-)^Z5t zKCbx()*IsNlke4{~-=t%nm*n`)J+4jMBmA$25562?7_AwfL+ItYi0+YTFs-O!fMNknGQ4~~A&_%%(3)o9+u`AdW6i{&`YK)%5#FAo-NlZ+# zYAk@F*ijREj3v=UV#A7!-)rt&NZz0C|IhO*cjmO|b7sz*JJ;E1FFq3QG%BiKS}pZV zd7U5-TWQ!oN+!{|6ULAl=e|=X+f;X}zSbJLbOOy>w3-4>8vAOK)0`>nH|_-sQh9>) zu~px7we72u#yOgrWvd`b?3|QCck7|Wx*Myg`DtT-#~xtN3GW4)SFNHEr;TmuEe8ai zMdOic@jBI|w1Y==0{|0$bT&__OTL|IxZ3_Wjg;A;71a2wv7zY-PJ*jCiwHB)ME-vOH29`Vlh7YL)-G- zj1M)e?>Nf1fc0UMakTw{aV0xDlG*M+7kbfnr}nEc7`jV!hNa2`4Xs%Zr+sg8 z=Yz?8ffeBw-I0X*fg6G?jkF5X4|ISMMw6(-m|g~g^51YzpD5B z4usN&_VuK_C74dv^~Bq7Mt^O3PiK0wT&hpO_l!$e)C}9Md(htOP8!v@kMf`T$JtT- zuhM8pqEz3OdfzxzQ|tOIAy0fdEW!FHE(aIqV0Cy4mwRJ!I&+IcAEInIy_JuMw z1MM$ZD$OveRYAH%>mC|Esxe`yqw~OY@xv5b+eb!xy6cBt3cK%?2MYW6^Z$ok?Al=q zx?!93*ob5Ce%&d(3_A5pKl;85hxzaQNhiv1dUo(S`8>fmS#+IZo?rxzzD_elyy7`VZTQC&mQl8cQ(6;4dQ;_LY-k;lyOTQDg0be=~M{jLleXEYY&7arF9)@uHc< zAxFxF)?!_d2Ud$Ur${_10`7LChi|dC>@t_?y@QrJb>7zVow1(Ab-7+KykzvG=@rIJ zY)|ZJvow}pYr<&nZi|jZ*(y30aKd3V~PC=(lRpN_Md$?pc%k z7>}c6)g@2XFOIfUmzJ_`rc$_zbeApcK=oXuhMp-MDyI#@O($V%O0=Fut=~IF16`%z zY|$~wbCo`0pEjdGZqh*Z%_REOP3p=XgprH8bW8qmAF4>1V|IS2OhcY+=&ift<^6Yb zrQE3NkgL+{YoY9Ajz!xdJR}PY-ejo?KEz0qn(wDG5Q>`c^V~r2xZ4oTLVdIreUA9vGw7SRpZvAwMsJgAl;Lt z7OWHA+^#7dW9|*9w5H_4jyJJ+n55MjcIW_oRZDuvIyAC(ecnn%)}0^< zGfTUj|MG^83v-t0P{ufoi_ODZ`bfhz@1l)9(g*B#ee&>?a#;KNM7~l0t5cs2_@bYD z#b;`m14h_7PER2V`k8T=d!PdzG& z-CSX)S;a6_VR&P76hbVo14Ydqs^UmdIBp9HrPwJ7#|a}1Xd-#mxe+0<{9_e1M!~K% z(lUWPs$dsXVH+ygu}0c2u;pq( zuAVB`3kK>Tu(E>PUxmG`U^f|P0kG-!T8KO^tHK^vu&E+08q&p4X;JQ#m9|o07*NHq zO=0L*$)IyExG4Yacq))MNo|SL0HNgJTQ#DYAVT|sYXc8HI4NWLmqD``|iV3 zS7Ey8PG2;YOrD)obW|m}442RWy~}~FqoVbd=))>HTS3?3e|kEku2JFr9BlgxN}@kh zqQ|J{U(g6t7wxONnuhwKB*EOsKW2Ms#Tb%vc*=S zU+z)zw8w$=R?%`L`nZa=s%Y97hVuMf+mYeVRpcNC^149UDv=XaWT=Wv|5%L9TvJXZ zI!2(?lNgKgIhq-pl}#Ru)7aa&q1VBmt{M6W&KRd-Gnx!EybIkcyY^5eULfM4duAw$ z32dmVi)8eTfQ5jr5CFFt5Vcl^X_Ug1t8&4$8DlzGaOCKMLF(w5O+~Wm+3*M#^#HE! zQ8Ds!P5Wwzq64Cy>12Ej$XN$#GU{)u#yjT;PEfe!>X?S?LCR8D7(Fw63`n!iI0Alg*`IwtO?a zXfD0aayHSRaH)}JQVr#(sjG`PRCPGZgu&;b25k(7n)89LQ@GTW*}kS1;Zhs6>uU;c zAvI!)zosEAr19+LS9Gd{G@Wk>@o-A3VSf->QIUUx;Z30s>JuT&?A7@z(KhAq0q7bO z<&s*nq5vAXg8*jcIVVKr&AnF|W*JdtsW@WEzvFDtzEF07Q*_GuJ4$!0iHFlXgC+O9 zp$dE~;A>h*wVXGgv1q{7|esk^o*5IrLyYJ@9Ii4_7)K zDK$xd_l4-gMNDZ1#pAwFg~?NcXy(g)hU`xWc==5;+L>9>Ng$2_9DC>}?3$HW7FCE21BR{bf&6Rct1B9>mlrClBsrf)%p6=jQE&LEns z5={|AK0%-YMqgoCs?tdC7Rb@X1G&W9F^IlzBQ&bLb42zb+JV!VvlyVGKC{T_Nptna$fxLGBY7h2;p^nKd4z2>xQjp#YaMaOV*nsZ@ zQ0=yoPx=u-nyWvma3sRVIamLrE#^CTdHTlgf!B&yV$Xt26^;Jk8%#s!fX#6hx#Fnq zdw;c!(S*su6GA;7P7{(a*R(_fO+omGt}p(hOIXAMfA%xN&C;q*M0{_pFaha%5M|5^ zXd@`ZJa-76x0HOTw5_y}ja^5%?WD=<#phJfPTHgmW6rdty;P(fiTaxwBb}+Y3dcu6 zsaSKCK$zxnxOzM)yLOy}YP8`rISHbLH8P)C%z4CDx z9hokLvms@+8QrBQ#;%mmPd!nJ*AMAxPi&2EJf!D6(O&Hy+CJ$ewa_w`e{84wNUt^Q zt1R1zeiBXz(lhB{GL+1rY-*e$)${m08{JCGW4gMF=)Dwa3~POlru3I;x`r-7A#!!s zK2SIIZ%Y&~>HA{`zr+E|SAniJOfjH+>Hude;JR$%2lQco$=5hBOC$nk`xMN1x}8~c zpug0ZbzDfL{iVGu^bTzqfEMh&!1m_=sg=f~R>s4M(g?MC!{r-=gJ1P={IbX!{VUi0z$AsY9jqZ0u$Fc_`}m z)eX8fR7zmg=TgIA(inN&9Fc{t7W?67F_cc*m(8Ishe@CCve_aLtfAwtVMOJcnwL`I za4DL9E#OFS=OB^r3H!&hY3*>SjZZS*8NUXguL8WQj+mUSr-fO!6Z~y&U#BO-(e%dI z`|#oT?hljP>XfE{}`cyVu!>IjvY8;aEUpUq_I+czgN=) zmGz|}TO88FRG21)2Po_WM|H8`f9B76PtIDQa-?JzJ4mL_(1Yz^QY3z z52POQ8)48^R*!2tDtmkFRg%X^1A-1r5h-+yv`+J_>PNjUh<-E%=jMue6a6Ro1+5t; zO<|{gC)e>9$xc(K>3FF&TmCzB9uH&K%irkwcqzN-u}MmPU6dvi`9%W``VA#Mnkiu7 z4+eW#94p(`O`??(qsk zvv}DGje~bOj#{k0tCuNbnPs&7`N zrjHtFP(~*wOIa+dn0igYP;P&f(x*suSm71=bc%Gf{?Ic>X*@=#=#Bl}hp!3xBJ59? zPemifo}txKrH|P+r>XHYX++Tav5sb#^KUaWhwI%^z2)J*%@FyJewijsY5wggbqqX3 zeX3(16Cp9AO2?>jkm!=uVpIxOX8Z4BC?!?u!kV3;O{vm&pF<}FKNjL*kPeO)tS?K~ z#r%R6J7Iq}n!?i1wz(%MAx(PBIuug$bWF`tPoReXotoWMFpD}tpG_Cz^MpDzUp-E* zr%Q+NWlGAQA^qO)dO@W!x`7_>zsl$waHtaa#um{2nV4eM7SLZaG2G@BsLCj4mZaCP zgQKa{Y-tO7Fv@mgwlrVEybsdQx!50+9iU}%r9#&D0KGR47R^)pZ9mMD_G#FV;kHTX zQWIy^`T(uV#GK}RfOcnM7(Uu>yOSw-z=8f3dYUCgvaS1UO|zxDT6S=^t#*#2b7s4L zBJW(O8yoYJZDKCg*8catag;zkCHmJ+e-j8L`$gZ-cgvCeZQs!E%aMKSHzNDb+3lV5 zWCdC|X(#2ZL}xYbv>jO~MQYfE@7An>(RA5&)Mb_ACEw_#j?N%^%euqmMUA5z>1dvBkO~G&9ae@S;ISy0TG;==HrfJZz#bF*y-m8$7} zk@mKcD3r)rr2W8$O0Az*Q;DnpFYZef_x&2`{-g8-`|Cq0`%wyFdq1RlyClERv<8*s z8}M35;P6M4O~+a}67aQW<|+xSSWOdmA-Ackaep2bpxbk)$xo7}c6lzEf3{qkhWvyP zI4GB9{Uk**pIoy2Bzf1VSSH3;_sPN;J51HT&{ieO=>AXG#2;NohM%R*Z2mGz{#lBa zBb!%ds9L#_p-C%f%g?BqyH z;oVZLYI1sH$k**TM1TJx_4529TVw_{n#xz5mVv6mbYUU&u;E;5(i)m1o@18Lhc?N( zwi8UJST|cc;uWZY{$V+tv0vBC@t{LCDX_6$m_TAwC13^M4Z$lQ*=X-EN4Y@vKWP-? zP|e*^H~E7svG}saM#Bw1p$_&G=)mHCvTJPi{&v`m;E&6h=n8cDZH<#oU6@T{leKV@$Y(Jw{MlHi1-kYVFGuI< zeye8t@s{-5IsB={QOWt1oSrV?R*Ydrj7Z(#;iwf+`TqyL1AEo0ccm`!V!^14+zIgK z#aOE`iX!becZ%vshwRdpmL0HZ6$D}SAmwdD)3Nu}t{-N<2raP!EL25eR!O`^(Z&*} zsK!0$e2Em0a!pt{lthjz`8J(!$ndq}(nm$c%_@=^DoLFxl0XN^#43{BD#xrI~DF8fBLv`?YG=c9%*cG;CO|&3s>UmIYJj>xWVUc3>$LJ(Rv< zeO+xcA4%R?zdx|$bxQSyvEny`?DR2%T_d%Iqc`Gpr2Wrm&l3#y(VcBCo`_RA---0@ zsbmgWxya24ZosMGVnJ2IejG+0t9~wkP`Kge>?{LIGF(De6ODOc0$H9(@pZg`tw<9u z-m9Jwi{rH5aa}~4o=LvmceCB_x;Vrj1Ksw5-6^-r0(*9@kb5GVZa;&9-H=U&=aPvf zcc#GSFhh+1PX(@d$t!JKVLH=Mi0cWE^^*Og`QQ^PM;wrJrb*AGP@fvW2(=b~rk^_A z-3eOB3Mx_Fqq^V6)Bfj@nV-v2i{)W2nunFCK0nL$&vWT}jegb#YEQ@LY?@%(`cm@H zvYqp7zr2>VIkP_TtB3J1ta0m~Pw-pLtYNh6dmaB#!!n!OMpWm^omtszdg{(svsV4c z>cMkr74>y@vLD41oM_Dxib!^n5w{W<33>=bM>!JdLQqKk|84;us5M&|mQ& zj)zlpYK&#XMKs&--c-}T`?86>ZQ~96Cr#~rz1;D2_#Q^PEnKvKvP9M|ze}woK8RU* z(He=T2lu-Rk@>e^M?PCB%%3wv91CYFYQ3~}<||DO=C@p3%w1~7c`G)$C(Yn|sF$v% zBHP#Q)LfPADW5OSSoIHnA)9 zuES@ru_NgeUf*Gdx==+O-kSBkMr}O#1QyYSwt4c7Z0A*a;K^g;`Bz1*#N6Qvw_@1s zVy{xH7x%3_J;B{clg6#O4-mkTF)n^bj&5)Q&Gh0q?2v`Db@>Q3*g|9KBDKFe)6Kfv z*61H)w~OyS7ui33Qc+QYJ-UhYGQeVwpgjEpg4 zXNp6>iagZKwoars^GPh`63sVrGfTKc>&)DXjl4vA%zOaz9ZI#l`AC)!PxHKa3-;MX z+T{&+r;B9t;gM`^9Ch*GP1u7AG}DLsvr89fy$>qz$OX#t;T_%cJGwiiMIaALE>I0$ z)Xbm@l;F$Pvhoh}w}@}PNWS%XFV>+0rPk-ctab<5P@ns|K90qxfOmc@ovhDWB>g0! zjgP`2t(gy_t9}{cnXO$@-IUdVz1br%RV(X+6Lu^Nu`<*z5G+w=(&Wq$c$+`d&*?}< z7Y6v)SW0SutcS+Z;s(4atB4_610E2NEcW6#y0bB06H~KQcR>WL=kx9SMe$bHr*y&i z2ACh0yKYnvc;y3&U3BQuSW%g|rpML#}2Il6u^ zG{lcLXMQoX%8!p{`;U{xAN}sL_O`nI92fWXK2N;@`0Q3Mg~b<(Osi@0VXc$MPMWhN zvw*2eWZ_+<#D_q%RD*?Y4@(8qn|@bY(gvcW0cWUfAR6VpVj2>N-pJe1*MYn-`#YM> z2J$w|#}*?qxk<(LWIKA%r*PFoVG;o>EkU5Y2;4xRsR&?dFqw;~Z9}wOyJ(u(kVn?O zhW&gAK9PwgNP1*1P*q;5VmjIohpb1UM1ATOiwekzFD}8mpF;fdGgLi@n*)~!-die5 zst8|D!@@>Ta$F5ZpP?>6Jc@-z(c&N;+OC_x^-yumML13k*An4KHT((&f|4d`_<{(F z*K?5WmDBVzh=;S?A5w5IZ@{J$Qc^JL=E(_~6wFQDVQt)1 z6nz=YqugJdL`8_%E$}qigZYY-&npQ_|Ej2ftt1e*6_v0zbbl0A^X0 z1ojuxApwCE#&rAu-k;|Y?7dUexCxJCmR2;e3C4VBOFGd6)6klh6c)k*Tqm`}oM_c$ z?5DvY7)L$!(}y8Egt@k){Q`X}LP5XYN2LI}?m!g63-?j|rrg_QF{19e^a$$Ql-GA1 zsM3zyM^l<|&xkJjpm2390Q_%H$8DU)Zip*+(`ME0Tu9c;>*1s`tV z?z9K*9yvuC4F|#uNyi&MF2P;bm=JW^fQpNZOvSBqx^*qcGn5yzCmpCX6a$dL$tR3A zV@-}xuP_uMBAgb4@i49p$B=T#I);0+lw_VXr$b>JZ$mVvf5Lbg(;lS}%}`gDj?mg> zyd~Rugw8d?G`8S~?QJujreSVJC^ekN)GsQ8Eh1;$a*Tn+=m3jLuP3!`ovOpNpQSg^ z)Y}T__i!}z=b_})f`|A{2t~nKCl#kj=rkVr=rmBG#>?nQQvsM$K%-mm0R4NJVkw&R z2s4Q}ls;{NethUK{n~=}j62y>OhP~6zhUnU{j^ZS-beZz-Is`qWBsHe`w8@M!`_hP zfZzg$cwE!3wZ<3Yb)%9XF#%Y0qnc8W2wpR|2Ph(qY28r)c=##IW5i&$>LP$DbyI65 zxGCjEaBt??l)jDN$?W?Os@{^boMr(H!Zo@<+CQxiKb0WsD3Nn)!irzV>#Li{fH(sqZN

1ivTT{{Xyu}fWI+nh){6T8$&MFuve6_LC*`y`L3ZHZ26q81Z2#EQ{mEjOFZ#I+H?T)RbfgV$+wIt|%J|MT?G^zcWs3+1DQgfwipBPL+^CIKTofew zI0nT$1af1~Y%NdIWt6v4|1||e_OH}4ig#vz?WeU-JY2rpP>k$znInra_=KXl(2#CK zq0Q$uq&CrfP#rS}EIECOa*~QOBK>iMtc;!N4e9%6Zmwew{14VC)qy=1NPk81#?l0g zeKc>$N~JP%r+*;dwmh=eK*3azR~i$aeJrh2f|V^bX1oeatBtWU>jy2~lVeLwlM#S| zZwAtgSB=Eb(alqFfYucPa$_}OC4jo~2&C~2tOB(S zyNA>A_E;B{`_caPd=a1G=kAm<=uD}*CAWhH$q)0RJ~2GV&r^ee|!7&u@Ha5*==*J*NoMck7WmQ$?@(Z3~rk;`yxpEBd)JrqoMy z>3U}*_)Fb27Cdl6O#=)6z%{6@Xg6KSPFiijn&XZa69Kt(tG2&Yqm&hCU^@f9$y)E*H@x~DrIwkFLMtMw{n?-vBqTdP!Buv1<<%NPU5YDuWVH~Z`gb0gQ<0^RQDf! zA?b$w+X9iWX`xAUTK$%d6x9uThJhyP-wiXr^EWiR8#Z-X6Yc88`wiS)6J?%<`$|e? zD{DigAAFuxJjHX+;n2)z!^Gk8?3o-_4j> zS0m6?1U6f*25K=FJS(@*vmQLmYZ6Lb zdeWM7N$m#8#zO4g+i#`zJ$YBwh|{v3{A-rDg_`%muCN@Qsl9km?=wcBdxA3WJ9N)M z#53P&4U2z9#;v+MM6GAe+FukWemseN>rSr8yk6aYI9x$7((p;287@aUyCBQeOWPnb z>%Ax@nJ@5p;)Y#t*NjM~)J~|R)J|$$w#6+VAbRIXHr=mbET6hJjWybE>mkv zKhKqh^~dOpzDsNS^BA^pJzeY1`?K|TC~^Sw!lXMidH_aqk2|zz03T>LR~_kK-C#j! z^o7;w@c=HT?*uS9Rw5&>?_u$asEL$lsOPvHbZsVGLYA2 z|5T&n19=zu=W3|9SuRe7?BSvvt@`EFsNoN*$*M7vj`A%l4Dx*8D`)7W3=S)~!N zHmn8mwJ04vNqc$_uN`$phrM5pGTgC`ol;E*i-gCK;@qYG0oWX@lVLe-j2U}go??t> zfO0O^xs&f;UPn6@fvCYexY3F=>ICx7kD?;ahK6D;Bi#2o!>C5S`FoIZIueSBk=UO+od01!iK$+|qqN%KY}C+230FmOGA zv)`bxL%1K0MmW|GheE;(vP2hx%&i{+tJjg6WE{!^+sxMrIZml=35x2Pgs8aA&DUbh zR&to5>kW|7Vx3$Pa{^i-mY5ULO6yLOhw@$xzVw7KSKK-f-x;;{7ZdD{4F{kSl+JdZ zxzk@m`7QGUjVO<)@hVZ7r|t9&W@GW*F<=$T==Lxku3rz5%u&iX7=ZimhQnskckXrO zbObHzd?fy$sE>p8JJmIKjk<>ub|NvDGA^YyM7l|c3NvP1>xl(7D-7a%w*xo@2rXV* z(iH8q;I=?ukoI0l-;IC?V!%o&9l^bQx2zC(5}$}zZg02)b367$rfMrOUmio?j};XB zKJVT5uBo!1P)WMr3Sq;(ywoM5JXxuIQ05CcIl3AZwDo=NXL$Aw_sJrQsRQsKou}{U z%KN;2|I62u@&IxaXi=;iqF6WV(crk_Dmm2*|ynpz9lVgV4gRrI)cEOGEE zNS{3WC)<^YXV7x$Gm>{Qi>*SGZTC`?!P-_Ws9*ceZLLouUyhVRqYZcZg# zF)m}V{Sw$qJ?95Lv!Ox%qe#!j&*dwptg)SgP~pBl6ezWdgCQJ zGM2AogYebx4^WcPNi_Qd-rc|Sr4Soq$kK{gBiD2>S2XDv`;5)F@V7guNswoq${RcW+7mlFl zYKE*eXbyC)rq5~P1RmgF_>DQmEr|r=?K3(%0oKUU^He$kZM}IBxlF{SX67PlIT040 z#6>h}B5zc~{~5~U8@n?G6;bCIt)GZB<(;RLHxVmje7?5XBpxPDJI65aP``?&560T? zbCfy>mJ*+*v|$nts`<|oHz&oM8D_5`R^Yj&uW-6KiTAAkF)&JJ2t}LBK_s$Hsy~7= z5k$eqKB1(^d{_FlGDNLe{!XGwa&*6oXlB6QcsLpQ<%tWbk0UHxj-gTTn~6)&mk6Sq zwzI?oSH}UQ8{`Q4BAkFQBpM+xNB6!!Af`BQsdPtly#Rz)LccP%9^%hRp>7RibJ0-r?8Zn44Hqfsk~PDgOmR< z_EH!tue1Z-0>Q^n+2EU?@~x4PgZtQTB5mZM%1eIpf8=;6a{lWyc?H6vAwW3Pm_|SZ zYzB%{Umrm2>&5=ndLH!!k=VQUhp#y~ zfizy%<29OFFswqYinlXl+siZ_r_ly!-KhNxp6nG+$Y9?1S?R;#nnbwApe-s)xJ)i&Q6D^%}f}CHUH4OnY<^fc8rQ=axXqxw=-O=7vUk8hn5w+XD8TBQvJ>P znzVlokEq@saX4kGFQyph@)6ND7063eXj&4kE!{7Yv4_EH9#_j^%YgR>yBZz08BT{( zB`x)92dxg$_j9?0t-ed;b1|20E}=T}cwkhwyH%qrO623;(e-|bV{|nJ$$v-JSNp{1 ziZ7u-Q@LlGS9huej0QqD#zW`Yf5pUwBhR@)y!s~5F;O~z#tKkHK%0HGlk<2x#(sEf z^T^;cHLYVhYn}Gi7SngmTz_9f&;@%nFO5@a$5Hr_eNEtIo73tVf{xff#!DSypuqHn zcc;ylXVU%!{E#886ZXwtgI&-!>_p2K@*(U-L)pkZR6i3oJ--<=CzJQDRruNQ+>8dU;vxh?F(he?( zx#sypZ9P8a8ph@frXP0jI<|42@c~*^Z2%RmhZU-0f3j}iyV!>*6tfYwkeC#Oia=$s z{k)M+(6a4)Z2n(!Nz14g&E3K4Q~S@jyK6a&7RcA|UjLzAwS`wO)~37dAoD)HpOr<^wS8Dcy(}c{e!jnYizD30qCG`B$JIPa zA0FVNSn3gaet@4#Z*zz{#o}kduRDHy@f(ES`}mE+Zz_JX@XNq&F@7K7w;I3C@hivA zS|FyZ+Dao(ckktj_Juyo68RCYlToJMAMAC@z=%??FN10(@+lC-XID0cmo1ch_Of!_>+q>;qK*6$10VL$xn~XA) znmm+LO7+foLi6m$10(53l(xD^tnG*4^ymT)ADc2>;WbOD4E<##rIahUm*6;l1xWQC zWZx(=B%A+GaLM{jDh*%?U6H{3pyJ*Fb`9|p_?-b?NHE|?m!;COi#)K=J=6_I-T{47 zloHQFc-lu9dh413r@Afp=^8YnYZv*X^qU<7y@YG&!1dCCk2A!G+;0ciu(&4FvWV>v zv4wXqACwvH+{I^)>&_8nHrJe|#m7nRoJ0bqt%{(Ov!e|2Z(5G#wMW(Y<)d&YV2b`T z1!*j9T$Ep44Ou#i-vw|TuZ4fQ(<;`yS$zh~??5*$aqsZcVIptI=0&RL5`+W#t6?Ga zGJb#KV>=JDZmAi$7WptNFNom;Hv27PglOzE$qR>WHI zm7c38ovthtr-z1)m*b+$7h~w|Wgf^L#*pC(kBHqGQ^``&7Cn2E_%rxqL7?c8=2<`| zy5l|Xl7~76_J8olno{-^tTTg<0;ata$1Jl;?l@zS{3Y6nL`! z8N{MdZ{X(`AIWA-Qwq5T_4h*vC5h+C5Snm}dr1Kbtr!O>chLWzPoz(-q2;bOp}cF{ zGkqG2uZiyFeRw4K6=5zJF08SJxIC0{vB3EirRp*8KSS7%CH(11W{DXy90XTD6E0}n z&2tq}F&8yJ2sd060M}Uos{8{GHe~&*SLPJmJXA$VGsvOjKe&{ByOAQKNtKXu062ua z5IDagL$){49%V61EGW5;b~pIMpxsRQg3w)j`6N6q$$AN`O{%OLc&M}BB81cenZ6M? z%*ELas$_iuS^ocaReg#=A_~$SAwyPcq1>ZPUp69->%30-7y#p}`oDv*Q2zW+R7MXa zFBxh_*Sl76SAfEhRigBNy_X8c*XN^5?G&+LI8eZ6?ohGsK#0`t3i@R!NUbCl|3vXn zm_2}sk}1>qj$p0ql-eKQRR9BKF~sY(2GcLs;S*IWnEtuWy}Y^!4nv$yJX80fWwH?f z%iv)0{gVgwejcROiy_YJE=aASq3Vl}yRMBOg+ejJUovF36$KZSS_JN5a3#9yJwc%6 zQA7}20;D2U{s^t6t zM{?sGlu;&*kR!QP0_RtpWQf0P$li|nwO~~pZ}5o|dtUty4GlnNo83SaXNcEtZ%C;( zc!%0+8dm0f8A1+GKQyFMH(*kz*O2brKnb1(QmvcZw^cVmY>2y@+7JyBt42;FS8H`G$a4Q}#V3K-t2LpzpZ+l|p&j2|}p_z%MovX~Y~n{M)e z^zDLKEDUC0PQ=1MFdDM@=_sbp%?D>IL z3SS%b34-!4;4kPtE&5eSbNL)~t3 z-v&()Ei4auS@=5n5T5qJ^4_}HC{v{hpBO+ZZu7DI!dnR#6gP^~wi+Ua#lmtWVlE=K z5SQa4XNuyUF-a7|JQ)joRK&@{w;u1;X+cz2{vWMf_#{RDt|j&Oi`O0exTO|n9LGdv zbnEkL0tN7Kcrkb(6m!L%Y*I}mRvQ(A$&N$e137^ zS*Yp4v#&y$BOj={XC+-R&sWU>m;lP_SN69v2pN`pD(cbXhDjOSP*u}y5mD826hek2 z${x$Ay90(QH4PmdD#)zI6*b*hVNuoe474N$f^QW_QPWcdw?j?;E|SiAC?>fmQ=Sqj zQzz>Ih^V8dXMK8mhu2FF7ZB(;JX9Uo03me_(RWs;9XbwSLl!Qla4Oj%j3|{l@`WT_h zbmTh)@vn|NAaGIoEdsnu+^}Afg?|nmISbG#9XZ~oQb)cAFbXGhK z|3_`!F<0f~HG==Y)aH4>k#IeSq$pDX0FH$33S5=itdFMnAH6wDptH?;@epdWznKo- zgWBwbxLSs2gdC!VnaNxVwRy50wJGI|Jie}nh8}Sat&&|%zBhTTR__3*QlO93h(m#X zro<{0Xs#L)3iMVzEp;!20&N4B{n=TFt6g4Ef%&BvqX7yO|5XJVP>-IKVyhjyko^CF zvB))yvj5?J>4&i|7-g7z%fEeGXeUt48yBH3OG`hwx-GQ!{{_XmWnl<`6k( z^Z{kv=eg~wD>5cudH^Bjdsx|HK|KG8#jv-mJqF-evD?Uug+&_j+ddR%L(mEQoKY%vdcUrlu{EW7P}PSX!%_)yo*NALjuq!D>PhK;pPBO3OY zH?JOmHLE@OluGgKWBzfqX;=x`x6{rtUXuotaZ@#m0L&49TC}VT`wt#WJIZ)aH9J;f z_Syo0&o7j5cXm98-jreUvo465Jwbln52C?O_*Awph|WDhGtK}*VL6(y@FtqE@aAiC znt;5zBbssTNCck@JPy_Ck&nJ{7QG^1o3d_rye%LagizJn0?vpv#*>tjg|}18s}Kff z48nN*9z{^mwSSmEtr2}VJY(gW7*ent2wdf)mv9LVF{HGA|`p#`6{hQGHP|^E! zg9WfWs0itr`y+h#R{1t_VPzm$VM#gk-?p<4rz21KhNxZ2G6iji44Bu5^~}xkf7@;z z0EWyqXgiesejJiGQFz{1TKFVcKQ)jxKI48h#tH$YDQ62WCkIRjq_fZXVfVUX#ZW$} z*xsv%q*q+F?Rw64XjmUV8uk)aT9Y4r@e&RAH*|@;&Jl%#?!V+eRhI>%OQ8z+wVa!( z+o65zbsdm<<=nU0j{y+mTi$CPsA13B+w5=nYUhwpEDJ0-pQ;CB8s%FEI12g{Wdl?_)>kSTkETN+{^e|HqDB1tDC(z0yvA(G6Y=(=s1$Mc z*|S`o47PeRGjD6?3ntg3?3vs^8P4)j@XUsll{`; zhT(+LXM*@T4-VkkiI{#Aveeq#9O1Oky|Ad^?q)M0;;{DFcn4)oL3w+mLg^wXbvWrO zO|w`_;RSqgx+|8H5xen7$n6$}6A$%BZCV=Wt-4FF65}`}1uxi9^=k4c7CN0KRg)XE z?FfX$>fvtpKB5qYt8pz3mvKYa$Z(t&WFB&{WWKJGcGhCm*96*r`+bmR22>wPr>n^+ zH3s2pRj}{phrxhTx@^)$-^|xi>l*Y&V!9*KbjCAKVoy> zEE6c7)Na#hscA#GlXfx!GaAZ|wKJWyG%iSvV$WsT8YH*XzR+sP9wcwoMr*aURl)KF zjq^ASgk|{4{ee`+5r z*R`dE$p*%5bha&OE`P$dR^tw=`-u%_`s080pc9@H1z`n?*Lm}V0*@^wz`8& zA+t!xw3<2!TvRb!K{}K3s1k*3>v> z6Q9`Xg&-Ul;qZb-h3WNu>Y60i?K=2|IM%B$UB9m!2>A$)iby0P;P~9M;KwEoe>j*eqJQb!aI1= zz@Bm|wxAZR?kTr$9RY!u58`Us&h?b%YS`(T)Z;z*I771addpr7AINUvdu29pB+5IjM+ecis>tduor$bsjuwIe)pr5edT)0=11T6l_#>!e&o|n z?(I74o(Ah&-Mt1hx1ZdFt#3d@{p1d;k&!%-e%#rm zoDHJCq!^H`@oE-F8mJ^$4r1@sCpks#lF z;o)TWEf&DcfWsoD2p1np&NaP-BMEZ;{5-u(K~sM1LCyNhHC?x;;Em_0TYq^F3%*O= z_D4nhjaNPU%Rj~3Jb zDW-{li8Ua8B0=+JIIe*93c|X*2;(UhsIcxQo7bv1v4GWmr{b{2Ou1P`)`7Bnu*#Y& z4gwVG|AKOc?U<;US2%^wHQ#wD9;QE^)4_qLpws8*Sq<;d|KY!A7OuD5Shj)-5Tfc0*)O_URc)86q!aQnBriA@WUkuXkGEgERAt zm>$z=+XvJUWB*cxsoQDWrE#*ChV`#aPshvSyidIm<23$8PETCQFhh1>t4G$rHWToKCeN|C&_JCObwbiNv_3$YS5xda=6Ple0bfe zzptnKNwPmXs;9e?FqLf5lj~%R^ErA7pA2}wDN30vH)cV4S~OYqW-fZ#JQ;L%Jg7*} z?en0r$#O@Rhebl#6c1`UMfUga>VcfXr_??ewn)tGclQ>-ys!uD=wuJYf2%&&gR-Z9 zzrvlq2M61Bf_|TZDQ&wuIZu_F^4adL${YC}_BU9cXX?kgQ`}TJR^RF^RvXqs;pZw$ zUl-9wQ{~adL#P&jlvNt8J1ipCX>tR<*3|{{m{sUROStaVbI60rJYOW7fR15hwB$5( zn@|F`#mwpUgM&K^F@i_1#lG11&exj0A_2c3uKqHL< zh1K1D(zT*u&3veZ;%TU%>)G^Z8tQp)HF8On#~R-Qlfz4?J8qyYqy?$6-1ZUNIPABd zOZgtA(OCc^whaJ;eJxMnsmX{TgrOmosfW}nnN8l*SS(enjGli3cAwWU~mFtbef!y zehIEGd+MPYurw_aZZNr~V|dt|ggyd0+#kR#%Xr|Q@m`1qWn=7FoQk_xKOq&{Wg)er5O)quFTBNgrMuW^jCNuOE}tN2C+ipoPfiZ^#c5=3N+$lQ?=;&AgLM+ zoh{duU8{t=_*D_|@>lwBHd+@REd{fYc*{JIc*BTnfmTX52cbQ1brdBWjj(+UE^QDE zsCRsT_alt5(pvC`J4lIhIn2dr)R?~g6SIO+#z4UmFT-)~~x(LcUOw5x->ICE%Yp<|>K6#QdM5)`& zmEHI?a9STD>nBtZC-+kSxtN3S#jn|O<+gGk0ajY0qe>9BmyXXxxBvDq1QSUZ{l$V(y^(%z!jW8VvZ%35KO*p~@9;Ti1WS{h0LFlEHV4h&lHO&_E zH^qnNL0khoj(lG^za`2+QHmf{hS%+0Mc(QHa5kngp zn_^?>BEhME*{7&XhShmu&^zv&1w(5fl?kH>0w4|%#Bm^Y;3|a$sOUg}4p7m}5k`KL zw7gZck3d&b(N=`h_Xw*1@-jok&lLE(PZjA|2=5X5AfP9!Xyn+*UZkSu2{g7<0zFnm ze<0A?RP=O#c67<%Dtd%KFICZ71X^}VSJ+pn_>TpCoQmHn@HJKG0*;ce7U)D3{e?iA zRCKP2{!pMpRP>huE#75E-UJ-n%f$mVTjB;1aWUCkf2=rawv8!)62zO+_wa~1iha-G zSM+DP92hX#4v5uVY~qX-ajg!T^8~IyRbGP?#*19tUv_GgA$zeKCDbVc`}?m-Y?&Ey z5-y+EZ9BI>PG!vdxy_O#|Ds`mKmD>u{+qGx&*|Q37e$InCVYlaD7Q{i}fSn z+m9vCg&VF;cF)xaTXn|~wpf=a7j@?7pO)cm4XX<@HhbdYWVN{D=wqK!c8=WB)K?JZ zMmz*u%!0niTh|-5(i}NM!}edN30C<7ru&XATjc)T(J$tyH0ZinroTp1T37M9W% zAHr-fZM!XMx%`2~%dkzur@`-#9WPPRVuD>YgIH- zYS*M%1&oS1l%!PN;uaN^2_+d87Ad#TtS~LntainlSY)J@@AI7J3_C1%@9+J6-j~m3 zdA`qco^zh_XU?3N*_qisZ@d7-Zu-QSG^O>y{Wop;7;b7eOnI?l<^dO z1^Dr$?X2<{y;Z9Eo?U!KzeqoOJ4Da@e0F|tnk_f@!z+f>FSE2~_32XjY4+K(`k$rJ z@7UgL`U_I|w-vjK_0I&k?i`5+@VbzRkn_IOrUk$=;h2AHND?I6Hy)EBA*pF{TfziL zST__Cf-u3{mJo>vp_tJ493=EY`UV20@gFnVL=C|K$sUDL?(fCsMDR-!<&B z?fR2aeq+U(J8+Ab%PNXq&_@LsEl#>aZ$lz%1KYMf4!_9D|wEvzg~vx zKvxd2yG!*K`y8ys?dcoaBq_5`?#5DBiXINR@d&%`pZbA)e%jwLO@D;F`cHkObm#+i z=PUZZx*Xcuo!$O`zE4H=tNN8e($xG4Uzz@q5b2MCidApvon53&HSGI$^mCKX+M`W#evKT60)q{227QcDOg&=2`n9^1HE zZS(ZE38^S!!{5^%lU8qJ!F%)x-J{-y%dGRJ8s26%?a@c;9(D1{IwNhl`(eX9`8s=G zkN!R>{dIO>kA9)?%?DxH=X&{5R&W_=T@Scc1h?5x(qJ-`bpnf^n4fwb|yihq2lpB^MVxVyspkzN-h1!u8~HTrDn=Uo+9`}P0q z()0Q^VNW2g%+31;8~dp~x$nPs!bolo|Cz)&63si=)1T^JkusLE83*)<11`J>y#>$T zO#J}?o>rWC76IOJF!kVz?8O86VbZoY*uevOXT<%>U=;T?2H(_WCiFu1>SZkHpnkCQ z`|Ir9gZgRu;p>7l)34Mw;YykNFPaa0`5Wo7(^v&A)`5 zG(6J?&KsU#-`DFOmRgF~ibF7cQov=xF*x-d=w163yt@%keLd-H`yu^JJ=a2Yl^}mB z!XPu)wTEFB_V1V3{fG5~r1;_N*~2hjyQH&&hxK<##lzV6FZ6FqKgF=0zR(|(B4gOD zBl;RC^-i|_OMS8wdMB&<60ZF09m;fH>A#SCL)Z^r>0@R6a=0Wrler&wOye5}XE#?2 zLCaap*Kk7G`$cANfD>Nt6Ks70Tx5RsYyCW_X&Gz!8urVBma%RPp!a-%oK8QEPFn`n z!@(OI0`-RH5#xex44(4Q>Rz@fzpeH(!2=e-OWBa4`V{Hs5|(uo3a%+&&mM)U-0fiZ zegpbbcd*C5(XThme-hfh5}quu<^F2h_gB}X{L#}MW2R&J(~^BF>v~*om;TCUj^p|f zqrS-Ru9=k^?44mrZJngN40NZVWlVab&~f{w(gXEJ=|%_emSL&lU{+h%73rVkYX2AJn_BW5hSg6n6;eNS4a^H z*=s+*DO6z&JMe=(YfxkkY~_2VSHew#@bFg`-$dwk(%=HspPSgyAN3At+a~tWk1&v9 z7O;Y!;0V6tA-4A?{f*M1hgdhS{$G-3Bm2s$zh8PlS25qG?-eA~%wx;W=%4PFwh4Aq zo3`Tm3lE6oUb$)Cm9DTT%yF@ZCfI;_xY&Xw{YTOb4>99e{QznBgY4R~`f_RQ1I%|; zf3Fn$09*2J*l?z0Gt^Rs@qw0;9S z{j#RE@f#cgExDgreuJxBWA10^C@*BOqTk>+<(({c{x|)+o@rTd2)2AJ z?sCHISrv0H=-&>y<3;!i%=^L`JiZBk1K75CVgZONh9_nO;X4fBz8t9MO2ZRiOvs-b zbl0Sbp8>+P#Ve@5y*t)jmx^ z+H2W}E^?am^*Z)g7kNGIm% zxP6&F3Hdgi{iCbAMv8xcMRt?#keXJr4c+7zDPdy83*F@7lJwdA%pEF^lS0?9w?pL{ zqzReqQmAZ_o?p!d^pNLBr?OZ^5BZjr`<49O&H-`*z;Ff%dlt>3F?j;YGo*BvZ_mV%9{xyPa*2(T+Jr+Sz zr%a3jVcn7*Wc6f3JJwTE4smHtcJ>7iK`a@eBf9?hhUl zcY_&<_yk0+hd07#WA24*x!Enu6(J8Ax(?F4AxrQw;KUWca~{61w!3Z9zpnVcfK9|U zY2t0SuzeA7pT0BEv2HO0nKW?{a3(xQH_?0x`#C}`lh!X}#l7Vv(!hlkt-a-CQvWm2 z(AbBop_=w3PyunK4d1`mmaw%3d5knJmi@yZ$4OU4v9AsCjneK>%+yEjf6a(AILbO; zn_zG+7S~@7!23R-0KUW79R4>j!vbdr0>7l(ecW~7Vz#P}+)tV{iski@v!z|p6`_6Q z+k&J&m$JwE$%869Mw}X7Ix0Ye(=mM-8`@u9F5Tc@p8oQW(#Ok~GfH+!RfE{6C>Yeo z2C-fPU_(hA#AXbTH%hBuum{LXC3wfLd7vC6d1td52FmwIz3yNi43vjYC z*q;Mst@P+^72O8Oh9F5dgAFvvHPWo<6{k(|i6H6uMHTyp$o+#{!FDZv7q|}}%*vf@ zg1a~`F5;Fq$YKUdGg+P^OB`5!Bug$?EMPfKmix(K1&fHk4)#?qJ@AjlO>ZZ zI%pMdHs64c z&krQTS$`{`9ne0n;;UHsh7ideS}}0E48K@Vdqc(c334AvDo?D~JyHHil0KPUvBM$< z1tr9;gsUN4rqTI3&NSHfXf$}He9&uumtU}-2c|!-;DPo*?@Tf!fa&52c6^fjcd5U% zV)kVDcKD5(+t{m9(hJXf0Y7aNx#50gg!#TF;X-%DAS*|e#$TY4#hRZoQl z;m}{qFb(z}C3mrD)8wC}#!GC>b@J;{+$Hwibui29lUYxzoFYARnWb4_mQA|MUbD*U zrFWLI5z}Fxe9tA8HC_Hz>SbYzWh|X6{{D?LxZGipJ&W2FYR)qM5Om# zEcfjqz4%y>v|`I0a`zx<<5BjMLtfu|PB<=)aQSIUbM`gxO#0OBZ17Tf zP>(3EZ>qL#4$+6R*-PdA(giIm02v+xPaM?QmLI|ZWRey)u-BH#gL`g;@7~s|fa6ZM z`{*GpJH8a=4ZM$H%rbdd&pP;4ZOuri1mvskR2Wal&F?_I-I$(qsdiHFY=_{@OMP4G#E&m#ET4xc;WlL4PK@L3O^ zjqvfn=M;R-!$-4P*7SnUK=_P=&o%Iw0iU_>SpuKC;IkS&55i{)e4d8S3-B4aMxLS> zw?@`j;By^(Zh+4m_@uz+R`@J~&)?wVgwK8Oc@RDi!zT|uPp)BG?~yB|lNT#&_rigl zR8q@cUnMUdc$*gXP9V+^MYVSYWsr&Bl}&wT$$0PO;dkrVGrIf59)Jb6u(UXA7~u? zBImKAw~bxhce-I;9~|I-?9(?)klhVT2QgfyE0K7%_q`i@|WvgMJkOJIPTTJiCo z(H|iHF?MtX$X+?q;rMa?p>zKR%l=-Ed=DE0J_6K)K9^Es)+ZXVmULdMsuvGz9X*{DgTPdJ{Jo7i=;6eNBdmSR6buG#Vsq z7*8J$;{|o(_JUz8X8m>XKD^cTe)NS$f2M=PJA4P&1&lriVWD#xxph2uTMWvf zcWdD;jd$yyfbdjaf8FRpkTs`19rUVyyBIQFY!~~R>|a9KyCDuU+x~#u$C}PFrG_|B zHre4O^xF^M&Bjhq6Ay(t4|nK(3PBFxEh914^IG}-IeN(m*7ATnWaKT}EA^xO$Lx*! zk1Y=0Jse6qwm4=l%I_D4a2;+^-aedJACw0S{T%J^Xw4@m53M;IkI&YOMCA|jhxk;@ zTr+b&DEI09(lEX)oG`N;56Uqsi%5M3D(gK9s}9@~40{7OF0+4B0Gq(yAQ|2_H6evkZ?lKuN&;z@GSnRkKj@j{sTmtyBE2jPN=Y4Q6vH5+L?~>yu z?ExFy#|oKq8(@)Kam6qncvEZFwRb>{=TtdHybl33rA5c#5k}!~cF`qA4IYS5!Dxbg z*5`O)xH)72UsQjdqy^7uJk+(``%h@RpoB&;WzGB*DIaZRE z=vYQB9D%{DbH%x^hMjh^S$XonWob*#!ZGp|D{knU_8EOC?R2v*v7K)5#kbRKzUX$k z-6w;N`*~ab7BiITYuUsO2_a{U-uP1 z)Wl;d>kGuOVC?98vV(p-2KE(VWvLQAkBYNZ>{M}dK@RQpEL~pJ?XP%EYfR|EFc3ygoialHX{$(nAiHg&}hmTS&H7@=^$OG>O)3Kn(jo6HAC&nj7d`Z9oEq0*Ku1DJTUp&uF z(4j%p1DpM=R&2qd9NeG7-4*a;zP|vTDPClP47}@VWPC|7?JO&Sl}acD?wsGYGk0To z(NqBka?ujrqrBWaVqQrN`7Gs1ji;>zFeVz`>4$j>;Ohd|p%R;s!=Pdily6+sDtim$ z2Rrxi67zt?;KRzd%f_zxbK<;79@-@vo|0whi^XjIQ*s|&FkC4J-*l(x62G0{HEta) zk*~r9m3;P=lEmiJjxC{B@c8R!A(lZ0cVXGpM+)P(_Zj` zoin$eA$FtBcf=0l!^BqPkBLi=-vd^@b-*g ztQ=J&cS{yl{g+L=y6IThZW;r)8n5v!Q3ae!%quv9m=Dth^0#8%k!0uLzax7V+Iy4T z7zA6EuPZ4s|q?mb|d=lC9cGB-cs3LBIdK>3~dj*5?jIU zg6?j>3=ff$6?q*o?};;TH~>DJU#HBxpu=S673xYA;(U>O>{y{Oq8u!92r-Y<2bhKj zXLc>RrrpHb-3-k4c&F#6b(1f%oo@A|PCYE#NCDu9&GVp z(rc6?EjYveERwGeO)RA~^U4J_>lrx#zcTeaBPS)VxzKc_36{Z!?U2ist7&=_&RLhk z`46mj(f>dbtap3h;utKr`3~^$9`60e6@2-g?b^U7|5hZsjWc!VGDU`y>a+Hd7#8$Mg2v%iiy_t6^Pbi};!huc>ip)70?6`G9 zKt3a6zs~dV!$VP-R=2m(WS+0AAOc2Y9w342?x7 z`#K1jjy9QQQ!;Woh2We@Y)8ABmk}QH1sqK@EXCiU++sz$7nUjDEaVJin4%@9=%)JH zp5kB2>M<=?6{PeV?#JzCX*?Uyr;+S&$niaBeG~_5Fy(bV&01&_9l(KZ@;NX#=x}j^ zj@lZN+3U~A!(Csm=B;;QK|l5S18a-S_Z!FN@!&!?`VO|!&AvVDbc^rRcDl{Ct(|W7 z<$|vCE{&<<7K~dM%GWk4vIki4fePcG^SYGVcwP7?WhQgxy_yc(<}VH&j%;ABY=^Hi z+#!#N)!_!#ZX5Wk9%_(FhZ{pS@E$Q?ZGL=!rSFiFT*kRP zBHExfMxVBwZuYg(9#y1UeBO4t&DYRQxBF^IuZHq`Nf-Ssz?Q%W@L`Rn?Gkyh&q#_D zGlZ#FLu^5NOE#}KXD=}?=(vjOiB0IA35{S?Kgokfp;76N0!-TbxxYW&y5HX)>#|ux zi5x9y=JK9&nbbM?Z2Gy`pL4t_=LP6hY#p?ZM%7nHeUOatJit5=(_!C>ww5RSTZIwo zqe{18`pykaL)!LMwOPE9ZcNCd0p#pvON-?JR;#xF9h5fmn(iex&Zl_oATn-mzBKT~ zXrS9rPsw5y8c#n~!$syI!>_Vu(I;+05JC0JD)uVS-`qg1R@aj=S8Ra?zj zV!lb2tP{P0hj~X-2_7W@>{TkeQ)S<&vfEYmJeA$5vS+I7W|ch^>@L_Yc#U+bghW+_ zR^0jK^D|~&tjgY~vdb!at;&9xHe_CYxypXpZ+H2MR0(zd1fN@F-=(srtL()pd$P)& zqq196_6(KX#O*F>S&Aw_tICj|vNvb?dm>t8Z&2C8RQ76>z2!chm-j@e%6{CXN+?hz z)Tr!PDtnpA?oinaRd$=oo~^RSsqAUO&QD;Cs)Qs}293%dud;jB_W1`PyP4E=9XcT#c+HZa}_F+fy@gGqDy=B2FX2F_a0F21>9X*AXWp zR}-fr?;>_1ml78t7ZaBw7ZCHK;T+;dv}X~wB4-fm@L1aAAjOPI3b7U0MvP}3z64?? zavZS-IhvRslpBdF(H=$&5439N;4OcP7rBMDCwTJ$98D6tjHnzZ1>QFb*NTX3$Th?c ziM-i7J>xgTSgNYlFTWQ;BMLtWc3&H(=BPr$(;3LFViLx$kD_l$VOrloSOK; zi0jd=A@(A-tm1o54crgu^SVeeqH>%#4!NG#hFn7ocM!rXAcp&AVHOYsGwJc{PC6I;-pM4XIlB~C|of4P@&ZZl2{|`Uy1+#z>;CCKj77)YF6vHeawj);&JCVzU5AIfXI$7jv za?FD8o6q?VjLR|Q(!D&K6?w-2|ADzU0EggCOgcht$;ho4JPXfWbuT~lj?SOs^wyzW zIqK%?*G0<3d7zWkza|@9X9ibWe5R)VisW z{rI}v(`82=-c|g>gLmuB!N1~ZsRPTXH2tbB*UHOq^<%zWaeD&U`QcIAC)~~_QO@selcN&z z6kKlgZ(r}lfytJeUk<{%cQ#y@QYNDbebc}f;v&2FRTg^!FBlE{I)|;DZuVK)=@y^4 zoo@3P+v#?nmUIm7%k%mth8RNLfcVF;N22JI%A5}he%;%)G3JJ(m9S^ul4C=MS^nhP zPhK>ue+zaS@eZ-u$la2R0n!EpeX z90OnBZ@gzYdw`X34`}Qhvv=0Vzwi>v3RzX9JiNP5-!5cj6>?Nc3+PabMl7^8s0HUZ z@7^k8v60sI=QVYrPYp1yh|;TZ@P!RbXN&ih{S;_5W2t)}kWe3CEU8kCT9`-$R%0PH z3gkdePz8!p1&R&~WTHT3Z>T6a^4VY6)N(nd$2T<;S*I9YQ5kOQZWtCSbQv7-1N8Sn z?=I4ZJhEeoA23`Zf&l7A*y2rKL68H0qn%wes&jCysbjwJIb_^ z{FtO3D`C8Yb1ia0DlqOV7A#yOzTUOv&t$vz$^Aw@7YCJsxAf%aqpNoexF*4~|M^c< zg9_hfo4hL*;vT61_b=?aU9w^RhIesyWjOt0H*|1#w~fO6r8q_zgXM{Z_k~+=Zw{Il zYq7J@UpxEloEy=eeJfk`p&S?U%~+)-)nN9ngv?YEtQfCJX-W&bc9%S0RAnWv!C<8Z z4I`-rjo|59iRFkIoLIs>ua_hHo#5ekH9U9_mA|DGUCWj*sYV_b-4+?U&bw`i61f3X zh#co_SkS^2)yM-!R`9^{pWsb*dbJ`jFKycx9ykt5?zMzn`B3f`8BCEI(N>AWAR-@M z%nl!d$e4xqK978GafirSh&=poTjY(8i^!G{)MOs{;Ans3>lU*eH4r)eJ06X13|{C< zh|FsdwwStm1?J(QtD$n}>VN&}hu!Z}h0P$kmX64|Mwc7WT=<5E&*0Y-uMS6OoIC zQ)C<$-zZh&9gA46BQVa#{ef*TiqK{rIAaleVLxnQ2S&AveCr~m&25p3l3N)21R}!} zgUAs|g`-CMnt}{kRrEy@p1}#>r-em=J1bmQ;HH8hmTJyGX(B- z0NVT(Z}ancJh0PikES;B(wfXXa2!UtBZbX70D+J4U_7u^6*xA9J#+v9V-A1d{v89` z=d`e|G4Pu_@S$80*fUfWxW6j!V++`zgAllZ2X4l?SYQm57N;&?Hy?z+!`lU(y`V#j zJxML><%1BooCgk40#^=E1)hz?h%=-QZf56xfWTk-1E<3XDuMHEhR5R}@UV7)H{9GI zaOLb4cHdD5{00v^Zi{HKcd#n(1}sJdJ~y9zpfg1F`-%tS)2IkK5|a7stD4V#(HT^M ztD#T4ug+Hjx9vr|vs&1V5r%;yU+00BZWbGtQ3U3ty&A&nvKE&kz&7tC9W_nRR~RjR@4T{%~&O53QH-l#0qukyMKrn)%14Fjky zeAriFIm%K!hnDKYJbWXR>+?Y0D!pGehnDKL$XHqLwmC}Vwqb9$K`hm;@WAsQ7M-9K zfm^ZUZG-)t&}$BLLNG<l$HmulENwssbmlldx{ZJc~K} zfk$-=oSq1a^%oGhlm|ZfkO*89sR}$w6?n%ier(jQ@N<7;8w{k<#Pnyr@qWga;~iCo)H75P>yMr`k&-^5Owgueca2je511w*Kebn#8B_bKS> z0ZL##$hkKuf!hYTc7|B1U*dtMZxn;vYE%t!E*7J#)i(A6Tzs04{lS+%>SA0+5 zK|)(#zH#rdDS_JtxfNc-b?v9nVhX$pF8{-Xbb8GqFdyVSQT`T>wK3POw!pl_4bYKF zi!a~E-r5C$F^7M%Zn{wk+}2_<1n%|@1pWta@$)XxVtZdzi<|oUTYSfje5E$l`CF`| zz`TyJ?0g-J@fOVC-@5v@1#WAx-6~e$-J+t*tmKK9N88aJH`8Iq7t~Ruf0=Yss0xPex3(jnl1X; zC<61+UN!Q-ysrl((o(GoTnjy^1cs#=&T(R9VGjQwAG^LoU?T+POEm?4e1iyV)2jyg zSYLnOdDqjKMq(|G#z(modQ$1@sO#COx8c}#J?8Om*ge`pw{6(A1hG)rOL(LAtrxwW z)mzouJt(#byVf;>uhzy-csSnMW(v*wCy5=xM!(WWiOhR@%8U+;&YB`t>m5As`TIqq zOCwZ`o`S_FtMzo;Z$=tF_6N4ZAS%5Li}e=}_!~pJz$>SB2wXb3g+2Na4D)s#c(4+< zL8l755{nUmPgrSb-tQ0Wfu2+Xmsx3PZXbA?wL{>BNn&Y!jt8EfC0eXi2i_+81NXAh zN)fDzTnRm?M24mLOK9?B%;Mj`4qn$GvKAuqvuKLE@jemR(o5CkgL;4D>#pOgva!bB zWH0oj5;%+kufQDsz?Y_V2yC&4Rk@fq`OS4AaC%Qw;7h&zf$yEhSLJ>m`2!nOffJ^& z)iBD@n8P1kH;2O`=< zzIAGcCKp{JR^?}Tkf?!?{(=$o7HvOz9A~ zHC`;s6nNDd5!kE_yr-8x@YpH*1X=`c#NA2*^rRB_GCPlfmtYS6C^t>+5ZDZX`3ZCp zZ}Ic1MPPfVs>Mw`{ekb8Ov~~IJQxqGRRxA+83S*@9R9%lI|jB-5X&;-fe)<`fj!+- zf%~fhKQ@V$<-I&G-(g!|1fj*a{PycKg|ONQD9h> zwG^0_HXDmkmSqb+fi}MHZ*e+|pwiW_D#N)|%$YDHFyCEouqc7CJbtaBa-2AUeu@Vk z=M*jWc2l)@0~RATu5;JYs$As{Tm&7d1cp`lTL>K4KJcs8b_nc^6RUC|54`kV5!k2> z{Av$>;6c~Ys;mlJ3mvHhhE@4H2s{gO_{aFzH5~#QAuwN+De&X>h`_e4sumv$^#`7J z4V^&m@wd1YI#LM?C(sypJ?8KS?$I%@ZLBzfev-F%-`_>xtPoY;9;(2uiL@lY=MQXF z1%@RV1HaO}UEnDbJG3|p-nha~pr7D@&u56hrNOGeQ?M8@#&5*alKieeupLHFX)!Fx zjS%=7ZM(oL<2wW{9ZgHJ>v0};zxWyej!CVsvHEt!Km~~T z7rya4I#1(w3G5VE!N-ICg`h*RZse|Z7!7!5_DG*RbTnYwcgx&!?q>gu;4>(fiRS`O zwtlxfbP{xFTb5Ex`fEHdobwB>@a#^s|44Q#@+*)FUP~wszh0fa7L&G<8{b_#LCo#D z-{9YpTF_@b*-gmPCbGuea%`ebT@nvIhP=wrYX~v7-#{htN`;c$iawvkvwE)_JEjB% ztF1`|m~ziQ{k`zkINm%H+Sh?63w>T5dVR+%yw{Pc{a( zKqs^8-LlD5kKL_&(a$UX^CSM=JQc^QVa4)a0#Di^U{K9yk>OR?FxYX(TG+r;UmJBu z_ZGBEFTp%Haddww51U1y$}u5>m^;N$bsT6<0XqhP3h=u+3xB|^dJAuUWw7dt@_hQ9 zI}_4{KhK}0=;E=0BVW1vU(?rq#hKSU!{e_lFF@Q_lLA2?pc5-&Bj&A70DrLa%4@Jv z;+wo^^0A`7k=TSBrj$PwONT$m%nNFHlowQjPL-$ql~B@;P`Vq_i%zp^n&e^0C0(FW z$`InR;@e7IR=kPiW+(-6bNhucd^j7?=L|8o_bh{f6kll^9>dC-ki7hkTms{H{kM*)3?VBRjtVQbTqt+INvX8QDu4stviA>|ShrJ-3So z7;-4Vj;*hx3{K=SVh?f&aS3uEaV4^cxE?v1*o*8W*5E7^v#1(b%pxOll8c=9Jz`d3 z8z$g1f}wFBn~AfKqlgQTb;PB}!NgXaO|7GO-UhUvC2mG;B-Y}+vnsu^?9w zCnJ{=rz7tqb|V)N7a`{nmm|B0YmqaF8B68SQ1T=mG!#9rjn#2UPRyn)yljBjA5BP9+Ks)=pLyNDggrNmjt z#l!{31;nMuImFe-S;P&<8N|)V4q`3dOP+#^_Zp&NqXY|b0&y~O9C12wG_f1mNL+** zMqG}pA+AMkp^dr`*-PAte4JQ^+ls566f-I{#CGILVkdGLu?M+Ca0GB6aS5`AxDq*= z7=Jv@=Op$brx9!5M_hb%VwVw>BvRs#t;9Cucwz^#nK%nMinst-M_h^=Ok9oJI+A7q z@>$|$ zxD`2-SSREDKbaIWyiU)TNNh#65ZjSsiJizMVh^%RT!O46u0*~(g15dNxtZ9De41DT z@7nY=0OS7Oh)NwL#35G`+mLq=JCI9>vyh943y=$lOObPktC6#a8;~=In~@#FTKEAJ zxZ#=<6DU3#u?0DSI2k#PI2}2f*o|x?EQLe3*DM|Km}B4-jeBBv9#BBu_g{l6{}lw?XUBPSADkuAh_5u#W22zahLrK0m;yC1LVjJ=J;;T`CCDD)O5|+f zdSoZD7degCr5Ol{ofIQ-5^)@|mDq+HPwYT86K5eu5f>oqh)a=!iK~%YqiGf(pCxWa zZj7e=zjhEPM<~IBTuW?0t|CrGE+_#>c7a@lcmm_P4Ymr-q&@4dqa&~QLMddgp=!OE<6PuB1h^@$##CGH| zVkdG5u?M-3xCGflT#1}bT#xJ|_9CabNYO-tVkb5tClSXXTZwJR@x%^fGjSGj6mbEv zj<^&#n7A6bbui5W)hE>s#x(Z&EDAvPh`5?hd~h?9}aiPMpH61$O$h>MW(h|7`P z#I?wo#Er=5gK7WYib^Ua=!O9&6Pu9}iLJ;MVmopyu@l)u>_L`^OOUn1mB^P(Gz*ZM ziM_*c|9_ek&2UI)AT}b`5yv4{6Wfq?5j&7eiL;Q4i3^Ymh)a=kh^vvah#QbIkYWGd zjEaL2v~Vu&OCdHP+lVd53B<|Bam4A!(Zp_KBXJRO7;!nWhPW2FWf08*WS5teR#c7? z>qY?A6PuB1h^@$##CGH|VkdG5u?M-3xCGflT#1}bT#xJ|c6m`rBZWV_XeZ_mFD4Q5 zhZn8H{NcrTV*bRXnYaWWYK$VTMAi}4BL@?Eky{7y)@$Gg+I?pSy0~IQrI8ZikdF}C zkZXw@$W_Ey$mPTZ$UBKkk&B3{k@JWfkln=1$eG02aNPf=lVXBj=<%fzTac59laUjN z(~&L2Zsb_vB4iVBIkHS#i>xJXM7}(LH@FqK85sBfx}Kn%rUWx`1F;pkj@XV|P3%P8 zMeIQ?B`!fOCay#-Ag)KwA@(9?5o_Sr7hS##QjDPZ9K>Zh2K2Ol^RZ1wwiDZs zlZau4Lw@2~ zd8&PYodJ5z@Sl~L#4DTg?P4?=vHbSeYtEr0qQP_GHl z3j_4D06jiH4-U|eTy87h#m6wGTicg|Tu<@q$w5$ov|9ef8D~4NvbTfTS&bFU{E1JD z66ADZH*zYm138)4ikwK?2x}TF(V(abWhio-i&F6I$&J`BgkDYdV8f~W8ZSvr5@;&A?WUc|+dN;GV_ zH#eLO4Tn}Wtl-h6&lIg{JxtJ-*`aJXJo+`N2)1n4+JclQl}A-k zW@8?4x5NkC#hvk6xeW)`mmbEMk6|904;v$!TqpO_eXE431~2c1?rcJYVO(tOT|Csd z>0%S`HmEj%4VXu40_U_%EUve~c=OI4SkM*|#wtPD+G%x0jLKg7y*>7ZN+s?g^#qELvRmvMGVHlh}<;X~a78v8yso z$5cFcN;h6X&PMXHV!2_+n}-GLkd;@$gs+Rm=fmpxyO?K2G zLAgsYM>Rcw>OtN`T!dUo%xh6hY(~4|RbC@2vP|VTkh93gjhqoqN*pTIKiKv@hHJ(* zV3oxBUxrQ3r#G_b$k&0sg=FWOO6%9GYhOcr1(*X%dD@P z*qcKQeOX;!Lr!GbSN_q8qb76j=!FW57YhNaS5zp=}a zh9S~-UocaD!;oRKzThGF7)>Lt$8h6`ZOBi5!P3FEr$n}7v|TvNioh0i_%P33j<%19 zd7k%x@s|W5S#y7bS;{<2Z?QgSGK9mswd~%#=&PK+yD@jd1>W_I$R&r_?NQL!2M)81 zQ3hxdmwi}u6gEjHK2#)9^g8%i0^O!NCV?GZW?NUA6a|($BIXX8PLQ5;3pCauxu-P8|G;<*AG+^E6gX)w6y`K8;O0voJNyy|x z=7}{-kRBh(-j6l()Afmgbnwiz>aG~h%Nka4u2&yx1AP1ao(|e#gI|;ER(}!Z?SSLa zSn#p6Z)4x#tKO+DuW|FInIqat*#@N)?+WkdazQEJY^EPyve-UJj5fhf6hmPlmoe9J zTQL0Q-+9FRkoU%GG_y7bLrp?Xh{XK)%`-Nq1YL&I>~T=k=8!MBZ}?{*ywC5u2!~zp z-g*AxiuvLFpe4SR3pf+Q^TEN#j*K?+xv}>MY+%?v+m&i4AR(z6{L<6UaA^~MIyMu2 z0_q^#U;rVb!4AI|6}tLgR3iSui5bdBb@B2H6Dr1yG3*F(9a#t81H#{!dq^6E>?-7i zzmxq(ArA|gD$+BB+$!WtLRJa6Ta;faWRZ}MkaTG>gyCi(EkX_xQWjDxy4LT80M zE@Z8cRYH~v`LvLa2)SO!bS~j!$u0~@LRy537E%_ntB@BmsRCXh4+~i(WSNl93h5Ct zTS%vn%TVIUa*{Ai6EaRnlaOITUR*dcDdbB+dW3Wed5e&fg&ZPesF1&`qH^nntXdVt<7-NVp-9MwguF*c zyO1{sIbO&=Xfn+$Cg*kdFwtTF5l#jg-MI3^RnhM#yL(Wg#UYoA0H3ULot* z(g}vXuBV0ikdUi|v`NUMV&KmvRFuukWP?%V_qf|3uzZ} zmXMaeiOCcx43dyP;vFOKcRU8X>)Ris}nlBjj$9F3nD1ctS|GkQqYSg|rD7CuAQXB_UhVD9|@TRtx!xkWUNw zh>%%aCTcXxgdthT1R>2r_7SpJj0_)k_*Wg>(+%fu8pjhX)M9u#w)|`_u15vyxXkLI z=d$1$8AB|&OANR!HYNXV1@ zFxOdCDd^Yw1?xT8aL?rG*TZ?e%7u(8Bi-@6hTC;nMlKb<1Z=m$73Tjz(AMVF)OfW=5s0+us>e%B6qS^^x`dbtXNy(VhH=-cG z+(0?M#sem@Ll zWD(avhX$IH(X4l2<94cYV5RFpPX~#AO3CPFIqokR{T!g%(Fy((KhZcc!hfu3CHR?y zMe)P(E+1EQ0&e6c_9oPccS6dy{#aP1g9TZk70_>@AS&A9&k?vC)_0zx)t@8rJAYvq zKAAmlHSBO{K5aK;H1#xfG)diQ_gJeXS=Ei?&aOiCAn6PhGK6G8Fv+SeB<&K(hA@)0 zY?`Vfu1h24YFprH135P9Nt${K*_UKSA0Z=1R_aI|5$O#gKlfjqpzq=>0j5wDO=A?-pc0ZN2_xv&S1pnO;JH*KWy zvxR>HmlHIaG+{^*(mtFDQuedzg$FnGEVglhq3=Ys8N0O;-@{?pG`?I^c#S6@2sw9k7KJK_Ta!W zZ72OzN4Em@M~Y#QD|<9`oM{vFbaO1}%7`hlbOPBGsT?~fx@QulJExFrP9T{&vAxvP zcj1#omrs(?mRpeT+q?h?{8p7b(N5v2k(B5>U`ly06(GFDU|E1qLjV^bo(M|LI0olnb^`ru-qj7 z&_27Jn?CB52<*LjG}AG6@EL!}SOFs&w*+zo9{M=g#wFq~BQU85llo4oR~3X+ zYz95BiWtD&2abCKxS1ds|CAPDb~pgyHvC7&KZ9?D?5St{X6%S`&~3s| z$=+E96|hy9y+M^7qcnqV4#^x)-Pf?k>uz!PzpK=CncBR}qqMbJs(u`)BFo8Kt?D5;7gVKKWhsEJ3K(l@-)~HUE zgf(ga-3k)_)HM%l@fU%9Ms^ZQ4$KZGi)aq?c60Nj%78+uK~LtP{K2sBz-DOKp*x_| zK(noLvj@$cpL*3(67J-JFZdgTJ2N<_a6pW}^VE{g%?+KKb!=Z}h1fbbyE`|Rqgl^S zX9M@l-rxUcduD5Ee+_;!ihs%|;^rT?t1bt>!2O^YfcB@eS{AhIDt(%aNqv{*{Ne9U z3{?cW6(s&CRX`cIhi(MF&UO`nenvJQYk);3U-XBa992?Y!RAii4NTK zD?2F}vjpzZHS8o5(dpjAj7c4rUniLZ_voc;V;b~v;11mTXU9>-qeJsw{-)p_y?`Bp z?5@COIInctL}v6l#rd9aZ9QP zJ@Ckn-rf2)9FD^(!v{?04lbW?>*9`d`|#kl4K^2-p?F$Hw|V$C+05^UFzl&1+f ziDcuoBppIto=AGOm1OyU37nWsewph@?#vSMfnIJG?u(j*L-T!F(f^?|2a_R-^j0iCCO&7Z8Wa!eB1c1J>wExBa7+Rpme3MH!Pz- z#yqOn|2oiB;Vgm85X~hSI1SH=X_;_6 zrQ5}j82|ICSur-#uvl{Kg2NK!4-aA8T{|8-b#_|O41Q*j5f>8Wx^8SYe|c!PfF5{w zq&n)Qqh>s3hD%5H!NFMINd_F--glLg47haESq`{tgyz7L3>$kB%pFcL+}e%@uy~SD z4R+-Z&jaFEP*x|$iY7Kc3#x}L4Xk-OCiQidg!&7@vx9QbOF-hE(s9@!fqt!>_~BI| zYY%^U*n3XU|HE|-xM39ju!9@G(S!>8DS=T2o@kiZd2ABaHSk0unN7dHlTL77Jx6Wl zIa($d^u1{X7wpA25ZG&ba^K5ti;r-{qX6Yru|goQ#9=Zml9ho*)zT; zS$mvhiO6@ggJoDsXlck31t@EYg;Bt(WxV_;1*jDHYX6IW+_&UkdV*x!HnHPfzqG(FM+NS#})Wp`hRPY_E`!P`*i0m zQjX}Nj#7GaJxTj9lC=#a%Sa!k$vjAg5>as8RSMRes`%ys!;isIL$8VtA2QrBL2B;8 zB6k~hM>u->cT>22q_dN|;X#4w-Ym4jaLarzB%8pDf4CP=mX9!f`)o$gJG&Z|s`A79 zaK}^yT-mNtneoDFJ?I5&&LqRoAh^^}3Hy~)xqX0i&`scpf4D!vir`EvR{7y>x4aWS z^bahrHNdZ-n1)8&bLG+m-h36PCqG9S8qIWjoNZWpsoXcA*z1LVU^$)ZaMW8jk_t@T zPJz55#C>=opi=~N$CBM7q>`^e2rm6E(tLu`Br;J0RX1=(2bbP;p2S0aF7q zdNBj|x5Q9IoHN(mc~9mVjiZF@@fLRKUBgx>-cqspJ;RuwAh=e$2lllE2LBM_wo$_7 zSHgnEk786w-5{wMllq2R`uKB5@VKs_e?&VIcskg5EIZH)OWz)Gcv7P(1Q*W+o&>)M zY%ufV1NAKhxP_&&$E%>k;=caaSfz3_(-B2r4p@rbH}vh2Zj53>-!}~AS6&N^{_NOT zxXBHCCIx2of}07F@lQS9qWk%?V+X~tLy*09PJp?nA6rpn7#0L~X6!YLbtSE!5lIlz zQ%WOJBJ@NdQ&*CoQRpTiwf`jlEH|Z}71ASQYC75Dguk+BEx&i|J((H}`+ToqKHSYS z_yd^orTzUaz$veZf&&Gb@(#8NJSHhOfbN78Y-2r06MDiQZePm2CwYLsBpe_++lSfJ zU5V~l;P!u5dms3ws`G#RmcQkHDzphuFbGOjloUaWqNY$VV1X2hRz*pLYSGdLC|ahj zVRN(F+!i+F={DWMrdvNwx3CYJokI;9YE{(Kp{t6TD$c5?sq;@o(C_=X=iDZ}dFuGQ ze!skW?sLxj`E#E0_nv$1N$LjWPr7<@nmXfHxyEejY_+Q&_4I654$D}m_vvt|fdH#b z_ln6Wf0`uDVU)_ey@yFI3v% z_e1~toZOFMZ^j|*;5waQi%#FK9cuW4a>%3k2mY!ZGy6H_G|~ zN>XZ7^)J;?;(P8^^yUYZUg$n0hp#$@xC!IB!~tEv!@6K@*fDoPR{ul^Hfw{S9V#9B zr83y@LzV8aIbfBl|lL6RfdV@6fMhWqocJI@7mp~ee$4CQ#<;=N14Q7p2hSd=EoRl)g8eS@XOc*{5GK@1akL6BpY=aRu zl=;JBut)bctIhr!jU`k`+y1E9tmHkFw)EE7(iVPL>HXh_&w+Pz6>EA}(;iJdwhXNa zI(=5*itI8AK9$Se_pX*dHC3%Fh^g%fRBMF|#yMfYb0apm1!-x^!roX0m9f=yuXv?c z#IS1Kdjj}rSpDJV#VaIeoUmtF%00g2cTA(Fp2$7(^5o~LUJeh`eLt!iq}hgB4N$#H z@x309e)44QDRXC> zl5&^(mltU_D1UftTTA9!)8x3c&D0I^a}T7!+!zT#oy`#?nR9$+pv*jR5e-TQS=VCqG6pbvFJ$(4^CAyf4ZXkPf;{JP4gGj)z()vU z1C1H}i!yZA`O0wDd5YQ%dNh7`uFSXO+q7KNbg&f9eA@8M^R%K)*Jx@PuFwu1&?S!Q zv|p#&&Z7bG+}Co9(^4(LJtmvF`u5sh!peeP60xNe~Q;rg~_x%xCMZod%aJfG{V zs$Zy_vQF+=w0gP1TQq;q3YCuew0xPO^Oh=Vjn+MB*|2kQc8B)f<{J0l&gbzh?$dh& z|JWb*>8Voj5c8a#PZ!V4JsID(+I|4VYo+1?*u&yRJD4WQd2}J|2IUX)Eni$S`kE|2 z+RZ}vuv}B?adn~I^;l7>OTXUK%Z{4sRpHlZ>e{H%d#=%VrJ@I`6rCMZ)LLBxv;!4d zKV;d{cdF(alze!DqSGn^D&knDXk@FRO*-R}I*qSYG~WAqirwdPCvCFO+391w%Ej@EUq3(57}7B6f1o?SR*>UUfAKJS&p1>o>cL;x-j}W zu$=P&b|c9jt}f%Rs`FdRGV5KRwJZzWtBTq78%3i#6`lQSMN59GXi&=?&~k^goJ*&5 z*PCx7{>!q=nt80^)u)w1O;{+0>MZxzSU7$NmN_>Zu(1+p#pc?M{O$iX=B-AsXp^os z>&YW+3Q%*y|8)*|HnDN`o@$`J9c}EvU@<&h^DvxPT_4j z9c$EI8nI@#23^$&?Q!47Q^VM!761QwI&HjF8?-;3?$@4Lj+u|A=nMbt>9k1Ovu3+N zg?&es3u!m(@CSX1)*Q?omQ#`@q!yMt4`N!nBMs(J*+M4VVS~G<{Uu1-Z`MBQW+M%= zQVy`~CIwqNQ8BQ2;crm!tC-LlcIy$U>CKw1)3jbwt83fo3>&{?kLsz%X?Lm-`LlB1 z<_8s>_E$x#HGX?59eFkP%*N`oQuWAFQ_;gJqh`G%v^!>{{WiYUPWDQzo}IGKbAUC& zGy}&c^-?ZEyI#w6&Oh*)^3$4;EPDKFA{zdB?k@)%KJ?&yujl@Ic+SytQtif5S@wfF z-_2b!sBzko6U`FyjA5{h4vqhzE*Zh5&Uldb(ujUtMzR%Lv{CS%1()_~#Wv^(j z(yvzh5k|QdXsCSf`yb}+nBADXN_}gd>xDl>Yx<@?{*Fo)d{Q}V{mw*bpx%;ssx%0a&k zE70jdz4(I@PR<)LET^WpZ{svj;hA~QE!m%?JPTi#XSPxGck)d-=yc^!iw(cWqwtsw zpHcMSl9_og-ZjkXwK3Y|&2>KL-JdsdTI1Z3ETaX#6L2rWe1zX2{1##H2Zr&lcMYQ$ z@g<1=6Y=K|UPO2SVL!st2+txsgV2WX1j17YPa^C?*n{vm!ea=#5LyuahVUnZUn1Q7 zF1~2{J4Akk@Kb~)ggX)LK==;Atq8Xvd>3IGLI~m82;V}u5#a`eMuY~0YZ0zN*n)69 z!dir@5vmZ@A!MyXhFHE-BK{W6@4t$}1@A1w9^sbD3?m2OFJ~CWpAlLS9z@tO9Rn5N zef-4U=cgIQiHJ`|n1bL&n20a|VG=?ifa0K4a<_VQ&X5MV!S?E9UufF;ifd?$l8lNG46yXzuPZ6@)zxrwz!ZE~$ zf{sCOAPh$sfiMPR~#(Z4HBTPUz-0{^{?;}h?{6vH#;_u=o zyFLK@ka-+Ocn{$)LN~%k2p=LO5k5iq6yZMzA0vE@a0KBqgdT)r2>cUZUmzSsSms~S zcp2zdD4emNc){ZG%S%^Olr3C!QOWW}OIMa$>R-0(vW3e^mU0bo)p3<^O>tFnt#EC9 zh|+WIaIFnR;99h5?<4TIwzw9%5t0b!JoD98XCr)p_>p*{sy?n(u3oOz&k=eM2BHQA zAPhzrgzy!xFA=g3HxRgrxvEDYj6~oj7=pk}!cD`~&(+S=&CS5gGa7-LgPVz~e?lWJ zT;1FZ+&DA-s*iZQG5&ZOLuQZO?rmiNI~nZOd)U zZOLuQZO?t62Z7tXWlfgxKM21?_#FbbJ@)~$kOA`5Pu5_M{-A9zK8IAgxe6B5FGDeI3bKi7=y44*tZaJ5zj*ygfJLk0K!0okqDy@ zh9HbU`0!nfza%Dv_Ypoo=t0N=qZ{-yggC-W2t0%F?Dr0^^B{ zXE~nX?nC%J0wFXb@T9f_0W+RC^Zg9;=Lp~8*^6g1p4oVY<5`erzwaS@AK@DaHzDv0 zw-w==2&{86!Yv3J5NZ*4#;ZZ#8IfnkIs~2x-#io3G0sYLg1&*kGa}E7PXXhZu<=i4 zqtvIVS#1~MUm$)IfoHrU2t3R2?8dVi&vrZu^6ba69?yn6%kk{Svl`EKJPY#d$Fm;K zhJ~{{v&t9EI%`$otg~hp7N5<-mWL>}KZb3i;YNbTwFAL3d(H|FW7*>QD@&KnI;*r0 zIbj&%lr!$UAAo5!g76zZ9(0J4R!0**Kb``xuFV$EUyd}`$sSCg%{Ue zQ%7HXmN$uFpXIs8*OQk+#XWg>^x0>5W9XWmyb~H%RMk}0S1oKsPM-1}Bl$E|#xf zd%Xn$Us=Ct{qRMo7%p=#6C zlFF^7n3Yyp(z4Io;w#UshKShfRKI<>q?RKBs8Xk-UjJVyM~=KF>RW{73TKQ%vRx zFm;_4uQgxF7uTccS8u7WT1JIO@=hGHuy)fYVi*=#ek-CXnmVyu6cC##}e^*VojTWi}O6nyZbXkK~P~ z$G<>l@*K?@v|!QtnkuV0S5$3WS6N@F`s8A^P_}97ip^LisShLNX&dyMF0HDi#-n+s z<=MnhMP?<}9nG6cYs#HNC~-7z(txUs^wrV4+`*=6H04;{iPQ|7-ug1nNj1mvM&>Wz zQxKL%$aiH`eSM8;K7-~R%geufX=VM|YV^5fb;>O>jm}wBxnXe$pzZ(n^p}KgpDYUe* zc1vZAg3R17v^G`N*KM*~Q_f$sscuVfSslH46oowaW!}h25CI>;4J+nGNKvmymL z^Cvzy=BvCB(mR4@Mc73hN0f%P>I15HtO5BLU2Rcs~rQ4xy%O-Azr30N4scWFq zO`(C#0xCRV5<1{uVDW)YSL1@p&DF*0uG_M?enr)W%1zg6%SH-Uy>otL?e)3~nIbyQ zu$e~bf|a#fd()a=lwwUu<+AZHFa2E)6+UUa?KAg7C+9YsqAJI7LF zuyg83W`E#XGN*Cf{}xo%tlh$Q2A*T-?!nH}N15#Mx^di4`Qa;rTan7dpL6auX zeM6jQl6NTTa{iXBRxet3%{BTC0n^JjVcufT~khdL+Gg`*}7qgS(?qv@uX^T*JUY}82GFsFkYujCKohm=j2 z31824PNC2+=XsROM*AjS${$ai!<;8kco>pkILJL5mx^JiE!)W#;=mO7m1>P%PXu`Hlb_Qt10-s z;qVr!1sCznF^ywP#=`7Ggb@h5SWh6VKzt>_5`=RR<|E8Rz@Kq#RW0sqYw5=$(9L2a zoIYwDiP3fYNau8#ITF4#jC6V@EU(24rL?Yh#4fKb_Ag#hRk>~}ojcNb!3icGw;k(N z&#UK=D1PoJXYNpdwdh1Nca(D)y)X)e{vltk9ECDGGzwBDk9InSLVMAc+I4i-DCgu8 zkQ)a7iYm0@4OQ#R^+e5R=Xjbk+Uat$7(C~Xm9Mp|GC_J^G&)byXy+)G*~%u^D{4YC zY7Fv?k9OwLoui#&M_An*qO^95^JFR*1J+xkoq4o!4BU*5fx}H>oMT7V*P6|vZ`rhW z3|cNW2F+dIfZSUUp$OX^>u{bxcRMg2;4*4B=C&#r@{W8S!PU*b6Bof z4%0J?Q%sInYhJUJu4MK19ZpvP?)Nn&2SWijNw%{XD;Luhv;;4fuHpHbo?(?$Iq<@h z<8(K=6Kc;cP&O>Yt!-^a`gPi?sYlbOU&;Bjp1-`Wo>!+mntE3#zNHtm^j4X8V{e9D z1sEPp-I`j8%~~<24O)%{blR_}J;Rt)z?FR+^_yutA$m2#uGpm&xSCZP4AHob^Whc&f3+628u zZgck)eLZ#Pw4rJ8a>chCjarVbw(04#p=naGvix#aH*w9zcuhU+pxfpF8 z4Ok@%9isbk)B04l<-m1)4TW?%sHxq7*js8a1cQC`0y^#2)T^nLzfb9*YBu&&OlrY| zrg58MTs!Ko?W^b2X^*CEO|1-@wWEQ$bUkhw4R|&6Xlf}2{;f*rs83f!mFjeIv%;em z^{aH3&M;=vi|TZQDbK|A;TF`2j!m`Ku}oepan($vZ@sxwU7&{r?6(=km$np%1honP|CVd{8+l#&tQO$^GYAN>U&K9XrauyBibV$>nrk0*t zH(^ra7ES1M+|p~bDR$^8jc(D7X&TWqtf|N1>ykROUO?j(_3N~^AHBvVt?1WnWKpk9 zdn{_p(9msYXud_0S}xH~h7DRTteUvd&=Dh~+dODdTg~{jVr;9b8H+}BI-;q)X4b{8dr+-!y$#(c~kF#$t*l_9`0vho+Bd z`h=!WDw=#+(Sn;!rn4qHPk3i`ENj+@h9V zpdY=s){7{9qoE^)r5Nr?0$SLjmJxrZ5wjU$S}!tLd2P{vPWv@AQkk22 zjsfGI{t& zb-QS4=_UKo>(F{0EpJgv&)sMlv{g+&D+V;*qL!k+AH6267uI}>T6!UyUhflwf1s+; zm=>_8r5Lp-T0^Tr>m@bcqLyBwA3a0q;Z2-dH-SZUO*nMgu+>a~&d{&<7PT_;_M?~7 zdLhkMbgI!imV^B$7SOY9?54av)j6!uHAvM`RLfe_$~@AKjfl=Xq4^fI^y2;KwP`)a z6tj{V4ISxq+E5IeYOUS{Zu!(QDOuLCv?Q(!*myAX71IBDoSbD}21# zN<<4=)XF`aX~dimJcCvB8dLQ!(=>jPO2;&{m$rJ4o=Bovz@l-TQLLW~D|Ch)osmT? zN8Oeqw(3pj0tPfcF!eI!p{3~WM=@Jx7}k7?T6&>OJv#3c=gEz6tr*h+7PSanVNnyzY1liE(Auf4|J-Jp_bspW{^LT-J6&_!LsTaTYXys1hC-4d`eeHE^wrpzP2Y3mS5v;a z&GmROya{hm`|eC~ErEYY)h6svu3wAy91GOzYv3j8H?LJ&!}!k$dT*KL6*%)7eU&#< zEr3ep`q~xiudVL=ZV~o~dCPNs?X~Lt*#h%jy1#Ps<{RraVNbYtOMP`JWf*!-nQ5OL zV%y#_^V8o6HRA0GcAo1~yT=PEYu8q(w-#o*L!tLI7z1Wnz16n(DP_es)7YtB%XL(| z0q=m*B#PJ8ufGA6qoBd2L27?KFZVpQoH`t!iiFKz&M|G%+Qj)?F5|xSn@v0P-l6ki^jf%iU(IQHxr$YcY@PUg$KXTZv_Gx%M>na&CH7AJqm zjAzbtjv&vOcq@dMi>l7Vixph*XzZD&D(_6^Alh>#Ucn;frsSFGGMMf@6YmcSWdp)o>pBeAYgp=R)Kx1Mdl7D0D3ch^dan7LI z3h`=d4l`b0tf~<2E#Bhfog7=mm&Z7{Y8DI(o`u-GoIIbCqh>ot4q3Ts{?f(ebnPtX zWJZV6%vrDq)+qYZEO=9V79`(c@$IZVw<;(clPS@aK zzrXY{x?nb5JiT=mYU=zssO39mqbU(Pfu_$v8^>m&6!nZ9g9_a}2gD6$@9cDK5Qe&E>vT^B2>ybI?s+ILGO5FZY)( zUcSs^sVL??9Dyvq%)f9A9|oZZ&Oy2EJO^Hu7QyOU=fIhJIO7>bxa?=l2N z{`}h_ICJ(~ByTHnjvKgW;WGMW5o#!RE)*V^i}#aP%ti4L8%-nTqCtMhj7jH0>zTQ@ zY~bXvxz34W;QaCxB@0)qS-foJ!WHE-^IRBBuuR3dsF;_alDBku$>K$q8NH$<3riQ4 zFQh-Rfag3|>N*$i#_m2Bv6Ih(<^$&;?@Kv0lrOijh;trZg+9s2t$fLv2W%T(=FUU1 z^E`~jD>?Q)U+!ea!g7QRe6AGLS)`6%f>&j+{a z0=!2Xb^#c;IA|9OFTMb+{m2D~efI*i%E{mkpTD@Ybj{M`%gTLp;)UoNFI?c9INEGW zlT%WR5)NU;9Tz%Xqt}?=qQ#{P*Z4~o(YqIb5xmgpA&(b1wO$DKYf7EN=*kOW|Kkgt zXVb5}$Zm-jBOl4h^zMadg>l8sJU-w`ql%q#=pmN4jxX=Nje}tWi=ld7F$y!k7&f2x zqE3Izu?yz|d-UIVL+Q0*)cDM|^RlUqWA6Fj#+e%~#+0&ozH`zJhNAOPbF~Z5kSESZ zSN(E6oCq_+y8w-F+Pj=t2{JqF?YvR+;{|ZQxd29bSBr2e=vWDIGGliy#EZ;x7eei+5}4k^u?dSH z_rD9#xi4RcJU?0p#*#&F{O&~%p2ggMvfRasP*t}qLhOu-;P3K9sMpvc_>0(7I0;*@bn?Z>UV(5OK8PFX; z=a(XB#$IK{rcz`yd?~p1vB(O(yvvuTN+JBir4Tu7DMXNT)730@gfGA5%Y44P!Q5{w zLq-#pA^FrRc_Zi&6PAPVYmS}Emv@&rz4Y>O=Q&iyjCNMrx!j50h4!P{f4&S^ z=KE2$t<2rXSXmh^?S3Q|^X1esT!yUxwv8E|vq)zds{Mf#n62lo0CyKNzPAF{u@$J7 z*a~Oy7##n@@k2g*VJ;15;!4!ccOJtzw`W(PX)0F2tpdg#SP2)r|Gh=V%H(LsK>3SPKZA)i=Bel8oXy96D|aS0r0c^pIQ z@eZ63iLY{I52&xB@FRJ7J1&Jkq2U-Bb;FTMkh8+6jy#TK)4wl4UO^VgiQz=qqn9`f z$$P1D*bsHpk)F5|owVsv__>gU9_GvMpUE3biA&+bj>q#H6ulI7Toqt6^CfT=Yi=M}kupyVB5ToDBA3~2XR?TW1e5tq$7YAS3Dp2B2J5iS9 zm+=5(EO;5REZ|rRUkWbArGsN(W;ia#jrA9oBlg$VaZGaA<*2*G$MQz)xEu|2)8#0E z>k2SiS)zh3J(puR{)({+ufX8%V61_YuGP4-UV#blN=_c*%iWBfzZw{yx}o>3fb|B( zP+SLft;QvIrE@Snyc%A_FGcK1j`gs{`B$RfPP$SV7{zUN`)X%Cn%Y6xmpjKYuwgaY zhg*#qYQzB-!vH@CWBS>T6APny|)siaPhPa?915*W#pVmB~PlefTQp#2ni> z;6i*a4+n~~W>L`^r#pA?=8~1=FzDWj({b+2I0JmH+n~qR;C^)Q-u#h;y@zVeY;oZS zCLU`m>nk_#(a*_0OtOI0LI(1gGtaSZ` z_4TWQmPM5=sk^aOJCt5VwwLa$Sq=KQq?rZY5|kC=3~J@Ix;#kFU%$>QN%7|EtxTY& zY9i&ADc6U;cta4!+SX}xqfDo5W{}_J>rMO2AE^|S9ok;$9N$>G8AmgF^GUN}VqD*N zdc)~o^(mWEQhdX;z2az}g*X?zULU!I*UPumryDG@YLZV+bE&MxE5~tkJW!WSP>^w51qT&SXPOlt(3Lx-n6L=4f+)f@HwSHr<*+= z%TBhVve4Cn^eR3rUDJECjEYz0=PqEuMVqRsdIzXhX52oWR@K@OmNMwVwa7lY7PDFq zmov~a(yd{@RQfA1yf3P%$FR3N#7@R$oUWx~Yn>CPFTm+#4678^G^{*JL+SOk&Y4tN zoE0do}fFYUy=pJ^w~iFYQ2<0t}C) z_Sg75BbB3$VBZW4ole#%JfW$Tq1$p);jg@;XHW z*Xy*Vo?4ZT1QiW!Qq-uYtFLjMc~-zG>DvlVXd2ZtqN$PE`=ftcgWby_t?1}diWapL z4UMNMnvOcOo>%iNYVGxT`qAsqdO^j%%FvPCee*y+iczf?(R_L65+21dl7aa{13v<5OyMLNBADXR)lQ`FX4Rt zT!f$DEL=C5u@m8E2s;tBBYY1bfUpLEKRD1$zpr*q8FFKFCAOOAscI+A%~I8R=S@S; zI`bSBA?JFmaptXe&S)%fs9qcWt?IQFjp%e(Q+t#6wO&y3y_yE@Rd)QEChyU9b#E`Y z2?xe&DzC1oy5fqHube?^u5+GxYTIq&4L3W65B3gwzoMT08y~0%{A$mx>zsXmVTxhD z4CC4TdO_MHOLxiAQ5kNKVV?|lQMcp?e&8|pd@Ci*uvdn&WjIdl8=TX#!Zf88 z4^|^Cuy%F9g$(b3@53w zPRKGM!+seyWH?H@B-;TQj!{`q@B}|h26%3HeX2^isUkOz7k`z{E>}%ES-mAqeK^!T zQ1^lI$7&J&cDY>+Jz7$aHXNV2$5hYBw7PvGifV^FB*IbZl%*NYEZK3pR=7#!!ZM6eQr}NyVLN||P%9l& zwxu5p{5&sf*ek4pc1kcdp(GeTo_K?hEq=dL@+Qcz`k8HeMYv@{9kgAtkN+Sl!9Irj zYwS+eu$LD1f*bqMK(D`1C|Z!Vu?F8`>^-M|S2jx zeC~y)_$HxrMS?o_QhTq!hSyE~6a&9U&n&4=`>7L|W|S~nhGSHCGo2Te^A9Nak+!RI>Adq(*>HRMY0527 zPhXoc?8Z{h3(BAL+|$d&cn@uadY|GljDPMc!+SY1yOF?^sR3j?ZSZY!^+hRPxk{px z^G#%Chw(p^B-oJQ7OIq_u>_Rh9?EJIvW%GU+@!CsgTBi$YmEzHmrGI^tj@I;q`4w< z@h7Q!P4$d=z(bAXYgmShWH>>^A)&xcGK^m@mZUqVQ-bk7tR)!FIT9SF!fk>l_&qEM zcFS-ZwM)`L8FtBVjHY}`@C5&wL4vX7li*g`E5QL7&X!?}fNu+)U<61oMt}rk1V}JO zfCOU%+$v;=5g@^M-j-l=cnNNnVf1fF8vR>>(Z3}a{ab?3zrQ0C2mM=u(Z3}a{ab?3 zza<#`TY}NQzbklx{>`v`%D|BaNxGTZCD<#&T{Pu3+=ZmM6_5M3VM@AxQEEox+lYZF zxQQt~)_s80r=`hp8vhNN)sqWT>U_89LE8R2%J>~=ay+wR!NuyU(_qf68tDR1{#d!Q zdVx)@$W-rh7h>^_1R~qVEz%aAjG_&{IS&e2hQwr2`Ynnjve;PF#i3B zB<+#m2z5)+j!bw2JPT9t_XSU|(30RFZI|E#bxJVST@s81)(?a%Ju)1jZIZOZgfki- zga+}VSp2aXfEOgqb5ae(+bl6^XRGPGf)`Erzd^TKTV_QZcQ(dmr!={vCy}=Q*9Fcg z-4yqvY*(r$SxX}BNnK~9>~Yud!(JGaKbFU=->l@=S@pws7-8^dZquxkKL6-P0_hOT z;A81a{`e{9hfqIs`grsAy6!)7ym2X10yD=Ot)_BH{WPSD3R2mehjf@KS$)tcDflE- zn?4@@FkXH7%bhE>iFQFfXaBU6Iv3u-uzFSwrmd zSR4$=|x5drQl)5>VsXdJCZJ(-4&iHU{N`h+* zLw7rBBL>)wB!8^h;EYzMiJL=>Hf~32xzk|I-^1`&T0J*++yEn&j%;wAlGR1;Y3|G7WH?5}cM5(7W!P=PeIB*B@bTT5YYu78 zK0uwEnSFOXK-+c*aDoaYI3UA`{*1KCMnpJ4Q%LY6Aj1jTNazl7Nx{n8gf#w`8j#iq zXPSQRlfy)a!= z{BxnDoA1kPX{j#!v>oahRDqXbku6{HkH03TK53D{}L+YfMzoF4*-;H}_^0&uV%~9GbWmql4Zpyh^Xw&$; z$Cp_XRYE&h%n>1tcaN!_Q6TJQ zaE4Nsz%v-TXx|>h|Hu240OPhI!C2EtFrL9A7+qhCp}i6ukzuSbCFvyP{94GeS%z_U zlBBWnl3=`ZmEa;7PEgiw1W%e|*dxOov{N#I{{bk$xD7~foVq2rL56X_Mv_K{zegwz zI=lp>D|mtqFTps5Bf;q35{&*W!RX%-jQ;&w!4oX=8MbdA z#c8huN$4UV7R{rhIZDlKN{hI>4WoZ#kP|p3L zCk$ttbxJ&wxoyMy!{Pm@isG>oph{M^!%2uWfXyGPp1EGrj|FnNf_AY}gVL;WGr1Yg zTt~7c+%Xz|x zdx~V+E5k{e5*0lWVXT=XX+wtbNCD}Lp6|_?kg;JY?GVH$XBS+v4|uGWBpA==5{yR* z369Y&3HHh`ZXtgXJrUs;m9ez_@vxe9O0ZjoJE;3l{X99KyR#wtZbStY|F1Bl`Ce4O ztjxWZ#F5OoT6$DzrtMJAC=edZk)e39%Q#NUtyH+XpHc>ym08Ln>g=zS+5NLRXj^~z z;N>dkV{a`#!}6md?os_2!*1@M1!F-O#`j_+Y20-rxS8S1DVy6jKskRA>dM2g{PfvH zmC(pI0@(b?@%0G5tZp2qI<~hS6st*u3uNg8bwAioeYDU{$$quckh-{=S(zI&aVl=@ zCy!=kW%ip2+RhqM9u8(@)_JV^`05;6SW<=_hUIS2Lxq18xVuB|a0TPT6Ai)>`5{wZb!59G&j1jO`@B|}3f-wRl7$ZP}F#;qQ z>n(=uTM`lKmSBeoXPzN>C3AX{Hae12{C6RvVoAD-raaq^eXOURg?)RCR?|k-kebKMtW1wO zXs-l^Wf(64C250Ux$4?z*K_@p0fX&1p$vGz!5Y#Of&E-)Wc2-xQ;)Cjhbb#ARDq9S zxzc*5Owx$bP6@`|mjq)i#`dKG;mtW~*qgDHVc8?xQrd;-uwZ)TbSRC)1Z`(^`|J@u z<@jpQN1ag5=+*{Xl@H^0P~r2?us@lEWElUsP?E;INP-(=7%MVKx{ap%Q}84x!!8+) z(O$_2&W}j2Lxx)^=YZe|_O~QBTZXX!lcXzT*pT5C%6dWY#4p1b4U%+3hJ7-eq;APb zvkZG>7>BK16#Nd$aFGlrs8ce6`+x*v2TFp`zyBq8g8nVR=-(2I{w=}i-x7@eEy3vD z9fBw5-x7@eEy3vD5{&*W!RX%-jQ;(S;0gM-1fzdTF#5Lyqkl^<`nLq5f4?kvg8nVR z=-(2I{w=}i-x7@eEy3vD5{&*W!RX(w2!5k~OECI3;EY|O#OMhbU(k>q-?7QWR_%KQ zaVk70z+Mw>v`a@vX5N6L%-qK*7asAo_S8SK<~Pa4*9)?QVSXct+NI(oXv(WXDe($W zf@8E%f;}=Ep}j0^zq@1I^O^wT`CEcr468+^{fRwJm8@ZhLo)1<;RI#9E*QaDNrLh8 zA;H+3lHh<0J7_0M+n<)PIVHhv6V7-vk6f1dXfCaId{mr3X7-i1!LYo9+h5r^j!CMarHe?vTMIlN1Ww?i?yp8s=zrKkq$(#hF z2Jo5c84Zx6y|9`A;}y9Cdu6zba=HW~cnu=Kcnu=K3ECyWO(vXCY|ll9@-|s5gGQ$Fy3?=7Hl`muvdn= zXrp8#EW<@IoS?muktP}T$Z!W$zAqF9iz*2&kl{G(lB64C7~5L!>${vUt>O4q-b!U3 zXjaI^3a40htqR4G)*CL``2mXOc_-CDvXKvlfdmI+*pOk2jt^mb+~K~qy$p{%pR=)N zoA_vgQ4O3w>@A<8DjBwy z08b^7w9Ay9YnP6FaD3&(jYG0pL0SKiYEiH%^`^-CnYl|f;1%T3YCH8y1KCste=@oq zz9{k^Jt*xx5@)i&8lrNghyLR{$y|}!#S+xrpM|Jmarqo+qd?8#rj}H6JhOa^noIxX zE%u?}-OPT)`2Muv&z22APRb?-y=s=n#~QDEM+GR@u){ztlA0QQV|2HErPRK}d{K-vw;AIl))p)@(} z6U~Ag{}RCJw6bpHau`095kl_L!0z1bLS8fJ*sPJgVg4pe$!VPqH`T5$(@C zh_E1Lk|XGTNB1cG`iB)90hRLE|2HL90(n-)Oak@B=7$vQ0GnYisFZ!pUzOY;P?mE* zPs(OqtCHId%5n)%Np9qWrd*?OD2`b6Cb}6|qD9gn_CAqFYD!D*Z$%R1+)Gf2`Eo09g zl;CVAu)zSRRN~toP;!GH&vG76Nv`64B^L)}IRko@gA3E|Ri57~!4^;!jDuQ&mK@&{ z_urMenVNTJD*Q?>i0mw1|12Dz=uZp3bqLlFl^6Z}E4_@$G!8MB<5wwfc#V;~bBb$h zF8j6L#tHY!@$}1y-?`V7kws7f9TFI&%B)O%tg3-F+Nv@8x0!1asTk3FGuJqhoL`Vj zZ$4hRnZJRRO}p4hn>%fkHK3o03{u&EOa<)FKw+-rO8hsOE~mRMH)IEZ_ zBp0XRfiC>ImaQaB)XgQy$Pl^u`e$V;mXr^c+XMTl8h`(+By~#OwNT-pevLsx?#oHq z2CYW+t~{-q^P;!`X*Vc;zHZp^z;T;WUoRK`WxsM~YjxF+!h#?>m=E0gu!CM|ALPQ* zimjPC?#|4I)z<;HKCIp($VqMM{(8B~O`DuS0*<)NRH`DR@9G60=d;Oi#?_T--c0^t zg28DQ?H!D6Xu-`Ij#1^1G}x=*>b`K-&y^8JUpTDcR@#+rq)5YfT>*Hmm1W{*%1AcY z?yvE=_)V8C&@gsh)8RNNBR$le4mW5x(ig^m zWHhT3<1}5mZHI!fb()>#cTmIlE?+wA(y-Trdn+k+r!vw7`gN65t>wa0I4mtQhlY## z!mW2Gs|nhcE*;P?zI+6@*N1EkdqC~at?6AW`cq}KgWA*8D>NJe{W^6+%N3aFy*;z# zC(3G^HV)Slq}7A`n$?iW>e;TeaHP<#711obxEtwQJmJmIomxjBhH(J>>hn3A3 zs3@+7m{-eH{};KgA1ix~ua|2y!dkEu^y@l7k(LX9ew~AfAE}J9|BGCcDTn1>6cM{Y z-ph}EKQ-%d+7G!7Q2t~gSbL>b4R-xdmsqfu-jl*wt`*d6Uw)NO zwbyKV0UcVdNRZPlVAYTM-NX(w$=5Z34}8ub2lqTs6!*0X$ric#k% z*H~w|^Ic8KhU0q^=;FD#CpX3cxV0L4Z~Z34p`c~VFrAC0$yv3>cU1#8r#+y&jIIE+ zKTYrs*D&_GObAyWX~IvAdB^pOMhw3a=tV6 zpsBkty*Ao4JmXA>huTMD%C;XhiPDrY0_>4t?0U)4A{?c?va|?CDaRptBEoo@kflX9 zO1orf5ylcANAyI5qf{nKi*S^7%F-f?EpS;{grih^g6OvhW92SOi*S@WWoZ${!Gp1) zCn6lBZL+ioN2z@*?xfPH6nz}5Mu`>Ol0HP#oFK`0j#DmL-><#YOv&$0JpBvu@Ham! z7v0>iK`mt%roI0vhx|>0n~u}qamqzE9;dxVL6B!b`}CW{bnMn;vt~=4M%}U z4S}X+H`R1pz;$)0>6hhVNH>9!e{Qb3EE_2|Qv9*zPJYZkv>~O%ry)JHnbtY?;MFNP zo{KTe^U$U9(_o%@t7X`2!i{$6j+&HHR*~7bT`t^@+&tjchi?Raq_f!&KI!&K*P3$b zY$yvF5DYWLCtc8iu4pZU@tEE+B5J<1u$} z+3fwRhc?1crM>FnsLHsh-?!oHa?Sn7*&7(I!zF(W8OHhb2|}S8WY{CaU9@XLKZVA9 zxjz_o)vJYK& zY_mSx_i_A0g7FxiuPe*0fuE-8j}=L=?ER{NS()>e$JD6eo@mb}2~XYH)$~zlJ(o0q z&ogR7kYoAuRV=6dR5%G9*kNoIOmdAiH#xfksk-4|k}X&^=L?%$D{X@b^GklEX)JcG zn%a?RZhTG3GB4$OkoM8ixw%ub@WsK&Xx8+f`R6bGeFa8|ywanfo}(W0*$g+H0v51GK=V&O_b4e;=T%lTn)=r@6`< z#07PaO`UOjk(#OOon055sp!r zEG@$LSp`{Igk#h#ON%g`drlYq7U39em!(A*{acn6Vf61Aq9-DZ{w+(3F#5MFEyC#E zXJD3=M{>U`^z$?DMl*0MwOryAK@e&C93ef9$B$+{j`JLozL+v+s0EobUK~@|ys75g zq@H|dLNZneKs`D3PK`X}r7uU#B@5-8iPB1}YGygJ98`9uYdXkQMRqFkBuK_L4-=F% z(^MHh(>2vx4cfn(=w^wrRZ{Inzdtc!!$Xqu2y*QIp~lqw%tga`3eMzAv%#$juK!+N z>5zgyzNs(lRq)ZKzA%mkuyVYR@+daXLD4No?EZqt|cw1lFT~t^I z+jrSu93EhJwGGDVi{X45T%cfkRpAKyEH<*OZ)_DlY{0jFyRYBP3NE$5cz@2)BW3BcJ z!sBeh_^}a&57?SALB(?b+nX|?V0**k#|&Be{+s*ySD@fSw*G))Ei8SH4aVNNlx0xC z(`?cn1>1WjPPv@TwrztLd*=+Vv%x_HPqV=u1t0om-{K@`$~kP?2BX(Ayv_#WQGsE5 zop=;{_?Eu5@qJcP+6K2OxW)!ID0qeqE>iGeTQl@fWs%@XtAcB6(hUl>_v0c3+vht& zmc{~SF0!-_w2*@BKe6vqu>B|Y9VR^2{uBEh-T z@*T`U-I4|#hR+oYHBm9(jIZ$ew`SgQ`BrTA!y#L3qr&s_L!bTIz4-Q$H?KSQ$;0q>U1cUwV^Z zJY>%k8kpU1(O%ZD|F}>a<(x0TK^evmEJ)IL0+3*wXpvy-#7b~0WnCb65|H6+8OF;~ z$p~%$5^TsYwvi-hJn~9#4{g5?erJ52nTi><*SAke+hN=nE=0re%Pl*rxqlWOfH@EQ z<1*f6cm)`{tP&ijZ4&I4;W)L+(jpwEDaE2EB8&}FSz3hSv{#lEVQeVP7d;W-I91Bh zA{?h(va|?eRkT3#M15 z6g?4P^lw>OgwelcX%R;MUL<-V!sy?!vA%hDo@{w+(3F#5Mo z^hAWwzh!9=M*o(jMHu~CmKI_3@5Q3uB8>hmON%i2_hL-%(j&T`S@>^0r4!8+T@;k} ztUEv}K>1^>^msSK{+kRADqI4u?Qn>;NpOZEcyY!Mp4uX=^EVZ_Fq}tPdC0LzSh%QjC{=7$HmhVMY39RWr+(@ilVC6BES~ z5%#Z97rP5dKsG0$J#ZTY(zes1tN8;nY*H{QHg!5@P%?1q^A zoF}W7#+2MXP?k%AN^<#+D!DsASuO@D$sK;!l*6}gA5nr~+O{0UY2BmrJ>au`0MuTY z>`&9*l$-&1mcy|(sGnN?kb?JvGHgK1uFiGeLUaADspkLjY58la{<&MnkoJP|$C{V; zIm^Cz>8Fi;bT>PkpuG|tWZ1=D8L>XxRUECEjm7Q_`b%G*+8)fTMfNF@Cdc+dw5tr` zj!hi0vAk4S#H~-Qket? zWw^kE=i1+NCUzg6uh`;RnfX=`ug_QD3wUYYOX7~;f=&DMEtNn1znSHie5zObR;0*2*XrViQ#)?n`c(`e@PCj*54}h4lY6z@gKE=+xD(}OR^|_} zV_{h#6uy~?8Mb?l?F32MA;SqOyiE6QyQ2~6WJ7kif?>HW-E6Gy9w5(eJ-^GW86Lak z_x5dMgSJ6E#}4DSjWY?x=#k)n3@0e(3L(pY3@4~k zmKNaz?UJQMI6+yfMNdRHL1nVE2q$RgYSg*(EE8Z>=AKs%bxUwWhJ7-er0rJU>fB?YG=iNl6lYLh3OsJ zQ`%l7h^Q%6;Q7>^G@Y1sT-zx#&-ztA|6(A*8M0|EqoutQyRlvI1Foj*r`fp^o+x%wr&lw0-%@)tY{2g43;#bA$4SmyP_!iuLWk zh8BRFy@FW&P~6N{9nWCEL7nhtRC>X(=!~_li8*d13K{hk01p+eMN=GjF6B8FunTGX zITNn68k-!pP}aJppWy}U2Ae-t0i^p)$Fq0{G0zP*1`u_d3MmyXK%b)Cq86dbA~Hu36obQ{@_a>53&wu4J5@U4~Ha7;n@c zaWQ0AJg%5=2>Za>XXEib=YI6p4)8isya#Wpa!tw_)-rBBumGGmk z>DxVnsNe=yO)B|d>;_k40firOxhTMwI!Glv`ozmi!Gx;W6mTs3n9G4fU0IL0rc(n05oSd=Rt*-lam@2LVo^5Q%9!hM#Jn8y zax9y<)f|g+%+DGX9BXAP!Ey*c&h;J_A|37@RTc`N}obL z`}lG*UuN^=e!fh58kd6{yMr$yIe9Bz=JDlY#%efrh%a~XrJOJO`BJhUm!llp&6gRR zyoWEV`7(|#xASGtGq~*GSUq13^JN`l`FuIR$x@E(AT7f8fd+5C@}LQO7l|TsjP6Biv8t8(xg-p4ZW^ z*SIDPjy{!-f8t#jcTF9U*q?7i!1Eag7keh(h(oWaQ`sEh2ha*2U;%-6z7c?SlLaK7%Qt)gq81PW-~rH~fx!*{ zI6?3{?7N@OH)7xwykV86Js;bSmCW-Z8V0Yy;>D2_eh!#qv8YLg%FK`S7GrS0PtwSJoigzx>sFBi{_1pcA)71#4W%JzyYAg z0^-Q32j<*w=|Uu4MiWEAr-8vi0BGVDVBbJA2wt3J$@&nRxSusGm>h zmoK^UvV3&@OE|C_q){N_qk?o%5;Z}`z^2_VxyB9gLA&c?s)aTkVxR*84WH6gFT3(4 z1Ox+JP-yyuo`u4MhEXgq!Ycz1oi`Wj1R5R4Z zu{eu`-$1ODF&D=Y9E&hFo4M7D1>c09g>S;oiZ>AZ>l=uLnCoS33&*nGM9gsru{g(i z7^~oz`%T0WEa&4`3u8?z7d(VmGh;oB#W;^`oJSX9KIRs@#r1OtSP^Tu84GYM#<8}y z5Nmo1u_$8>j&*RX8QdMr3@}vvZ^R1zjhLUYC}RyAE8t=3}I~qdmpPG_xp&MOQ0H#mGfoy`;fbfV@KbI?yVeK{Q+W!IJSplB_AM` z{~==caO`G|4f+tVgB)AOv3W_v_Hpd4q-!LNzXq3ElP=f5h7YiY`i(1ZcoKIz%oi=j zc(rOu;J)CY&LnOTengEUn6E5e^dsEdsIZ%FU5JLk^JQtha5vx9wlU8@Gyq<6FYgn+ zt+ksxM3dlkDc4U%15qg!~cVuAvi??w8i9SShvu|k6_1B>ScfTQ^zgBOMQ1oT{ktnz=!tIaazC5~aa0ljL?8xa7|1L3d*B#?<060MeY z)R=_DN;hkJ5RHSEJy=_ge8r2E;!nVHBN_p(Li0vM223)#0E8^S0l;$%?b)lHH3>Jk zPS*AyYJk^c@jL@3q0I_E#RP(T=^(n}Q(lUHirx~&B`ZKvJ_D=eQ}je1qaBQPQ8z2N zKXVNl*f4xNUHhr)R5P;RGuJH?2h1BXy`Q$>wp+VKF55ww+FcwFt>}jNyc(M2Uf�hViHZWG5EI2Pqt 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%0AO& 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

22AZNW29M&Ag{l2y5d;Nq3IuXIA zH79<@DH)`30B_OkJIAXWkoi&E?|VDbD0OX zK!DtiFMz+B3EmqwS&(1PJ$msps3gz8rO-nT;LT95fvcmq3qs^2Ne=FQ;V^|exJ@5E z3}sE+#%rL%yb6swxuXW2Z8=Q$yWAZY=Q-HW2yGn>zv(}S2i-+ud<2TQ?|bH8hj|-n zc60xxWHtz-;&~|!vmWyI@oj1Nv}T{vVU~j|vkf2CEItE~gQ+o(Om&#(0qz5Z?~i4F zs(FS`39(&@xsO6Di`|;VlQkd5y_!8YI=Hiiz5G%f)-2wwS$tNr_&S%pym+WzCx+t5 znhSBU<{G?T^QXAq5WBJX4$b01&En@Yi~p&4AHJwr>~`CapKHH+J! zgBKg(UY#$#C)0jR@l?%XpJrdCpFU%vl`9?M-TH%ngNUH{y>qAH$b4 zAHA7f4N{ocy2Z}o(VC~=IgBw+(|r=`W*CO=@lctEzDQ*fSU@pR4N1)9aHHSfpY zY8GFYV?U1gF3nT0e~wP9#ycR8m1g$hZk;cVztwJ>gokMsPtxqiYc<#47R~3d`!>6+ zc#7sy{HC4x{okj7G>cDY7GDG@K%6n$URVBb$5=ir=7_zL4dC6H&*KM2aNgz> zs~4{Td9@qB-++fdyG|I%GT=R#8a$ac=!*Y)KFA1ha03*87iNGD5+DQ(kP8tggLdeF zEcofaeLp0by>JosKnI+H^Uw^v&J>mRtLD(BE4FCTF)Q)lGZJnI&dZ15|ueP!_QrlDOuJhKF)HT#agSGd% nreAfb#uL2yKG(VaMfH{S?e&-Hvx9MCU6OrderInfo != nullptr ? *info->OrderInfo : ITapTrade::TapAPIOrderInfo{}) + // { + // // fix pointer if there is one + // this->OrderInfo = info->OrderInfo != nullptr ? &this->order_info : nullptr; + // } + // + // // copy constructor + // FixedTapAPIOrderInfoNotice(const FixedTapAPIOrderInfoNotice& fixed) + // : TapAPIOrderInfoNotice(fixed), order_info(fixed.order_info) + // { + // // fix pointer if there is one + // this->OrderInfo = this->OrderInfo != nullptr ? &this->order_info : nullptr; + // } + // }; + // // TapAPIPositionProfit + // struct FixedTapAPIPositionProfitNotice : ITapTrade::TapAPIPositionProfitNotice + // { + // ITapTrade::TapAPIPositionProfit data; + // + // // copy from original structure + // FixedTapAPIPositionProfitNotice(const ITapTrade::TapAPIPositionProfitNotice* info) + // : TapAPIPositionProfitNotice(*info), data(info->Data != nullptr ? *info->Data : ITapTrade::TapAPIPositionProfit{}) + // { + // // fix pointer if there is one + // this->Data = info->Data != nullptr ? &this->data : nullptr; + // } + // + // // copy constructor + // FixedTapAPIPositionProfitNotice(const FixedTapAPIPositionProfitNotice& fixed) + // : TapAPIPositionProfitNotice(fixed), data(fixed.data) + // { + // // fix pointer if there is one + // this->Data = this->Data != nullptr ? &this->data : nullptr; + // } + // }; + // + // namespace arg_helper + // { + // inline auto save(const ITapTrade::TapAPIOrderInfoNotice* info) + // { // match char [] + // return FixedTapAPIOrderInfoNotice(info); + // } + // + // template <> + // struct loader + // { + // inline FixedTapAPIOrderInfoNotice operator ()(FixedTapAPIOrderInfoNotice& val) + // { + // return val; + // } + // }; + // + // inline auto save(const ITapTrade::TapAPIPositionProfitNotice* info) + // { // match char [] + // return FixedTapAPIPositionProfitNotice(info); + // } + // + // template <> + // struct loader + // { + // inline FixedTapAPIPositionProfitNotice operator ()(FixedTapAPIPositionProfitNotice& val) + // { + // return val; + // } + // }; + // } + + template<> + struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction> { - ITapTrade::TapAPIOrderInfo order_info; - - // copy from original structure - FixedTapAPIOrderInfoNotice(const ITapTrade::TapAPIOrderInfoNotice* info) - : TapAPIOrderInfoNotice(*info), order_info(info->OrderInfo != nullptr ? *info->OrderInfo : ITapTrade::TapAPIOrderInfo{}) + inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, ITapTrade::TAPIUINT32 sessionID, ITapTrade::TAPIINT32 errorCode, const ITapTrade::TapAPIOrderActionRsp* info) { - // fix pointer if there is one - this->OrderInfo = info->OrderInfo != nullptr ? &this->order_info : nullptr; - } + ITapTrade::TapAPIOrderInfo orderInfo; + if (info->OrderInfo != nullptr) + { + orderInfo = *info->OrderInfo; + } + ITapTrade::TapAPIOrderActionRsp copied_info = *info; + auto task = [=]() mutable + { + if (copied_info.OrderInfo != nullptr) + { + copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda) + } + try + { + return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>::sync(instance, py_func_name, sessionID, errorCode, &copied_info); + } + catch (const async_dispatch_exception& e) + { + async_callback_exception_handler::handle_excepiton(e); + } - // copy constructor - FixedTapAPIOrderInfoNotice(const FixedTapAPIOrderInfoNotice& fixed) - : TapAPIOrderInfoNotice(fixed), order_info(fixed.order_info) - { - // fix pointer if there is one - this->OrderInfo = this->OrderInfo != nullptr ? &this->order_info : nullptr; + }; + dispatcher::instance().add(std::move(task)); } }; - // TapAPIPositionProfit - struct FixedTapAPIPositionProfitNotice : ITapTrade::TapAPIPositionProfitNotice + + template<> + struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder> { - ITapTrade::TapAPIPositionProfit data; - - // copy from original structure - FixedTapAPIPositionProfitNotice(const ITapTrade::TapAPIPositionProfitNotice* info) - : TapAPIPositionProfitNotice(*info), data(info->Data != nullptr ? *info->Data : ITapTrade::TapAPIPositionProfit{}) + inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIOrderInfoNotice* info) { - // fix pointer if there is one - this->Data = info->Data != nullptr ? &this->data : nullptr; - } - - // copy constructor - FixedTapAPIPositionProfitNotice(const FixedTapAPIPositionProfitNotice& fixed) - : TapAPIPositionProfitNotice(fixed), data(fixed.data) - { - // fix pointer if there is one - this->Data = this->Data != nullptr ? &this->data : nullptr; + ITapTrade::TapAPIOrderInfo orderInfo; + if (info->OrderInfo != nullptr) + { + orderInfo = *info->OrderInfo; + } + ITapTrade::TapAPIOrderInfoNotice copied_info = *info; + auto task = [=]() mutable + { + if (copied_info.OrderInfo != nullptr) + { + copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda) + } + try + { + return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>::sync(instance, py_func_name, &copied_info); + } + catch (const async_dispatch_exception& e) + { + async_callback_exception_handler::handle_excepiton(e); + } + }; + dispatcher::instance().add(std::move(task)); } }; - namespace arg_helper + template<> + struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit> { - inline auto save(const ITapTrade::TapAPIOrderInfoNotice* info) - { // match char [] - return FixedTapAPIOrderInfoNotice(info); - } - - template <> - struct loader + inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIPositionProfitNotice* info) { - inline FixedTapAPIOrderInfoNotice operator ()(FixedTapAPIOrderInfoNotice& val) - { - return val; - } - }; - inline auto save(const ITapTrade::TapAPIPositionProfitNotice* info) - { // match char [] - return FixedTapAPIPositionProfitNotice(info); + ITapTrade::TapAPIPositionProfit profit; + if (info->Data != nullptr) + { + profit = *info->Data; + } + ITapTrade::TapAPIPositionProfitNotice copied_info = *info; + auto task = [=]() mutable + { + if (copied_info.Data != nullptr) + { + copied_info.Data = &profit; // ensure pointer is pointer to the correct address(address changes after constructed lambda) + } + try + { + return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>::sync(instance, py_func_name, &copied_info); + } + catch (const async_dispatch_exception& e) + { + async_callback_exception_handler::handle_excepiton(e); + } + }; + dispatcher::instance().add(std::move(task)); } - - template <> - struct loader - { - inline FixedTapAPIPositionProfitNotice operator ()(FixedTapAPIPositionProfitNotice& val) - { - return val; - } - }; - } - - //template<> - //struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction> - //{ - // inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, ITapTrade::TAPIUINT32 sessionID, ITapTrade::TAPIINT32 errorCode, const ITapTrade::TapAPIOrderActionRsp* info) - // { - // ITapTrade::TapAPIOrderInfo orderInfo; - // if (info->OrderInfo != nullptr) - // { - // orderInfo = *info->OrderInfo; - // } - // ITapTrade::TapAPIOrderActionRsp copied_info = *info; - // auto task = [=]() mutable - // { - // if (copied_info.OrderInfo != nullptr) - // { - // copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda) - // } - // try - // { - // return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>::sync(instance, py_func_name, sessionID, errorCode, &copied_info); - // } - // catch (const async_dispatch_exception& e) - // { - // async_callback_exception_handler::handle_excepiton(e); - // } - - // }; - // dispatcher::instance().add(std::move(task)); - // } - //}; - //template<> - //struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder> - //{ - // inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIOrderInfoNotice* info) - // { - // ITapTrade::TapAPIOrderInfo orderInfo; - // if (info->OrderInfo != nullptr) - // { - // orderInfo = *info->OrderInfo; - // } - // ITapTrade::TapAPIOrderInfoNotice copied_info = *info; - // auto task = [=]() mutable - // { - // if (copied_info.OrderInfo != nullptr) - // { - // copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda) - // } - // try - // { - // return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>::sync(instance, py_func_name, &copied_info); - // } - // catch (const async_dispatch_exception& e) - // { - // async_callback_exception_handler::handle_excepiton(e); - // } - // }; - // dispatcher::instance().add(std::move(task)); - // } - //}; - - //template<> - //struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit> - //{ - // inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIPositionProfitNotice* info) - // { - - // ITapTrade::TapAPIPositionProfit profit; - // if (info->Data != nullptr) - // { - // profit = *info->Data; - // } - // ITapTrade::TapAPIPositionProfitNotice copied_info = *info; - // auto task = [=]() mutable - // { - // if (copied_info.Data != nullptr) - // { - // copied_info.Data = &profit; // ensure pointer is pointer to the correct address(address changes after constructed lambda) - // } - // try - // { - // return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>::sync(instance, py_func_name, &copied_info); - // } - // catch (const async_dispatch_exception& e) - // { - // async_callback_exception_handler::handle_excepiton(e); - // } - // }; - // dispatcher::instance().add(std::move(task)); - // } - //}; + }; } diff --git a/vnpy/api/tap/vntap/vntap.vcxproj b/vnpy/api/tap/vntap/vntap.vcxproj index f2013708..af7ed955 100644 --- a/vnpy/api/tap/vntap/vntap.vcxproj +++ b/vnpy/api/tap/vntap/vntap.vcxproj @@ -115,30 +115,30 @@ .pyd $(SolutionDir) $(Platform)\$(Configuration)\ - $(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath) - $(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath) + $(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath) + $(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath) true .pyd $(SolutionDir) - $(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath) - $(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath) + $(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath) + $(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath) false .pyd $(SolutionDir) $(Platform)\$(Configuration)\ - $(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath) - $(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath) + $(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath) + $(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath) false .pyd $(SolutionDir) - $(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath) - $(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath) + $(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath) + $(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath) diff --git a/vnpy/api/tap/vntap/vntap.vcxproj.filters b/vnpy/api/tap/vntap/vntap.vcxproj.filters index 5740dd73..9611ea32 100644 --- a/vnpy/api/tap/vntap/vntap.vcxproj.filters +++ b/vnpy/api/tap/vntap/vntap.vcxproj.filters @@ -98,8 +98,5 @@ Source Files - - Source Files - \ No newline at end of file From df2cbd52e4717dfdb0618d6009149f4a9c3b649b Mon Sep 17 00:00:00 2001 From: nanoric Date: Fri, 20 Sep 2019 15:26:48 +0800 Subject: [PATCH 40/41] [Add] logger for RestClient & WebsocketClient --- vnpy/api/rest/rest_client.py | 48 ++++++++++++++++++++++---- vnpy/api/websocket/websocket_client.py | 35 +++++++++++++++++-- vnpy/trader/utility.py | 28 ++++++++++++++- 3 files changed, 101 insertions(+), 10 deletions(-) diff --git a/vnpy/api/rest/rest_client.py b/vnpy/api/rest/rest_client.py index b0806278..0d0260f6 100644 --- a/vnpy/api/rest/rest_client.py +++ b/vnpy/api/rest/rest_client.py @@ -1,7 +1,9 @@ +import logging import multiprocessing import os import sys import traceback +import uuid from datetime import datetime from enum import Enum from multiprocessing.dummy import Pool @@ -10,6 +12,8 @@ from typing import Any, Callable, List, Optional, Union import requests +from vnpy.trader.utility import get_file_logger + class RequestStatus(Enum): ready = 0 # Request created @@ -105,21 +109,35 @@ class RestClient(object): """ """ self.url_base = '' # type: str - self._active = False + self.logger: Optional[logging.Logger] = None self.proxies = None + self._active = False + self._tasks_lock = Lock() self._tasks: List[multiprocessing.pool.AsyncResult] = [] self._sessions_lock = Lock() self._sessions: List[requests.Session] = [] - def init(self, url_base: str, proxy_host: str = "", proxy_port: int = 0): + def init(self, + url_base: str, + proxy_host: str = "", + proxy_port: int = 0, + log_path: Optional[str] = None, + ): """ Init rest client with url_base which is the API root address. e.g. 'https://www.bitmex.com/api/v1/' + :param url_base: + :param proxy_host: + :param proxy_port: + :param log_path: optional. file to save log. """ self.url_base = url_base + if log_path is not None: + self.logger = get_file_logger(log_path) + self.logger.setLevel(logging.DEBUG) if proxy_host and proxy_port: proxy = f"{proxy_host}:{proxy_port}" @@ -257,6 +275,11 @@ class RestClient(object): ) return text + def _log(self, msg, *args): + logger = self.logger + if logger: + logger.debug(msg, *args) + def _process_request( self, request: Request ): @@ -265,19 +288,32 @@ class RestClient(object): """ try: with self._get_session() as session: + # sign request = self.sign(request) + # send request url = self.make_full_url(request.path) + uid = uuid.uuid4() + method = request.method + headers = request.headers + params = request.params + data = request.data + self._log("[%s] sending request %s %s, headers:%s, params:%s, data:%s", + uid, method, url, + headers, params, data) response = session.request( - request.method, + method, url, - headers=request.headers, - params=request.params, - data=request.data, + headers=headers, + params=params, + data=data, proxies=self.proxies, ) request.response = response + self._log("[%s] received response from %s:%s", uid, method, url) + + # check result & call corresponding callbacks status_code = response.status_code if status_code // 100 == 2: # 2xx codes are all successful if status_code == 204: diff --git a/vnpy/api/websocket/websocket_client.py b/vnpy/api/websocket/websocket_client.py index e7c767a0..d89529a4 100644 --- a/vnpy/api/websocket/websocket_client.py +++ b/vnpy/api/websocket/websocket_client.py @@ -1,14 +1,18 @@ import json +import logging +import socket import ssl import sys import traceback -import socket from datetime import datetime from threading import Lock, Thread from time import sleep +from typing import Optional import websocket +from vnpy.trader.utility import get_file_logger + class WebsocketClient(object): """ @@ -47,19 +51,36 @@ class WebsocketClient(object): self.proxy_host = None self.proxy_port = None - self.ping_interval = 60 # seconds + self.ping_interval = 60 # seconds self.header = {} + self.logger: Optional[logging.Logger] = None + # For debugging self._last_sent_text = None self._last_received_text = None - def init(self, host: str, proxy_host: str = "", proxy_port: int = 0, ping_interval: int = 60, header: dict = None): + def init(self, + host: str, + proxy_host: str = "", + proxy_port: int = 0, + ping_interval: int = 60, + header: dict = None, + log_path: Optional[str] = None, + ): """ + :param host: + :param proxy_host: + :param proxy_port: + :param header: :param ping_interval: unit: seconds, type: int + :param log_path: optional. file to save log. """ self.host = host self.ping_interval = ping_interval # seconds + if log_path is not None: + self.logger = get_file_logger(log_path) + self.logger.setLevel(logging.DEBUG) if header: self.header = header @@ -109,6 +130,11 @@ class WebsocketClient(object): self._record_last_sent_text(text) return self._send_text(text) + def _log(self, msg, *args): + logger = self.logger + if logger: + logger.debug(msg, *args) + def _send_text(self, text: str): """ Send a text string to server. @@ -116,6 +142,7 @@ class WebsocketClient(object): ws = self._ws if ws: ws.send(text, opcode=websocket.ABNF.OPCODE_TEXT) + self._log('sent text: %s', text) def _send_binary(self, data: bytes): """ @@ -124,6 +151,7 @@ class WebsocketClient(object): ws = self._ws if ws: ws._send_binary(data) + self._log('sent binary: %s', data) def _create_connection(self, *args, **kwargs): """""" @@ -184,6 +212,7 @@ class WebsocketClient(object): print("websocket unable to parse data: " + text) raise e + self._log('recv data: %s', data) self.on_packet(data) # ws is closed before recv function is called # For socket.error, see Issue #1608 diff --git a/vnpy/trader/utility.py b/vnpy/trader/utility.py index 38a6e7db..51471b70 100644 --- a/vnpy/trader/utility.py +++ b/vnpy/trader/utility.py @@ -3,8 +3,9 @@ General utility functions. """ import json +import logging from pathlib import Path -from typing import Callable +from typing import Callable, Dict from decimal import Decimal import numpy as np @@ -14,6 +15,9 @@ from .object import BarData, TickData from .constant import Exchange, Interval +log_formatter = logging.Formatter('[%(asctime)s] %(message)s') + + def extract_vt_symbol(vt_symbol: str): """ :return: (symbol, exchange) @@ -461,3 +465,25 @@ def virtual(func: "callable"): that can be (re)implemented by subclasses. """ return func + + +file_handlers: Dict[str, logging.FileHandler] = {} + + +def _get_file_logger_handler(filename: str): + handler = file_handlers.get(filename, None) + if handler is None: + handler = logging.FileHandler(filename) + file_handlers[filename] = handler # Am i need a lock? + return handler + + +def get_file_logger(filename: str): + """ + return a logger that writes records into a file. + """ + logger = logging.getLogger(filename) + handler = _get_file_logger_handler(filename) # get singleton handler. + handler.setFormatter(log_formatter) + logger.addHandler(handler) # each handler will be added only once. + return logger From 5bb4a7135fb895026f93979971d6f9f3e14f840c Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sat, 21 Sep 2019 11:33:52 +0800 Subject: [PATCH 41/41] [Fix] strategy_module_name may be not defined --- vnpy/app/cta_backtester/engine.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vnpy/app/cta_backtester/engine.py b/vnpy/app/cta_backtester/engine.py index c501f350..5b677c9a 100644 --- a/vnpy/app/cta_backtester/engine.py +++ b/vnpy/app/cta_backtester/engine.py @@ -91,14 +91,16 @@ class BacktesterEngine(BaseEngine): """ for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: + # Load python source code file if filename.endswith(".py"): strategy_module_name = ".".join( [module_name, filename.replace(".py", "")]) + self.load_strategy_class_from_module(strategy_module_name) + # Load compiled pyd binary file elif filename.endswith(".pyd"): strategy_module_name = ".".join( [module_name, filename.split(".")[0]]) - - self.load_strategy_class_from_module(strategy_module_name) + self.load_strategy_class_from_module(strategy_module_name) def load_strategy_class_from_module(self, module_name: str): """