| | |
| | | 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 |
| | |
| | | delegates = [] |
| | | # 最大委托数量 |
| | | max_count = 0 |
| | | # 配置数据:[(时间,金额,数量)] |
| | | # 配置数据:[(时间,金额,数量, 最大数量)] |
| | | money_list = [] |
| | | if buy_mode == OrderBeginPosInfo.MODE_RADICAL: |
| | | max_count, money_list = BuyMoneyAndCountSetting().get_radical_buy_setting() |
| | |
| | | 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(":", "")) |
| | |
| | | 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()))) |