| | |
| | | import base64 |
| | | import concurrent.futures |
| | | import copy |
| | | import json |
| | |
| | | l2_data_source_util, cancel_buy_strategy |
| | | from l2.code_price_manager import Buy1PriceManager |
| | | |
| | | from l2.l2_data_manager import TradePointManager |
| | | from l2.l2_data_manager import TradePointManager, OrderBeginPosInfo |
| | | from l2.l2_data_util import L2DataUtil |
| | | from l2.l2_transaction_data_manager import HuaXinBuyOrderManager, BigOrderDealManager |
| | | from log_module import async_log_util, log_export |
| | |
| | | logger_trade, logger_trade_position_api_request, logger_request_api, \ |
| | | logger_real_place_order_position, logger_device |
| | | from output import l2_output_util |
| | | from third_data import kpl_data_manager, kpl_util, history_k_data_manager, huaxin_l1_data_manager, third_blocks_manager |
| | | from third_data.code_plate_key_manager import CodePlateKeyBuyManager, KPLCodeJXBlockManager |
| | | from third_data import kpl_util, history_k_data_manager, huaxin_l1_data_manager, third_blocks_manager, kpl_data_manager |
| | | from third_data.code_plate_key_manager import CodePlateKeyBuyManager, KPLCodeJXBlockManager, RealTimeKplMarketData, \ |
| | | RadicalBuyBlockManager |
| | | from third_data.history_k_data_manager import HistoryKDataManager |
| | | from third_data.history_k_data_util import JueJinApi, HistoryKDatasUtils |
| | | from third_data.kpl_data_manager import KPLDataManager |
| | |
| | | from third_data.third_blocks_manager import CodeThirdBlocksManager, SOURCE_TYPE_KPL, BlockMapManager |
| | | from trade import trade_manager, l2_trade_util, trade_data_manager, trade_constant |
| | | import l2_data_util as l2_data_util_old |
| | | from trade.buy_money_count_setting import BuyMoneyAndCountSetting, RadicalBuyBlockCodeCountManager |
| | | |
| | | from trade.huaxin import huaxin_trade_api, huaxin_trade_data_update, \ |
| | | huaxin_trade_record_manager, huaxin_trade_order_processor, huaxin_sell_util |
| | |
| | | code_list_type = data["code_list_type"] |
| | | operate = data["operate"] |
| | | code = data.get("code") |
| | | if code and not tool.is_can_buy_code(code): |
| | | raise Exception(f"不是可以交易的代码:{code}") |
| | | fresult = {"code": 0} |
| | | if code_list_type == outside_api_command_manager.CODE_LIST_WANT: |
| | | if operate == outside_api_command_manager.OPERRATE_SET: |
| | | gpcode_manager.WantBuyCodesManager().add_code(code) |
| | | # 加想买单要从黑名单移除 |
| | | l2_trade_util.remove_from_forbidden_trade_codes(code) |
| | | name = gpcode_manager.get_code_name(code) |
| | | if not name: |
| | | results = HistoryKDatasUtils.get_gp_codes_names([code]) |
| | |
| | | elif code_list_type == outside_api_command_manager.CODE_LIST_GREEN: |
| | | if operate == outside_api_command_manager.OPERRATE_SET: |
| | | gpcode_manager.GreenListCodeManager().add_code(code) |
| | | gpcode_manager.WantBuyCodesManager().add_code(code) |
| | | name = gpcode_manager.get_code_name(code) |
| | | if not name: |
| | | results = HistoryKDatasUtils.get_gp_codes_names([code]) |
| | |
| | | gpcode_manager.CodesNameManager.add_first_code_name(code, results[code]) |
| | | elif operate == outside_api_command_manager.OPERRATE_DELETE: |
| | | gpcode_manager.GreenListCodeManager().remove_code(code) |
| | | gpcode_manager.WantBuyCodesManager().remove_code(code) |
| | | elif operate == outside_api_command_manager.OPERRATE_GET: |
| | | codes = gpcode_manager.GreenListCodeManager().list_codes_cache() |
| | | datas = [] |
| | |
| | | white = gpcode_manager.WhiteListCodeManager().is_in_cache(code) |
| | | black = l2_trade_util.is_in_forbidden_trade_codes(code) |
| | | pause_buy = gpcode_manager.PauseBuyCodesManager().is_in_cache(code) |
| | | |
| | | must_buy = gpcode_manager.MustBuyCodesManager().is_in_cache(code) |
| | | green = gpcode_manager.GreenListCodeManager().is_in_cache(code) |
| | | desc_list = [] |
| | | if want: |
| | | desc_list.append("【想买单】") |
| | |
| | | desc_list.append("【黑名单】") |
| | | if pause_buy: |
| | | desc_list.append("【暂不买】") |
| | | if must_buy: |
| | | desc_list.append("【红名单】") |
| | | if green: |
| | | desc_list.append("【绿名单】") |
| | | |
| | | result = {"code": 0, "data": {"code_info": (code, code_name), "desc": "".join(desc_list)}} |
| | | self.send_response(result, client_id, request_id) |
| | | except Exception as e: |
| | |
| | | # 获取下单位置信息 |
| | | order_begin_pos = TradePointManager().get_buy_compute_start_data_cache(code) |
| | | if order_begin_pos is None or order_begin_pos.buy_single_index is None: |
| | | continue |
| | | order_begin_pos = OrderBeginPosInfo(buy_single_index=0, buy_exec_index=0) |
| | | l2_data_util.load_l2_data(code) |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | if not total_datas: |
| | | continue |
| | | trade_index, is_default = transaction_progress.TradeBuyQueue().get_traded_index(code) |
| | | if trade_index is None: |
| | | trade_index = 0 |
| | | # 下单位置 |
| | | place_order_index = SCancelBigNumComputer().get_real_place_order_index_cache(code) |
| | | if place_order_index is None: |
| | | place_order_index = 0 |
| | | # 计算信号位置到真实下单位置的总买(不管是否已撤) |
| | | total_nums = 0 |
| | | for i in range(order_begin_pos.buy_single_index, place_order_index): |
| | |
| | | real_place_order_after_num += val["num"] |
| | | |
| | | # 获取当日的量比 |
| | | volume_rate = code_volumn_manager.get_volume_rate(code) |
| | | volume_rate = code_volumn_manager.CodeVolumeManager().get_volume_rate(code) |
| | | |
| | | # 是否需要注意 |
| | | need_pay_attention = (total_left_count <= 10 or total_left_num * float( |
| | |
| | | except: |
| | | pass |
| | | |
| | | try: |
| | | if order_begin_pos: |
| | | fdata['mode'] = order_begin_pos.mode |
| | | else: |
| | | fdata['mode'] = -1 |
| | | except: |
| | | pass |
| | | |
| | | fdatas.append(fdata) |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | |
| | | elif ctype == "set_per_code_buy_money": |
| | | # 设置单只票的买入金额 |
| | | money = data["money"] |
| | | if money > 30000: |
| | | raise Exception("最多只能设置3w") |
| | | if money > 50000: |
| | | raise Exception("最多只能设置5w") |
| | | constant.BUY_MONEY_PER_CODE = money |
| | | self.send_response({"code": 0, "data": {"money": constant.BUY_MONEY_PER_CODE}}, client_id, request_id) |
| | | elif ctype == "get_per_code_buy_money": |
| | |
| | | kpl_data_manager.PullTask.repaire_pull_task() |
| | | # 修复数据服务 |
| | | server_util.repaire_data_server() |
| | | # 任务修复 |
| | | huaxin_trade_data_update.repaire_task() |
| | | self.send_response({"code": 0, "data": {}}, client_id, request_id) |
| | | elif ctype == "get_trade_queue": |
| | | code = data["code"] |
| | |
| | | source_origin_dict = copy.deepcopy(CodeThirdBlocksManager().get_source_blocks_origin(code)) |
| | | if not source_origin_dict: |
| | | source_origin_dict = {} |
| | | kpl_blocks = KPLCodeJXBlockManager().get_jx_blocks_radical(code) |
| | | kpl_blocks = RadicalBuyBlockManager.get_code_kpl_blocks(code) |
| | | if kpl_blocks is None: |
| | | kpl_blocks = set() |
| | | if not kpl_blocks: |
| | | KPLCodeJXBlockManager().load_jx_blocks_radical(code) |
| | | match_blocks, info = CodeThirdBlocksManager().get_intersection_blocks_info(code, kpl_blocks) |
| | | |
| | | filter_blocks, match_blocks = RadicalBuyBlockManager.get_code_blocks(code) |
| | | source_origin_dict[SOURCE_TYPE_KPL] = kpl_blocks |
| | | source_dict[SOURCE_TYPE_KPL] = BlockMapManager().filter_blocks(kpl_blocks) |
| | | data = { |
| | | "blocks": {}, |
| | | "origin_blocks": {}, |
| | | "match_blocks": list(match_blocks) |
| | | "match_blocks": [list(filter_blocks), list(match_blocks)] |
| | | } |
| | | for s in source_origin_dict: |
| | | data["origin_blocks"][s] = list(source_origin_dict[s]) |
| | |
| | | self.send_response({"code": 0, "data": data, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | elif ctype == "set_buy_money_count_setting": |
| | | # 设置买入金额和数量 |
| | | normal = data["normal"] |
| | | radical = data["radical"] |
| | | default_buy_money = data["default_buy_money"] |
| | | if int(default_buy_money) not in constant.AVAILABLE_BUY_MONEYS: |
| | | raise Exception("默认金额不在预设金额内") |
| | | constant.BUY_MONEY_PER_CODE = default_buy_money |
| | | BuyMoneyAndCountSetting().set_normal_buy_data(normal[0], json.loads(normal[1])) |
| | | BuyMoneyAndCountSetting().set_radical_buy_data(radical[0], json.loads(radical[1])) |
| | | data = { |
| | | "normal": BuyMoneyAndCountSetting().get_normal_buy_setting(), |
| | | "radical": BuyMoneyAndCountSetting().get_radical_buy_setting() |
| | | } |
| | | self.send_response({"code": 0, "data": data, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | elif ctype == "get_buy_money_count_setting": |
| | | # 设置买入金额和数量 |
| | | data = { |
| | | "normal": BuyMoneyAndCountSetting().get_normal_buy_setting(), |
| | | "radical": BuyMoneyAndCountSetting().get_radical_buy_setting(), |
| | | "moneys": constant.AVAILABLE_BUY_MONEYS, |
| | | "default_buy_money": constant.BUY_MONEY_PER_CODE |
| | | } |
| | | self.send_response({"code": 0, "data": data, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | elif ctype == "set_radical_buy_block_count_setting": |
| | | # 设置买入金额和数量 |
| | | data_str = data["data"] |
| | | data_str = base64.b64decode(data_str).decode('utf-8') |
| | | setting = json.loads(data_str) |
| | | RadicalBuyBlockCodeCountManager().set_block_code_count(setting) |
| | | self.send_response({"code": 0, "data": setting, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | elif ctype == "get_radical_buy_block_count_setting": |
| | | # 设置买入金额和数量 |
| | | data = RadicalBuyBlockCodeCountManager().get_block_code_count_settings() |
| | | self.send_response({"code": 0, "data": data, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | elif ctype == "get_place_order_settings": |
| | | # 获取买入下单设置 |
| | | data = { |
| | | "radical_buy": {"price": (constant.MIN_CODE_RADICAL_BUY_PRICE, constant.MAX_CODE_RADICAL_BUY_PRICE), |
| | | "zyltgb": constant.RADICAL_BUY_ZYLTGB_AS_YI_RANGES}} |
| | | self.send_response({"code": 0, "data": data, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | elif ctype == "set_place_order_settings": |
| | | radical_buy = data.get("radical_buy") |
| | | if radical_buy: |
| | | radical_buy = json.loads(radical_buy) |
| | | constant.MIN_CODE_RADICAL_BUY_PRICE = radical_buy["price"][0] |
| | | constant.MAX_CODE_RADICAL_BUY_PRICE = radical_buy["price"][1] |
| | | constant.RADICAL_BUY_ZYLTGB_AS_YI_RANGES = radical_buy["zyltgb"] |
| | | self.send_response({"code": 0, "data": {}, "msg": f""}, |
| | | client_id, |
| | | request_id) |
| | | |
| | | |
| | | |
| | | except Exception as e: |
| | | logging.exception(e) |
| | | logger_debug.exception(e) |