Administrator
4 天以前 48fb7a00951f91bdc707e5dd2d196e5bccb752c3
trade/buy_money_count_setting.py
@@ -4,7 +4,7 @@
import json
import constant
from db import redis_manager
from db import redis_manager_delegate as redis_manager
from db.mysql_data_delegate import Mysqldb
from db.redis_manager_delegate import RedisUtils
from l2.l2_data_manager import OrderBeginPosInfo
@@ -160,7 +160,7 @@
            delegates = []
        # 最大委托数量
        max_count = 0
        # 配置数据:[(时间,金额,数量)]
        # 配置数据:[(时间,金额,数量, 最大数量)]
        money_list = []
        if buy_mode == OrderBeginPosInfo.MODE_RADICAL:
            max_count, money_list = BuyMoneyAndCountSetting().get_radical_buy_setting()
@@ -181,6 +181,8 @@
                if i > 0:
                    start_time = money_list[i - 1][0]
                break
        if end_info is None:
            return False, constant.BUY_MONEY_PER_CODE, f"当前时间段不能扫入"
        # 获取时间段已经成交/已经挂单的代码数量
        end_time_int = int(end_info[0].replace(":", ""))
        start_time_int = int(start_time.replace(":", ""))
@@ -192,11 +194,78 @@
            if start_time_int < int(d[1].replace(":", "")) <= end_time_int:
                codes.add(d[0])
        if len(codes) >= end_info[2]:
            return True, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})超过{end_info[2]}个,按照默认金额委托"
            if len(codes) >= end_info[2] + end_info[3]:
                return False, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})超过{end_info[2] + end_info[3]}个,已经不能委托"
            else:
                return True, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})>={end_info[2]}个,<{end_info[2] + end_info[3]} ,按默认金额扫入"
        else:
            return True, end_info[
                1], f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})没有超过{end_info[2]}个,委托金额为:{end_info[1]}"
    @classmethod
    def __get_possible_buy_moneys(cls):
        """
        获取可能的买入金额
        @return:
        """
        moneys = set()
        radical_buy_setting = BuyMoneyAndCountSetting().get_radical_buy_setting()
        if radical_buy_setting:
            moneys |= set([x[1] for x in radical_buy_setting[1]])
        normal_buy_setting = BuyMoneyAndCountSetting().get_normal_buy_setting()
        if normal_buy_setting:
            moneys |= set([x[1] for x in normal_buy_setting[1]])
        moneys.add(constant.BUY_MONEY_PER_CODE)
        print(moneys)
        return moneys
    @classmethod
    def get_possible_buy_volumes(cls, limit_up_price):
        """
        获取所有可能下单的量
        @param limit_up_price: 涨停价
        @return:
        """
        moneys = cls.__get_possible_buy_moneys()
        total_volumes = set()
        for money in moneys:
            volumes = cls.get_possible_buy_volumes_by_money(limit_up_price, money)
            if volumes:
                total_volumes |= set(list(volumes))
        return total_volumes
    @classmethod
    def get_possible_buy_volumes_by_money(cls, limit_up_price, money):
        """
        获取所有可能下单的量
        @param money: 金额
        @param limit_up_price: 涨停价
        @return:
        """
        total_volume_unit_100 = tool.get_buy_volume_by_money(limit_up_price, money)//100
        return cls.get_possible_buy_volumes_by_total_volume(total_volume_unit_100*100)
    @classmethod
    def get_possible_buy_volumes_by_total_volume(cls, volume):
        """
        获取所有可能下单的量
        @param volume: 下单的股数
        @param limit_up_price: 涨停价
        @return:
        """
        total_volume_unit_100 = volume // 100
        if total_volume_unit_100 % 2 == 0:
            return 100 * (total_volume_unit_100 // 2 - 1), 100 * (total_volume_unit_100 // 2 + 1)
        else:
            # 防止与同花顺等交易平台拆单相似
            return 100 * (total_volume_unit_100 // 2 - 1), 100 * (total_volume_unit_100 // 2 + 1 + 1)
if __name__ == '__main__':
    pass
    limit_up_price = 14.38
    special_volumes = BuyMoneyUtil.get_possible_buy_volumes(limit_up_price)
    special_volumes |= set([tool.get_buy_volume_by_money(limit_up_price, x) for x in constant.AVAILABLE_BUY_MONEYS])
    print(special_volumes)
    # print(json.dumps(list(BuyMoneyUtil.get_possible_buy_moneys())))