From d7c79327dc65a78837a493a7736a36525ef97154 Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 30 Jan 2019 12:40:49 +0800 Subject: [PATCH] [Mod] reverse certain code formatting caused by black --- tests/backtesting/getdata.py | 1 - tests/backtesting/turtle.ipynb | 71 ++++++++++++++----- tests/backtesting/turtle.py | 29 -------- vnpy/app/cta_strategy/engine.py | 28 +++++--- .../strategies/turtle_signal_strategy.py | 2 - vnpy/app/cta_strategy/template.py | 4 +- vnpy/app/cta_strategy/ui/widget.py | 4 +- vnpy/gateway/futu/futu_gateway.py | 2 +- vnpy/gateway/ib/ib_gateway.py | 19 ++--- vnpy/trader/app.py | 14 ++-- vnpy/trader/engine.py | 10 +-- vnpy/trader/gateway.py | 2 +- vnpy/trader/setting.py | 2 + vnpy/trader/ui/mainwindow.py | 2 +- vnpy/trader/ui/widget.py | 8 +-- 15 files changed, 106 insertions(+), 92 deletions(-) delete mode 100644 tests/backtesting/turtle.py diff --git a/tests/backtesting/getdata.py b/tests/backtesting/getdata.py index ffa2fc12..77436bcc 100644 --- a/tests/backtesting/getdata.py +++ b/tests/backtesting/getdata.py @@ -1,5 +1,4 @@ from time import time -from datetime import datetime import rqdatac as rq diff --git a/tests/backtesting/turtle.ipynb b/tests/backtesting/turtle.ipynb index 0632fe76..addb79c7 100644 --- a/tests/backtesting/turtle.ipynb +++ b/tests/backtesting/turtle.ipynb @@ -23,10 +23,10 @@ "#%%\n", "engine = BacktestingEngine()\n", "engine.set_parameters(\n", - " vt_symbol=\"IF88.CFFEX\",\n", + " vt_symbol=\"IF99.CFFEX\",\n", " interval=\"1m\",\n", " start=datetime(2013, 1, 1),\n", - " end=datetime(2015, 3, 30),\n", + " end=datetime(2019, 3, 30),\n", " rate=0,\n", " slippage=0,\n", " size=300,\n", @@ -46,27 +46,60 @@ "name": "stdout", "output_type": "stream", "text": [ - "2019-01-30 09:49:29.139022\t开始加载历史数据\n", - "2019-01-30 09:49:34.255552\t历史数据加载完成,数据量:64800\n", - "2019-01-30 09:49:34.506449\t策略初始化完成\n", - "2019-01-30 09:49:34.523045\t开始回放历史数据\n" + "2019-01-30 12:25:59.002493\t开始加载历史数据\n", + "2019-01-30 12:26:34.081621\t历史数据加载完成,数据量:376572\n", + "2019-01-30 12:26:34.332922\t策略初始化完成\n", + "2019-01-30 12:26:34.333896\t开始回放历史数据\n", + "2019-01-30 12:27:21.518437\t历史数据回放结束\n", + "2019-01-30 12:27:21.518437\t开始计算逐日盯市盈亏\n", + "2019-01-30 12:27:21.898312\t逐日盯市盈亏计算完成\n", + "2019-01-30 12:27:21.898312\t开始计算策略统计指标\n", + "2019-01-30 12:27:21.929482\t------------------------------\n", + "2019-01-30 12:27:21.929482\t首个交易日:\t2013-02-01\n", + "2019-01-30 12:27:21.929482\t最后交易日:\t2019-01-30\n", + "2019-01-30 12:27:21.929482\t总交易日:\t1459\n", + "2019-01-30 12:27:21.929482\t盈利交易日:\t805\n", + "2019-01-30 12:27:21.929482\t亏损交易日:\t654\n", + "2019-01-30 12:27:21.929482\t起始资金:\t1,000,000.00\n", + "2019-01-30 12:27:21.929482\t结束资金:\t220,899,784.04\n", + "2019-01-30 12:27:21.929482\t总收益率:\t21,989.98%\n", + "2019-01-30 12:27:21.929482\t年化收益:\t3,617.27%\n", + "2019-01-30 12:27:21.929482\t最大回撤: \t-57,892,062.00%\n", + "2019-01-30 12:27:21.929482\t百分比最大回撤: -1,199.55%\n", + "2019-01-30 12:27:21.929482\t总盈亏:\t219,899,784.04%\n", + "2019-01-30 12:27:21.929482\t总手续费:\t0.00\n", + "2019-01-30 12:27:21.929482\t总滑点:\t0.00\n", + "2019-01-30 12:27:21.929482\t总成交金额:\t96,983,115,547.79\n", + "2019-01-30 12:27:21.929482\t总成交笔数:\t68478\n", + "2019-01-30 12:27:21.929482\t日均盈亏:\t150,719.52\n", + "2019-01-30 12:27:21.929482\t日均手续费:\t0.00\n", + "2019-01-30 12:27:21.929482\t日均滑点:\t0.00\n", + "2019-01-30 12:27:21.929482\t日均成交金额:\t66,472,320.46\n", + "2019-01-30 12:27:21.929482\t日均成交笔数:\t46.93488690884167\n", + "2019-01-30 12:27:21.929482\t日均收益率:\t1,322.46%\n", + "2019-01-30 12:27:21.929482\t收益标准差:\t828.67%\n", + "2019-01-30 12:27:21.929482\tSharpe Ratio:\t24.72\n" ] }, { - "ename": "TypeError", - "evalue": "cancel_stop_order() missing 1 required positional argument: 'vt_orderid'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mengine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_strategy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mTurtleSignalStrategy\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mengine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mengine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_backtesting\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[0mdf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mengine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcalculate_result\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mengine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcalculate_statistics\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\backtesting.py\u001b[0m in \u001b[0;36mrun_backtesting\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 253\u001b[0m \u001b[1;31m# Use the rest of history data for running backtesting\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 254\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory_data\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mix\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 255\u001b[1;33m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 256\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 257\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moutput\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"历史数据回放结束\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\backtesting.py\u001b[0m in \u001b[0;36mnew_bar\u001b[1;34m(self, bar)\u001b[0m\n\u001b[0;32m 503\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcross_limit_order\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 504\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcross_stop_order\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 505\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrategy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mon_bar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbar\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 506\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 507\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate_daily_close\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbar\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose_price\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\strategies\\turtle_signal_strategy.py\u001b[0m in \u001b[0;36mon_bar\u001b[1;34m(self, bar)\u001b[0m\n\u001b[0;32m 75\u001b[0m \u001b[0mCallback\u001b[0m \u001b[0mof\u001b[0m \u001b[0mnew\u001b[0m \u001b[0mbar\u001b[0m \u001b[0mdata\u001b[0m \u001b[0mupdate\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 76\u001b[0m \"\"\"\n\u001b[1;32m---> 77\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcancel_all\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 78\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 79\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mam\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate_bar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbar\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\template.py\u001b[0m in \u001b[0;36mcancel_all\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 188\u001b[0m \u001b[0mCancel\u001b[0m \u001b[0mall\u001b[0m \u001b[0morders\u001b[0m \u001b[0msent\u001b[0m \u001b[0mby\u001b[0m \u001b[0mstrategy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 189\u001b[0m \"\"\"\n\u001b[1;32m--> 190\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcta_engine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcancel_all\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 191\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 192\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mwrite_log\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\backtesting.py\u001b[0m in \u001b[0;36mcancel_all\u001b[1;34m(self, strategy)\u001b[0m\n\u001b[0;32m 781\u001b[0m \u001b[0mstop_orderids\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mactive_stop_orders\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 782\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mvt_orderid\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mstop_orderids\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 783\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcancel_stop_order\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvt_orderid\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 784\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 785\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mwrite_log\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstrategy\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mCtaTemplate\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mTypeError\u001b[0m: cancel_stop_order() missing 1 required positional argument: 'vt_orderid'" + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\backtesting.py:306: RuntimeWarning: invalid value encountered in log\n", + " df[\"return\"] = (np.log(df[\"balance\"] - np.log(df[\"balance\"].shift(1)))).fillna(\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ diff --git a/tests/backtesting/turtle.py b/tests/backtesting/turtle.py deleted file mode 100644 index f7bfa6ad..00000000 --- a/tests/backtesting/turtle.py +++ /dev/null @@ -1,29 +0,0 @@ -#%% -from vnpy.app.cta_strategy.backtesting import BacktestingEngine -from vnpy.app.cta_strategy.strategies.turtle_signal_strategy import ( - TurtleSignalStrategy, -) -from datetime import datetime - -#%% -engine = BacktestingEngine() -engine.set_parameters( - vt_symbol="IF88.CFFEX", - interval="1m", - start=datetime(2013, 1, 1), - end=datetime(2019, 1, 30), - rate=0, - slippage=0, - size=300, - pricetick=0.2, - capital=1_000_000, -) - -#%% -engine.add_strategy(TurtleSignalStrategy, {}) -engine.load_data() -engine.run_backtesting() -df = engine.calculate_result() -engine.calculate_statistics() -engine.show_chart() - diff --git a/vnpy/app/cta_strategy/engine.py b/vnpy/app/cta_strategy/engine.py index bccb62f1..34004ee4 100644 --- a/vnpy/app/cta_strategy/engine.py +++ b/vnpy/app/cta_strategy/engine.py @@ -19,14 +19,15 @@ from vnpy.trader.object import ( from vnpy.trader.event import EVENT_TICK, EVENT_ORDER, EVENT_TRADE from vnpy.trader.constant import Direction, PriceType, Interval from vnpy.trader.utility import get_temp_path + from .base import ( + EVENT_CTA_LOG, + EVENT_CTA_STRATEGY, + EVENT_CTA_STOPORDER, CtaOrderType, EngineType, StopOrder, StopOrderStatus, - EVENT_CTA_LOG, - EVENT_CTA_STRATEGY, - EVENT_CTA_STOPORDER, ORDER_CTA2VT, STOPORDER_PREFIX ) @@ -42,16 +43,19 @@ class CtaEngine(BaseEngine): def __init__(self, main_engine: MainEngine, event_engine: EventEngine): """""" - super(CtaEngine, self).__init__(main_engine, event_engine, "CtaStrategy") + super(CtaEngine, self).__init__( + main_engine, event_engine, "CtaStrategy") self.setting_file = None # setting file object self.classes = {} # class_name: stategy_class self.strategies = {} # strategy_name: strategy - self.symbol_strategy_map = defaultdict(list) # vt_symbol: strategy list + self.symbol_strategy_map = defaultdict( + list) # vt_symbol: strategy list self.orderid_strategy_map = {} # vt_orderid: strategy - self.strategy_orderid_map = defaultdict(set) # strategy_name: orderid list + self.strategy_orderid_map = defaultdict( + set) # strategy_name: orderid list self.stop_order_count = 0 # for generating stop_orderid self.stop_orders = {} # stop_orderid: stop_order @@ -197,7 +201,8 @@ class CtaEngine(BaseEngine): price=price, volume=volume, ) - vt_orderid = self.main_engine.send_limit_order(req, contract.gateway_name) + vt_orderid = self.main_engine.send_limit_order( + req, contract.gateway_name) # Save relationship between orderid and strategy. self.orderid_strategy_map[vt_orderid] = strategy @@ -374,7 +379,8 @@ class CtaEngine(BaseEngine): # Subscribe market data contract = self.main_engine.get_contract(strategy.vt_symbol) if contract: - req = SubscribeRequest(symbol=contract.symbol, exchange=contract.exchange) + req = SubscribeRequest( + symbol=contract.symbol, exchange=contract.exchange) self.main_engine.subscribe(req, contract.gateway_name) else: self.write_log(f"行情订阅失败,找不到合约{strategy.vt_symbol}", strategy) @@ -439,7 +445,8 @@ class CtaEngine(BaseEngine): Load strategy class from source code. """ path1 = Path(__file__).parent.joinpath("strategies") - self.load_strategy_class_from_folder(path1, "vnpy.app.cta_strategy.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") @@ -450,7 +457,8 @@ class CtaEngine(BaseEngine): """ for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: - module_name = ".".join([module_name, filename.replace(".py", "")]) + module_name = ".".join( + [module_name, filename.replace(".py", "")]) self.load_strategy_class_from_module(module_name) def load_strategy_class_from_module(self, module_name: str): diff --git a/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py b/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py index 8ee0a0c4..c313459b 100644 --- a/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py +++ b/vnpy/app/cta_strategy/strategies/turtle_signal_strategy.py @@ -6,7 +6,6 @@ from vnpy.app.cta_strategy import ( BarData, TradeData, OrderData, - StopOrder, BarGenerator, ArrayManager, ) @@ -161,4 +160,3 @@ class TurtleSignalStrategy(CtaTemplate): if t > -4: self.short(price - self.atr_value * 1.5, self.fixed_size, True) - diff --git a/vnpy/app/cta_strategy/template.py b/vnpy/app/cta_strategy/template.py index a82fb261..f6f7bc31 100644 --- a/vnpy/app/cta_strategy/template.py +++ b/vnpy/app/cta_strategy/template.py @@ -1,10 +1,10 @@ """""" - from abc import ABC from typing import Any, Callable from vnpy.trader.constant import Interval -from vnpy.trader.object import BarData, OrderData, TickData, TradeData +from vnpy.trader.object import BarData, TickData, OrderData, TradeData + from .base import CtaOrderType, StopOrder diff --git a/vnpy/app/cta_strategy/ui/widget.py b/vnpy/app/cta_strategy/ui/widget.py index 9a5dbeef..f73e0b93 100644 --- a/vnpy/app/cta_strategy/ui/widget.py +++ b/vnpy/app/cta_strategy/ui/widget.py @@ -5,16 +5,16 @@ from vnpy.trader.engine import MainEngine from vnpy.trader.ui import QtCore, QtGui, QtWidgets from vnpy.trader.ui.widget import ( BaseCell, - BaseMonitor, EnumCell, MsgCell, TimeCell, + BaseMonitor ) from ..base import ( APP_NAME, EVENT_CTA_LOG, EVENT_CTA_STOPORDER, - EVENT_CTA_STRATEGY, + EVENT_CTA_STRATEGY ) from ..engine import CtaEngine diff --git a/vnpy/gateway/futu/futu_gateway.py b/vnpy/gateway/futu/futu_gateway.py index 34e4ab71..0eac4ca8 100644 --- a/vnpy/gateway/futu/futu_gateway.py +++ b/vnpy/gateway/futu/futu_gateway.py @@ -30,10 +30,10 @@ from vnpy.trader.event import EVENT_TIMER from vnpy.trader.gateway import BaseGateway from vnpy.trader.object import ( TickData, + OrderData, TradeData, AccountData, ContractData, - OrderData, PositionData, SubscribeRequest, OrderRequest, diff --git a/vnpy/gateway/ib/ib_gateway.py b/vnpy/gateway/ib/ib_gateway.py index fbe4355a..d5a758d8 100644 --- a/vnpy/gateway/ib/ib_gateway.py +++ b/vnpy/gateway/ib/ib_gateway.py @@ -19,14 +19,14 @@ from ibapi.errors import BAD_LENGTH from vnpy.trader.gateway import BaseGateway from vnpy.trader.object import ( - AccountData, - CancelRequest, - ContractData, TickData, OrderData, TradeData, - OrderRequest, PositionData, + AccountData, + ContractData, + OrderRequest, + CancelRequest, SubscribeRequest ) from vnpy.trader.constant import ( @@ -347,7 +347,8 @@ class IbApi(EWrapper): orderid = str(orderId) order = OrderData( symbol=ib_contract.conId, - exchange=EXCHANGE_IB2VT.get(ib_contract.exchange, ib_contract.exchange), + exchange=EXCHANGE_IB2VT.get( + ib_contract.exchange, ib_contract.exchange), orderid=orderid, direction=DIRECTION_IB2VT[ib_order.action], price=ib_order.lmtPrice, @@ -372,7 +373,8 @@ class IbApi(EWrapper): accountid = f"{accountName}.{currency}" account = self.accounts.get(accountid, None) if not account: - account = AccountData(accountid=accountid, gateway_name=self.gateway_name) + account = AccountData(accountid=accountid, + gateway_name=self.gateway_name) self.accounts[accountid] = account name = ACCOUNTFIELD_IB2VT[key] @@ -491,7 +493,8 @@ class IbApi(EWrapper): self.clientid = setting["clientid"] - self.client.connect(setting["host"], setting["port"], setting["clientid"]) + self.client.connect( + setting["host"], setting["port"], setting["clientid"]) self.thread.start() @@ -592,7 +595,7 @@ class IbClient(EClient): def run(self): """ Reimplement the original run message loop of eclient. - + Remove all unnecessary try...catch... and allow exceptions to interrupt loop. """ while not self.done and self.isConnected(): diff --git a/vnpy/trader/app.py b/vnpy/trader/app.py index ccd4900a..04b9e58a 100644 --- a/vnpy/trader/app.py +++ b/vnpy/trader/app.py @@ -8,10 +8,10 @@ class BaseApp(ABC): Absstract class for app. """ - app_name = "" # Unique name used for creating engine and widget - app_module = "" # App module string used in import_module - app_path = "" # Absolute path of app folder - display_name = "" # Name for display on the menu. - engine_class = None # App engine class - widget_name = "" # Class name of app widget - icon_name = "" # Icon file name of app widget + app_name = "" # Unique name used for creating engine and widget + app_module = "" # App module string used in import_module + app_path = "" # Absolute path of app folder + display_name = "" # Name for display on the menu. + engine_class = None # App engine class + widget_name = "" # Class name of app widget + icon_name = "" # Icon file name of app widget diff --git a/vnpy/trader/engine.py b/vnpy/trader/engine.py index 87073c19..2eed3ff4 100644 --- a/vnpy/trader/engine.py +++ b/vnpy/trader/engine.py @@ -13,13 +13,13 @@ from typing import Any from vnpy.event import Event, EventEngine from .app import BaseApp from .event import ( + EVENT_TICK, + EVENT_ORDER, + EVENT_TRADE, + EVENT_POSITION, EVENT_ACCOUNT, EVENT_CONTRACT, - EVENT_LOG, - EVENT_ORDER, - EVENT_POSITION, - EVENT_TICK, - EVENT_TRADE, + EVENT_LOG ) from .gateway import BaseGateway from .object import CancelRequest, LogData, OrderRequest, SubscribeRequest diff --git a/vnpy/trader/gateway.py b/vnpy/trader/gateway.py index ca49cf12..45f12d84 100644 --- a/vnpy/trader/gateway.py +++ b/vnpy/trader/gateway.py @@ -8,8 +8,8 @@ from typing import Any from vnpy.event import Event, EventEngine from .event import ( EVENT_TICK, - EVENT_TRADE, EVENT_ORDER, + EVENT_TRADE, EVENT_POSITION, EVENT_ACCOUNT, EVENT_CONTRACT, diff --git a/vnpy/trader/setting.py b/vnpy/trader/setting.py index f5aa754d..ada103fa 100644 --- a/vnpy/trader/setting.py +++ b/vnpy/trader/setting.py @@ -7,10 +7,12 @@ from logging import CRITICAL SETTINGS = { "font.family": "Arial", "font.size": 12, + "log.active": True, "log.level": CRITICAL, "log.console": True, "log.file": True, + "email.server": "smtp.qq.com", "email.port": 465, "email.username": "", diff --git a/vnpy/trader/ui/mainwindow.py b/vnpy/trader/ui/mainwindow.py index ae93c5f3..ada552e5 100644 --- a/vnpy/trader/ui/mainwindow.py +++ b/vnpy/trader/ui/mainwindow.py @@ -10,7 +10,6 @@ from PyQt5 import QtCore, QtGui, QtWidgets from vnpy.event import EventEngine from .widget import ( - AboutDialog, TickMonitor, OrderMonitor, TradeMonitor, @@ -21,6 +20,7 @@ from .widget import ( ConnectDialog, ContractManager, TradingWidget, + AboutDialog, ) from ..engine import MainEngine from ..utility import get_icon_path, get_trader_path diff --git a/vnpy/trader/ui/widget.py b/vnpy/trader/ui/widget.py index 0fd2b457..d0f84a94 100644 --- a/vnpy/trader/ui/widget.py +++ b/vnpy/trader/ui/widget.py @@ -12,12 +12,12 @@ from vnpy.event import Event, EventEngine from ..constant import Direction, Exchange, Offset, PriceType from ..engine import MainEngine from ..event import ( - EVENT_ACCOUNT, + EVENT_TICK, + EVENT_TRADE, EVENT_ORDER, EVENT_POSITION, - EVENT_LOG, - EVENT_TICK, - EVENT_TRADE + EVENT_ACCOUNT, + EVENT_LOG ) from ..object import OrderRequest, SubscribeRequest from ..utility import load_setting, save_setting