fix trader 可能没有login
This commit is contained in:
parent
ba62c6b0b8
commit
cc85330f29
@ -40,6 +40,14 @@ class SimulationTrader:
|
|||||||
|
|
||||||
return sim_logger
|
return sim_logger
|
||||||
|
|
||||||
|
def is_logged_in(self):
|
||||||
|
"""检查交易系统是否已经登录
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True表示已登录,模拟交易系统总是返回已登录状态
|
||||||
|
"""
|
||||||
|
return True
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
self.logger.info("模拟交易:登录成功")
|
self.logger.info("模拟交易:登录成功")
|
||||||
return True
|
return True
|
||||||
|
@ -65,7 +65,14 @@ def get_trader(use_sim_trader=False):
|
|||||||
return SimulationTrader()
|
return SimulationTrader()
|
||||||
|
|
||||||
# 否则返回真实交易实例
|
# 否则返回真实交易实例
|
||||||
return XtTrader()
|
trader = XtTrader()
|
||||||
|
|
||||||
|
# 检查交易实例是否已登录,如果未登录则进行登录
|
||||||
|
if not trader.is_logged_in():
|
||||||
|
logger.info("创建新的XtTrader实例并登录")
|
||||||
|
trader.login()
|
||||||
|
|
||||||
|
return trader
|
||||||
|
|
||||||
# 配置日志
|
# 配置日志
|
||||||
def setup_logger():
|
def setup_logger():
|
||||||
@ -137,7 +144,9 @@ def update_strategy_position(strategy_name, code, direction, amount):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# 获取交易实例持仓情况(不论真实还是模拟)
|
# 获取交易实例持仓情况(不论真实还是模拟)
|
||||||
actual_positions = get_trader().get_positions()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
|
actual_positions = current_trader.get_positions()
|
||||||
code_position = next((pos for pos in actual_positions if pos.get('stock_code') == code), None)
|
code_position = next((pos for pos in actual_positions if pos.get('stock_code') == code), None)
|
||||||
|
|
||||||
# 记录实际持仓总量
|
# 记录实际持仓总量
|
||||||
@ -172,6 +181,7 @@ def update_pending_orders():
|
|||||||
try:
|
try:
|
||||||
# 获取今日委托
|
# 获取今日委托
|
||||||
current_trader = get_trader()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
today_entrusts = current_trader.get_today_entrust()
|
today_entrusts = current_trader.get_today_entrust()
|
||||||
|
|
||||||
# 更新委托状态
|
# 更新委托状态
|
||||||
@ -380,6 +390,7 @@ def buy():
|
|||||||
logger.info(f"Executing buy order: code={code}, price={price}, amount={amount}, strategy_name={strategy_name}")
|
logger.info(f"Executing buy order: code={code}, price={price}, amount={amount}, strategy_name={strategy_name}")
|
||||||
try:
|
try:
|
||||||
current_trader = get_trader()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
result = execute_with_timeout(current_trader.buy, Config.TRADE_TIMEOUT, code, price, amount)
|
result = execute_with_timeout(current_trader.buy, Config.TRADE_TIMEOUT, code, price, amount)
|
||||||
if result is None:
|
if result is None:
|
||||||
# 超时时使用模拟交易
|
# 超时时使用模拟交易
|
||||||
@ -481,6 +492,7 @@ def sell():
|
|||||||
logger.info(f"Executing sell order: code={code}, price={price}, amount={amount}, strategy_name={strategy_name}")
|
logger.info(f"Executing sell order: code={code}, price={price}, amount={amount}, strategy_name={strategy_name}")
|
||||||
try:
|
try:
|
||||||
current_trader = get_trader()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
result = execute_with_timeout(current_trader.sell, Config.TRADE_TIMEOUT, code, price, amount)
|
result = execute_with_timeout(current_trader.sell, Config.TRADE_TIMEOUT, code, price, amount)
|
||||||
if result is None:
|
if result is None:
|
||||||
# 超时时使用模拟交易
|
# 超时时使用模拟交易
|
||||||
@ -539,7 +551,9 @@ def sell():
|
|||||||
def cancel(entrust_no):
|
def cancel(entrust_no):
|
||||||
logger.info(f"Received cancel request for entrust_no={entrust_no}")
|
logger.info(f"Received cancel request for entrust_no={entrust_no}")
|
||||||
try:
|
try:
|
||||||
result = get_trader().cancel(entrust_no)
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
|
result = current_trader.cancel(entrust_no)
|
||||||
logger.info(f"Cancel result: {result}")
|
logger.info(f"Cancel result: {result}")
|
||||||
|
|
||||||
# 如果取消成功,从pending_orders中移除该订单
|
# 如果取消成功,从pending_orders中移除该订单
|
||||||
@ -560,7 +574,9 @@ def get_balance():
|
|||||||
"""Get the balance of the account."""
|
"""Get the balance of the account."""
|
||||||
logger.info("Received balance request")
|
logger.info("Received balance request")
|
||||||
try:
|
try:
|
||||||
balance = get_trader().get_balance()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
|
balance = current_trader.get_balance()
|
||||||
logger.info(f"Balance: {balance}")
|
logger.info(f"Balance: {balance}")
|
||||||
|
|
||||||
response = {"success": True, "data": balance}
|
response = {"success": True, "data": balance}
|
||||||
@ -586,6 +602,7 @@ def get_positions():
|
|||||||
|
|
||||||
# 获取真实账户持仓,用于计算可交易量
|
# 获取真实账户持仓,用于计算可交易量
|
||||||
current_trader = get_trader()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
real_positions = current_trader.get_positions()
|
real_positions = current_trader.get_positions()
|
||||||
real_positions_map = {}
|
real_positions_map = {}
|
||||||
for pos in real_positions:
|
for pos in real_positions:
|
||||||
@ -621,6 +638,7 @@ def get_positions():
|
|||||||
|
|
||||||
# 否则返回原始持仓
|
# 否则返回原始持仓
|
||||||
current_trader = get_trader()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
positions = current_trader.get_positions()
|
positions = current_trader.get_positions()
|
||||||
logger.info(f"Positions: {positions}")
|
logger.info(f"Positions: {positions}")
|
||||||
|
|
||||||
@ -636,7 +654,9 @@ def get_today_trades():
|
|||||||
"""Get the today's trades of the account."""
|
"""Get the today's trades of the account."""
|
||||||
logger.info("Received today trades request")
|
logger.info("Received today trades request")
|
||||||
try:
|
try:
|
||||||
trades = get_trader().get_today_trades()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
|
trades = current_trader.get_today_trades()
|
||||||
logger.info(f"Today trades: {trades}")
|
logger.info(f"Today trades: {trades}")
|
||||||
|
|
||||||
response = {"success": True, "data": trades}
|
response = {"success": True, "data": trades}
|
||||||
@ -651,7 +671,9 @@ def get_today_entrust():
|
|||||||
"""Get the today's entrust of the account."""
|
"""Get the today's entrust of the account."""
|
||||||
logger.info("Received today entrust request")
|
logger.info("Received today entrust request")
|
||||||
try:
|
try:
|
||||||
entrust = get_trader().get_today_entrust()
|
current_trader = get_trader()
|
||||||
|
# get_trader 已经确保交易实例是登录状态的,无需再次检查
|
||||||
|
entrust = current_trader.get_today_entrust()
|
||||||
logger.info(f"Today entrust: {entrust}")
|
logger.info(f"Today entrust: {entrust}")
|
||||||
|
|
||||||
response = {"success": True, "data": entrust}
|
response = {"success": True, "data": entrust}
|
||||||
|
@ -68,6 +68,14 @@ class XtTrader:
|
|||||||
self.connected = False
|
self.connected = False
|
||||||
self.subscribed = False
|
self.subscribed = False
|
||||||
|
|
||||||
|
def is_logged_in(self):
|
||||||
|
"""检查交易系统是否已经登录
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True表示已登录,False表示未登录
|
||||||
|
"""
|
||||||
|
return self.started and self.connected and self.subscribed
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
if not self.started:
|
if not self.started:
|
||||||
self.xt_trader.start()
|
self.xt_trader.start()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user