diff --git a/prod/jobs/refill_tdx_future_bars.py b/prod/jobs/refill_tdx_future_bars.py index 8d0db308..073225b6 100644 --- a/prod/jobs/refill_tdx_future_bars.py +++ b/prod/jobs/refill_tdx_future_bars.py @@ -33,7 +33,7 @@ for underlying_symbol in api_01.future_contracts.keys(): index_symbol = underlying_symbol + '99' print(f'开始更新:{index_symbol}') # csv数据文件名 - bar_file_path = os.path.abspath(os.path.join(bar_data_folder, f'{underlying_symbol}99_{start_date}_1m.csv')) + bar_file_path = os.path.abspath(os.path.join(bar_data_folder, 'tdx', f'{underlying_symbol}99_{start_date}_1m.csv')) # 如果文件存在, if os.path.exists(bar_file_path): diff --git a/vnpy/app/cta_crypto/back_testing.py b/vnpy/app/cta_crypto/back_testing.py index 134e838b..ae0333b0 100644 --- a/vnpy/app/cta_crypto/back_testing.py +++ b/vnpy/app/cta_crypto/back_testing.py @@ -545,8 +545,8 @@ class BackTestingEngine(object): for symbol, symbol_data in data_dict.items(): self.write_log(u'配置{}数据:{}'.format(symbol, symbol_data)) - self.set_price_tick(symbol, symbol_data.get('price_tick', 1)) - self.set_volume_tick(symbol, symbol_data.get('min_volume', 1)) + self.set_price_tick(symbol, symbol_data.get('price_tick', 0.01)) + self.set_volume_tick(symbol, symbol_data.get('min_volume', 0.01)) self.set_slippage(symbol, symbol_data.get('slippage', 0)) self.set_size(symbol, symbol_data.get('symbol_size', 10)) margin_rate = symbol_data.get('margin_rate', 0.1) @@ -561,7 +561,7 @@ class BackTestingEngine(object): product=Product(symbol_data.get('product', "期货")), size=symbol_data.get('symbol_size', 10), price_tick=symbol_data.get('price_tick', 0.01), - volume_tick=symbol_data.get('min_volume', 0.1), + volume_tick=symbol_data.get('min_volume', 0.01), margin_rate=margin_rate ) @@ -827,7 +827,7 @@ class BackTestingEngine(object): direction=direction, offset=offset, type=order_type, - price=round_to(value=price, target=self.get_price_tick(symbol)), + price=round_to(value=price, target=self.get_price_tick(vt_symbol)), volume=volume, status=Status.NOTTRADED, time=str(self.last_dt) diff --git a/vnpy/app/cta_crypto/template.py b/vnpy/app/cta_crypto/template.py index aaf5f90e..bfc699fc 100644 --- a/vnpy/app/cta_crypto/template.py +++ b/vnpy/app/cta_crypto/template.py @@ -194,7 +194,7 @@ class CtaTemplate(ABC): """ Send buy order to open a long position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_upper_limit(vt_symbol): self.write_error(u'涨停价不做FAK/FOK委托') return [] @@ -214,7 +214,7 @@ class CtaTemplate(ABC): """ Send sell order to close a long position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_lower_limit(vt_symbol): self.write_error(u'跌停价不做FAK/FOK sell委托') return [] @@ -234,7 +234,7 @@ class CtaTemplate(ABC): """ Send short order to open as short position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_lower_limit(vt_symbol): self.write_error(u'跌停价不做FAK/FOK short委托') return [] @@ -254,7 +254,7 @@ class CtaTemplate(ABC): """ Send cover order to close a short position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_upper_limit(vt_symbol): self.write_error(u'涨停价不做FAK/FOK cover委托') return [] diff --git a/vnpy/app/cta_strategy_pro/template.py b/vnpy/app/cta_strategy_pro/template.py index b7981cbc..da1f8c44 100644 --- a/vnpy/app/cta_strategy_pro/template.py +++ b/vnpy/app/cta_strategy_pro/template.py @@ -193,7 +193,7 @@ class CtaTemplate(ABC): """ Send buy order to open a long position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_upper_limit(vt_symbol): self.write_error(u'涨停价不做FAK/FOK委托') return [] @@ -214,7 +214,7 @@ class CtaTemplate(ABC): """ Send sell order to close a long position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_lower_limit(vt_symbol): self.write_error(u'跌停价不做FAK/FOK sell委托') return [] @@ -235,7 +235,7 @@ class CtaTemplate(ABC): """ Send short order to open as short position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_lower_limit(vt_symbol): self.write_error(u'跌停价不做FAK/FOK short委托') return [] @@ -256,7 +256,7 @@ class CtaTemplate(ABC): """ Send cover order to close a short position. """ - if OrderType in [OrderType.FAK, OrderType.FOK]: + if order_type in [OrderType.FAK, OrderType.FOK]: if self.is_upper_limit(vt_symbol): self.write_error(u'涨停价不做FAK/FOK cover委托') return [] diff --git a/vnpy/component/cta_line_bar.py b/vnpy/component/cta_line_bar.py index e707b76d..b6f29176 100644 --- a/vnpy/component/cta_line_bar.py +++ b/vnpy/component/cta_line_bar.py @@ -759,6 +759,10 @@ class CtaLineBar(object): def on_bar(self, bar: BarData): """OnBar事件""" + if not bar.interval: + bar.interval = self.interval + bar.interval_num = self.bar_interval + # 计算相关数据 bar_mid3 = round((bar.close_price + bar.high_price + bar.low_price) / 3, self.round_n) bar_mid4 = round((2 * bar.close_price + bar.high_price + bar.low_price) / 4, self.round_n) @@ -816,7 +820,7 @@ class CtaLineBar(object): # 回调上层调用者 if self.cb_on_bar: - self.cb_on_bar(bar) + self.cb_on_bar(bar=bar) def check_rt_funcs(self, func): """ @@ -3621,6 +3625,24 @@ class CtaLineBar(object): return False + @property + def rt_skd_dead_cross(self): + """是否实时SKD死叉""" + ret = self.is_skd_high_dead_cross(runtime=True, high_skd=15) and \ + self.cur_skd_count > 0 and \ + self.rt_skd_cross_price > 0 and \ + self.cur_price <= self.rt_skd_cross_price + return ret + + @property + def rt_skd_golden_cross(self): + """是否实时SKD金叉""" + ret = self.is_skd_low_golden_cross(runtime=True, low_skd=85) and \ + self.cur_skd_count < 0 and \ + self.rt_skd_cross_price > 0 and \ + self.cur_price >= self.rt_skd_cross_price + return ret + def is_skd_high_dead_cross(self, runtime=False, high_skd=None): """ 检查是否高位死叉 diff --git a/vnpy/trader/ui/mainwindow.py b/vnpy/trader/ui/mainwindow.py index 66dde1a2..fb19fd55 100644 --- a/vnpy/trader/ui/mainwindow.py +++ b/vnpy/trader/ui/mainwindow.py @@ -118,6 +118,9 @@ class MainWindow(QtWidgets.QMainWindow): all_apps = self.main_engine.get_all_apps() for app in all_apps: try: + if getattr(app, 'widget_name') is None: + continue + ui_module = import_module(app.app_module + ".ui") widget_class = getattr(ui_module, app.widget_name)