admin
2025-04-08 70b51a2636858fb8cfbf39d3764d88d07286d8ad
strategy/order_methods.py
@@ -5,35 +5,45 @@
import multiprocessing
import threading
# import log
from strategy import data_cache, account_management
import data_server
from log_module.log import logger_debug
from log_module.log import logger_debug, logger_common
from strategy.trade_setting import TradeSetting
from trade import huaxin_trade_api, huaxin_trade_data_update, middle_api_protocol
from utils import huaxin_util, tool
# 引入日志模块
from strategy.logging_config import get_logger
# 获取logger实例
logger = get_logger()
logger = logger_common
# 下单买入函数(按金额,以限价买)【按金额买 基础版】
def buy_order_by_value(symbol, buy_order_value, sec_name, current_price):
    # 自动买 开关监听方法
    if not TradeSetting().get_auto_buy():
        # 暂停自动买
        logger.info(f"在交易方法函数处 关闭了 自动买")
        return
    if current_price < 3 or current_price > 30:
        # 当前单价超出预设限制
        logger.info(f"当前标的个股{sec_name}单价超出预设限制!预设值3 < current_price < 30,当前最新价{current_price}")
        return
    price = round(float(current_price), 2)
    volume = (int(buy_order_value / price) // 100) * 100
    if volume < 100:
        volume = 100
    # 调用笼子价计算工具计算下单价格
    order_price = tool.get_buy_max_price(current_price)
    order_price = round(tool.get_buy_max_price(current_price), 2)
    buy_order = huaxin_trade_api.order(1, symbol[-6:], volume, order_price, blocking=True)
    logger.info(f"current_price===={current_price}    order_price===={order_price}")
    logger.info(f"buy_order===={buy_order}")
    orderStatusMsg = buy_order['data'].get('orderStatusMsg', None)
    statusMsg = buy_order['data'].get('statusMsg', None)
    logger.info(f"orderStatusMsg==={orderStatusMsg}")
    logger.info(f"statusMsg==={statusMsg}")
    # orderStatusMsg 不在buy_order的下单回调中,那么才认为下单成功
    if orderStatusMsg is not None or (statusMsg is not None and statusMsg != ''):
    if statusMsg is not None and statusMsg == '':
        logger.info(f"买票 下单成功:【{sec_name}】")
        # 每一次成功下单后要更新一下 缓存 的持仓数据
        account_management.position_management()
@@ -41,12 +51,22 @@
        # 调用资金查询函数 查看资金变化
        account_management.finance_management()
        logger.info(f"更新的资金数据data_cache.account_finance_dict=={data_cache.account_finance_dict}")
        # 买票后添加 持仓代码集合
        data_cache.position_symbols_set.add(symbol)
        # 买票后添加 今日新增持仓代码集合
        data_cache.addition_position_symbols_set.add(symbol)
        logger.info(f"当前持仓数量:::{len(data_cache.position_symbols_set)}")
        logger.info(f"今日新增持仓数量:::{len(data_cache.addition_position_symbols_set)}")
        if symbol[-6:] in data_cache.account_positions_dict:
            logger.info(f"该股已经持仓==》{sec_name}")
            pass
        # todo 当前为测试阶段的冗余打印
        # 检测持仓信息中有无下单个股且有该个股的当前持仓,只有当前持仓数量不为0时,才认为交易成功
        for i in data_cache.account_positions_dict:
            # print(i)
            if i['securityID'] == symbol[-6:]:
                # print(i['currentPosition'])
                if i['currentPosition'] == 0:
                    logger.info(f"【{i['securityName']}】交易失败~")
                else:
                    # 买票后添加 持仓代码集合
                    data_cache.position_symbols_set.add(symbol)
                    logger.info(f"【{i['securityName']}】交易成功!")
# 下单买入函数(按可用资金的一定比例,在涨停价买)【按金额买 高级版】
@@ -69,22 +89,30 @@
        logger.info(f"【十分之{part_of_value * 10}可用资金】委买完毕")
        data_cache.available = available - buy_order_value
        logger.info(f"买票执行成功:【{sec_name}】")
        logger.info(f"买票后剩余资金:{round(data_cache.available, 2)}")
        logger.info(f"买票后剩余资金:{data_cache.account_finance_dict['usefulMoney']}")
    else:
        logger.info(f"【{sec_name}】,持仓:{available}小于计划委托:{part_of_value},委托失败!")
# 下单卖出函数(按持仓数量,在限价卖)【按量卖 基础版】
def sell_order_by_volume(symbol, volume, sec_name, current_price):
    # 自动卖开关监听方法
    if not TradeSetting().get_auto_sell():
        # 暂停自动卖
        logger.info(f"在交易方法函数处 关闭了 自动卖")
        return
    # price = round(float(price), 2)
    # 调用笼子价计算工具计算下单价格
    order_price = tool.get_buy_min_price(current_price)
    sell_order = huaxin_trade_api.order(2, symbol[-6:], volume, order_price, blocking=True)
    logger.info(f"current_price===={current_price}    order_price===={order_price}")
    logger.info(f"sell_order===={sell_order}")
    orderStatusMsg = sell_order['data'].get('orderStatusMsg', None)
    statusMsg = sell_order['data'].get('statusMsg', None)
    logger.info(f"orderStatusMsg==={orderStatusMsg}")
    logger.info(f"statusMsg==={statusMsg}")
    # orderStatusMsg 不在buy_order的下单回调中,那么才认为下单成功
    if orderStatusMsg is not None or (statusMsg is not None and statusMsg != ''):
    if statusMsg is not None and statusMsg == '':
        logger.info(f"卖票 下单成功:【{sec_name}】")
        # 每一次成功下单后要更新一下 缓存 的持仓数据
        account_management.position_management()
@@ -106,6 +134,7 @@
    :param index:  持仓对象列表中的个股对应序列号
    :return:  尝试返回的订单数据
    """
    logger.info(f"当前个股持仓手数【当前函数被调用时传进来的同步数据data_cache中的持仓数据】==={position_volume_yesterday}")
    # sell_order_volume = int(position_volume_yesterday * part_of_volume)
    sell_order_volume = round(position_volume_yesterday * part_of_volume / 100) * 100