开始写策略了,建仓逻辑
This commit is contained in:
+24
-18
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user