开始写策略了,建仓逻辑

This commit is contained in:
2025-10-28 18:12:15 +08:00
parent 3443271771
commit c928b79c83
2 changed files with 46 additions and 32 deletions
+24 -18
View File
@@ -6,11 +6,12 @@ import sfgrid_constants
from sfgrid_trade_controller import StockTradeController
from util import getInstrumentName, getStockPosition
from xtquant.xttrader import XtQuantTrader
from xtquant.xttype import StockAccount
from xtquant.xttype import StockAccount, XtOrder
from xtquant import xtdata
from xtquant.xttrader import XtQuantTraderCallback
import datetime
# 量化核心控制对象
class SFGridController(XtQuantTraderCallback):
def __init__(self, account_no: str, miniQmtPath: str):
super().__init__()
@@ -40,20 +41,6 @@ class SFGridController(XtQuantTraderCallback):
xtdata.unsubscribe_quote(self.seq)
def onDataUpdate(self, data):
# 遍历股池
for target in self.instrument_pool:
stock_code = target.stock_code
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
if stock_code not in self.stock_trade_ctrl:
print(f"股票代码 {stock_code} 未在交易控制器中找到,跳过处理。\n")
continue
if stock_code not in data:
print(f"股票代码 {stock_code} 未在行情数据中找到,跳过处理。\n")
continue
stock_controller: StockTradeController = self.stock_trade_ctrl[stock_code]
stock_controller.onDataUpdate(data)
def add_trade_target(self, stock_code):
try:
stock_name = getInstrumentName(stock_code)
@@ -179,9 +166,24 @@ class SFGridController(XtQuantTraderCallback):
print(f"标的交易控制器不存在 {tradeTarget.stock_code} {getInstrumentName(tradeTarget.stock_code)}\n")
# ====== 市场回调方法 -- 以下方法由XtQuantData调用 ======
def onDataUpdate(self, data):
# 遍历股池
for target in self.instrument_pool:
stock_code = target.stock_code
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
if stock_code not in self.stock_trade_ctrl:
print(f"股票代码 {stock_code} 未在交易控制器中找到,跳过处理。\n")
continue
if stock_code not in data:
print(f"股票代码 {stock_code} 未在行情数据中找到,跳过处理。\n")
continue
stock_controller: StockTradeController = self.stock_trade_ctrl[stock_code]
stock_controller.onDataUpdate(data)
# ====== 市场回调方法 -- 以下方法由XtQuantTrader调用 ======
def on_connected(self):
"""
连接成功推送
@@ -195,12 +197,16 @@ class SFGridController(XtQuantTraderCallback):
"""
print(datetime.datetime.now(), '连接断开回调')
def on_stock_order(self, order):
def on_stock_order(self, order:XtOrder):
"""
委托回报推送
:param order: XtOrder对象
:return:
"""
stockCode = order.stock_code
# 如果存在对应的StockTradeController,则调用其onDataUpdate方法
if stockCode not in self.stock_trade_ctrl:
self.stock_trade_ctrl[stockCode].onOrderUpdate(order)
print(datetime.datetime.now(), '委托回调 投资备注', order.order_remark)
def on_stock_trade(self, trade):
+22 -14
View File
@@ -3,7 +3,7 @@ import strategy_db
from util import getInstrumentName, getStockPosition
from xtquant import xttrader, xtdata, xtconstant
from xtquant.xttype import StockAccount
from xtquant.xttype import StockAccount, XtOrder
import sfgrid_constants
@@ -21,19 +21,25 @@ class StockTradeController:
self.tradeTarget.enabled = enabled
self.tradeTarget.save()
# 建仓状态检查
if self.tradeTarget.current_position == 0 and self.tradeTarget.status == 0:
self.tradeTarget.grid_index = 1
self.tradeTarget.save()
self.initBuyOrderId = self.xt_trader.order_stock(
self.account,
self.tradeTarget.stock_code,
xtconstant.STOCK_BUY,
sfgrid_constants.grid_volume,
xtconstant.FIX_PRICE,
sfgrid_constants.grid_price[self.tradeTarget.grid_index],
'sf_grid', f'{self.tradeTarget.stock_code}_init_buy')
print(f"|- 标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 建初始仓 买单已发出 InitBuyOrderId: {self.initBuyOrderId} Price: {sfgrid_constants.grid_price[self.tradeTarget.grid_index]} Volume: {sfgrid_constants.grid_volume}\n")
if enabled:
print(f"|- 标的交易启动 {self.tradeTarget.stock_code}-{self.tradeTarget.stock_name}\n")
# 建仓状态检查
if self.tradeTarget.current_position == 0 and self.tradeTarget.status == 0:
print(f"|- 标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 建初始仓 买单准备中...\n")
self.tradeTarget.grid_index = 1
self.tradeTarget.save()
self.initBuyOrderId = self.xt_trader.order_stock(
self.account,
self.tradeTarget.stock_code,
xtconstant.STOCK_BUY,
sfgrid_constants.grid_volume,
xtconstant.FIX_PRICE,
sfgrid_constants.grid_price[self.tradeTarget.grid_index],
'sf_grid', f'{self.tradeTarget.stock_code}_init_buy')
print(f"|- 标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 建初始仓 买单已发出 InitBuyOrderId: {self.initBuyOrderId} Price: {sfgrid_constants.grid_price[self.tradeTarget.grid_index]} Volume: {sfgrid_constants.grid_volume}\n")
else:
print(f"|- 标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 已有仓位或非初始状态 无需建初始仓 当前仓位: {self.tradeTarget.current_position} 状态: {self.tradeTarget.status}\n")
def isEnabled(self) -> bool:
return self.tradeTarget.enabled
@@ -42,6 +48,8 @@ class StockTradeController:
if self.isEnabled():
print(f"标的{self.tradeTarget.stock_code}-{self.tradeTarget.stock_name} 行情数据更新 {data[self.tradeTarget.stock_code]}\n")
def onOrderUpdate(self, order:XtOrder):
pass
# Description: 程序启动后
def check_stock_position(self):