update
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
[config]
|
||||
miniqmtpath = D:/Programs/DTQMT/userdata_mini
|
||||
account_no = 99082560
|
||||
log_level = INFO
|
||||
; account_no = 89009170
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ miniQMTPath = r'D:\\Programs\\DTQMT\\userdata_mini' # miniQMT软件的安装路
|
||||
# miniQMTPath = ''
|
||||
account_no:str = '99082560'
|
||||
console_log = True
|
||||
log_level = "INFO"
|
||||
|
||||
def get_config_path() -> Path:
|
||||
"""获取配置文件的正确路径(兼容开发环境和打包后的可执行文件)"""
|
||||
@@ -26,7 +27,8 @@ def create_default_config():
|
||||
config = configparser.ConfigParser()
|
||||
config['config'] = {
|
||||
'miniQMTPath': r'D:/Programs/QMT/userdata_mini',
|
||||
'account_no': '00000000'
|
||||
'account_no': '00000000',
|
||||
'log_level' : 'INFO'
|
||||
}
|
||||
config_path = get_config_path()
|
||||
with open(config_path, 'w') as configfile:
|
||||
|
||||
+3
-2
@@ -165,7 +165,7 @@ class QmtV(XtQuantTraderCallback):
|
||||
:param order: XtOrder对象
|
||||
:return:
|
||||
"""
|
||||
print(f"委托回调 on_stock_order 投资备注 {order.strategy_name} {order.order_remark}")
|
||||
print(f"委托回调 on_stock_order 投资备注 {order.order_id} {order.strategy_name} {order.order_remark}")
|
||||
# print(f'orderd {order.strategy_name}-{order.stock_code} {order.order_id} {order.order_volume}-{order.order_status}')
|
||||
# stockCode = order.stock_code
|
||||
# ctrl:SFGridStrategy = self.stock_trade_ctrl[stockCode]
|
||||
@@ -193,7 +193,8 @@ class QmtV(XtQuantTraderCallback):
|
||||
# print(f"委托回调 投资备注 {trade.strategy_name} 不匹配 {ctrl.getName()}")
|
||||
|
||||
def on_order_stock_async_response(self, response:XtOrderResponse):
|
||||
print(f"委托回调 on_order_stock_async_response 投资备注 {response.error_msg}{response.strategy_name} {response.order_remark}")
|
||||
print(f"委托回调 on_order_stock_async_response 投资备注 {response.order_id} {response.seq} {response.error_msg}{response.strategy_name} {response.order_remark}")
|
||||
eBus.event_bus.publish(eBus.MarketOrderCreated, response)
|
||||
|
||||
# stockCode = response.order_remark
|
||||
# ctrl:SFGridStrategy = self.stock_trade_ctrl[stockCode]
|
||||
|
||||
@@ -8,7 +8,7 @@ from core.constants import OrderTypeBuy, OrderTypeInit, OrderTypeSell
|
||||
from core.util import is_trading_time
|
||||
|
||||
from xtquant import xtconstant
|
||||
from xtquant.xttype import XtOrder, XtOrderResponse, XtTrade
|
||||
from xtquant.xttype import XtOrderResponse, XtTrade
|
||||
import threading
|
||||
import core.eventbus as eBus
|
||||
|
||||
@@ -18,6 +18,7 @@ class SFGridStrategy:
|
||||
def __init__(self, tradeTarget: model.SFGridTradeTarget):
|
||||
self.tradeTarget:model.SFGridTradeTarget = tradeTarget
|
||||
self.enabledTrading(tradeTarget.enabled) # type: ignore
|
||||
event_bus.subscribe(eBus.MarketOrderCreated, self.onOrderCreateAsync)
|
||||
event_bus.subscribe(eBus.MarketOrderTraded, self.onOrderTrade)
|
||||
self.refreshPlanPrice()
|
||||
self.dataUpdateLock = threading.Lock()
|
||||
@@ -91,7 +92,7 @@ class SFGridStrategy:
|
||||
PrintLog(LogLevel.INFO, f'|- 市价更新[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - 计划买入价{self.tradeTarget.plan_buy_price}, 计划卖出价{self.tradeTarget.plan_sell_price}')
|
||||
if self.tradeTarget.enabled and self.tradeTarget.status == 0 and lastPrice <= inTradeTarget.getPriceGrid()[1]: # 已启用,未建仓,准备建仓单信息
|
||||
PrintLog(LogLevel.INFO, f'|- 市价更新[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - 准备建仓单信息')
|
||||
orderPrice = inTradeTarget.getPriceGrid()[index]
|
||||
orderPrice = inTradeTarget.getPriceGrid()[1]
|
||||
orderType = xtconstant.STOCK_BUY
|
||||
orderRemark = OrderTypeInit
|
||||
elif self.tradeTarget.enabled and self.tradeTarget.status == 1 and self.tradeTarget.plan_buy_price > 0 and lastPrice <= self.tradeTarget.plan_buy_price:
|
||||
@@ -139,17 +140,15 @@ class SFGridStrategy:
|
||||
self.dataUpdateLock.release()
|
||||
print(f'|- 市价更新[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}] - END')
|
||||
|
||||
def onOrderCreate(self, order:XtOrder):
|
||||
if order.strategy_name == self.getName():
|
||||
print(f"委托创建通知 onOrderCreate[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}]: {order.order_id}")
|
||||
self.tradeTarget.current_order_no = order.order_id
|
||||
self.saveProxy()
|
||||
|
||||
def onOrderCreateAsync(self, response:XtOrderResponse):
|
||||
if response.strategy_name == self.getName():
|
||||
self.dataUpdateLock.acquire()
|
||||
try:
|
||||
if response.strategy_name == self.getName() and response.seq == self.tradeTarget.current_order_no:
|
||||
print(f"委托创建通知 onOrderCreateAsync[{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}]: {response.order_id}")
|
||||
self.tradeTarget.current_order_no = response.order_id
|
||||
self.saveProxy()
|
||||
finally:
|
||||
self.dataUpdateLock.release()
|
||||
|
||||
def onOrderTrade(self, trade:XtTrade):
|
||||
if trade.strategy_name != self.getName():
|
||||
|
||||
@@ -54,7 +54,7 @@ class TradeTargetUI(ttk.Frame):
|
||||
tradeTarget = self.tradeTargetData[id]
|
||||
lastPrice = float("{:.3f}".format(tickData['lastPrice']))
|
||||
tradeTarget.market_price = lastPrice # type: ignore
|
||||
self.updateTradeTarget(tradeTarget, False)
|
||||
self.updateTradeTarget(tradeTarget, False, True)
|
||||
else:
|
||||
# 非目标交易,发布市场数据更新事件用于市场监控
|
||||
lastPrice = tickData['lastPrice']
|
||||
@@ -82,7 +82,7 @@ class TradeTargetUI(ttk.Frame):
|
||||
self.tradeTargetData[id] = target
|
||||
|
||||
|
||||
def updateTradeTarget(self, target: SFGridTradeTarget, save: bool = True):
|
||||
def updateTradeTarget(self, target: SFGridTradeTarget, save: bool = True, priceChange:bool = False):
|
||||
if save:
|
||||
target.save()
|
||||
|
||||
@@ -98,6 +98,8 @@ class TradeTargetUI(ttk.Frame):
|
||||
self.strategy_ctrl[id] = SFGridStrategy(target) # pyright: ignore[reportArgumentType]
|
||||
else:
|
||||
self.strategy_ctrl[id].updateTradeTarget(target)
|
||||
if priceChange:
|
||||
self.strategy_ctrl[id].onDataUpdate(target)
|
||||
|
||||
# UI CREATE
|
||||
def create_ui(self):
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ a = Analysis(
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[('config.ini', '.')], # 明确包含配置文件
|
||||
hiddenimports=[],
|
||||
hiddenimports=['brotli', 'brotli.encoding'],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
|
||||
Reference in New Issue
Block a user