调整 策略逻辑
This commit is contained in:
+29
-47
@@ -44,7 +44,7 @@ class SFGridController(XtQuantTraderCallback):
|
|||||||
xtdata.unsubscribe_quote(self.seq)
|
xtdata.unsubscribe_quote(self.seq)
|
||||||
|
|
||||||
|
|
||||||
def add_trade_target(self, stock_code):
|
def add_trade_target(self, stock_code: str):
|
||||||
try:
|
try:
|
||||||
stock_name = getInstrumentName(stock_code)
|
stock_name = getInstrumentName(stock_code)
|
||||||
new_target = strategy_db.TradeTarget.create(
|
new_target = strategy_db.TradeTarget.create(
|
||||||
@@ -188,25 +188,22 @@ class SFGridController(XtQuantTraderCallback):
|
|||||||
|
|
||||||
# ====== 市场回调方法 -- 以下方法由XtQuantData调用 ======
|
# ====== 市场回调方法 -- 以下方法由XtQuantData调用 ======
|
||||||
def onDataUpdate(self, data):
|
def onDataUpdate(self, data):
|
||||||
# 遍历股池
|
if sfgrid_constants.max_enabled_targets <= 0: # 全推
|
||||||
# for stock_code, data in data.items():
|
for stock_code, tickData in data.items():
|
||||||
# if data['lastPrice'] == 10.0:
|
lastPrice = tickData['lastPrice']
|
||||||
# print(f'target = {stock_code} - {getInstrumentName(stock_code)} {data['lastPrice']}')
|
if lastPrice == 10.0 and stock_code not in self.stock_trade_ctrl:
|
||||||
# self.add_trade_target(stock_code)
|
print(f'New trade target = {stock_code} - {getInstrumentName(stock_code)} {tickData['lastPrice']}')
|
||||||
# self.stock_trade_ctrl[stock_code].enabledTrading(True)
|
self.add_trade_target(stock_code)
|
||||||
|
self.stock_trade_ctrl[stock_code].enabledTrading(True)
|
||||||
|
else: # 指定目标 当前主要使用这种模式
|
||||||
# if stock_code not in self.stock_trade_ctrl:
|
for target in self.instrument_pool:
|
||||||
# self.add_trade_target(stock_code)
|
stock_code = target.stock_code
|
||||||
# self.stock_trade_ctrl[stock_code].onDataUpdate(data)
|
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
|
||||||
for target in self.instrument_pool:
|
if stock_code not in self.stock_trade_ctrl or stock_code not in data:
|
||||||
stock_code = target.stock_code
|
# print(f"股票代码 {stock_code} 未在交易控制器中找到,跳过处理。\n")
|
||||||
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
|
continue
|
||||||
if stock_code not in self.stock_trade_ctrl or stock_code not in data:
|
stock_controller: StockTradeController = self.stock_trade_ctrl[stock_code]
|
||||||
# print(f"股票代码 {stock_code} 未在交易控制器中找到,跳过处理。\n")
|
stock_controller.onDataUpdate(data)
|
||||||
continue
|
|
||||||
stock_controller: StockTradeController = self.stock_trade_ctrl[stock_code]
|
|
||||||
stock_controller.onDataUpdate(data)
|
|
||||||
|
|
||||||
|
|
||||||
# ====== 市场回调方法 -- 以下方法由XtQuantTrader调用 ======
|
# ====== 市场回调方法 -- 以下方法由XtQuantTrader调用 ======
|
||||||
@@ -230,11 +227,12 @@ class SFGridController(XtQuantTraderCallback):
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
stockCode = order.stock_code
|
stockCode = order.stock_code
|
||||||
|
ctrl:StockTradeController = self.stock_trade_ctrl[stockCode]
|
||||||
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
|
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
|
||||||
if stockCode in self.stock_trade_ctrl:
|
if ctrl is not None and order.order_remark == ctrl.getName():
|
||||||
ctrl:StockTradeController = self.stock_trade_ctrl[stockCode]
|
ctrl.onOrderTrade(order)
|
||||||
ctrl.onOrderUpdate(order)
|
else:
|
||||||
print(datetime.datetime.now(), '委托回调 投资备注', order.order_remark)
|
print(f"委托下单回调 投资备注 {order.order_remark} 不匹配 {ctrl.getName()}")
|
||||||
|
|
||||||
def on_stock_trade(self, trade:XtTrade):
|
def on_stock_trade(self, trade:XtTrade):
|
||||||
"""
|
"""
|
||||||
@@ -242,7 +240,13 @@ class SFGridController(XtQuantTraderCallback):
|
|||||||
:param trade: XtTrade对象
|
:param trade: XtTrade对象
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
print(datetime.datetime.now(), '成交回调', trade.order_remark, f"委托方向(48买 49卖) {trade.offset_flag} 成交价格 {trade.traded_price} 成交数量 {trade.traded_volume}")
|
stockCode = trade.stock_code
|
||||||
|
ctrl:StockTradeController = self.stock_trade_ctrl[stockCode]
|
||||||
|
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
|
||||||
|
if ctrl is not None and trade.order_remark == ctrl.getName():
|
||||||
|
ctrl.onOrderTrade(trade)
|
||||||
|
else:
|
||||||
|
print(f"委托回调 投资备注 {trade.order_remark} 不匹配 {ctrl.getName()}")
|
||||||
|
|
||||||
def on_order_error(self, order_error):
|
def on_order_error(self, order_error):
|
||||||
"""
|
"""
|
||||||
@@ -254,28 +258,6 @@ class SFGridController(XtQuantTraderCallback):
|
|||||||
# print(order_error.order_id, order_error.error_id, order_error.error_msg)
|
# print(order_error.order_id, order_error.error_id, order_error.error_msg)
|
||||||
print(f"\n委托报错回调 {order_error.order_remark} {order_error.error_msg}")
|
print(f"\n委托报错回调 {order_error.order_remark} {order_error.error_msg}")
|
||||||
|
|
||||||
def on_cancel_error(self, cancel_error):
|
|
||||||
"""
|
|
||||||
撤单失败推送
|
|
||||||
:param cancel_error: XtCancelError 对象
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
print(datetime.datetime.now(), sys._getframe().f_code.co_name)
|
|
||||||
|
|
||||||
def on_order_stock_async_response(self, response):
|
|
||||||
"""
|
|
||||||
异步下单回报推送
|
|
||||||
:param response: XtOrderResponse 对象
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
print(f"异步委托回调 投资备注: {response.order_remark}")
|
|
||||||
|
|
||||||
def on_cancel_order_stock_async_response(self, response):
|
|
||||||
"""
|
|
||||||
:param response: XtCancelOrderResponse 对象
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
print(datetime.datetime.now(), sys._getframe().f_code.co_name)
|
|
||||||
|
|
||||||
def on_account_status(self, status):
|
def on_account_status(self, status):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ class StockTradeController:
|
|||||||
self.account = account
|
self.account = account
|
||||||
self.currentPosition = getStockPosition(self.tradeTarget.stock_code, self.xt_trader, self.account)
|
self.currentPosition = getStockPosition(self.tradeTarget.stock_code, self.xt_trader, self.account)
|
||||||
|
|
||||||
|
def getName(self):
|
||||||
|
return "SFGRID"
|
||||||
|
|
||||||
|
|
||||||
def enabledTrading(self, enabled: bool):
|
def enabledTrading(self, enabled: bool):
|
||||||
self.tradeTarget.enabled = enabled
|
self.tradeTarget.enabled = enabled
|
||||||
@@ -40,6 +43,9 @@ class StockTradeController:
|
|||||||
if self.isEnabled():
|
if self.isEnabled():
|
||||||
print(f"\n标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 行情数据更新 {data[self.tradeTarget.stock_code]}")
|
print(f"\n标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 行情数据更新 {data[self.tradeTarget.stock_code]}")
|
||||||
|
|
||||||
|
def onOrderUpdate(self, order:XtOrder):
|
||||||
|
pass
|
||||||
|
|
||||||
def onOrderTrade(self, trade:XtTrade):
|
def onOrderTrade(self, trade:XtTrade):
|
||||||
indicator = False
|
indicator = False
|
||||||
if trade.order_id == self.initBuyOrderId and self.tradeTarget.status == 0:
|
if trade.order_id == self.initBuyOrderId and self.tradeTarget.status == 0:
|
||||||
|
|||||||
Reference in New Issue
Block a user