New file |
| | |
| | | """ |
| | | 自定义板块流入金额 |
| | | """ |
| | | import copy |
| | | |
| | | import constant |
| | | from huaxin_client import l1_subscript_codes_manager |
| | | from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager |
| | | from third_data.third_blocks_manager import BlockMapManager |
| | | from utils import tool |
| | | |
| | | |
| | | class CodeInMoneyManager: |
| | | """ |
| | | 单个票流入的金额计算 |
| | | """ |
| | | __code_money_dict = {} |
| | | |
| | | @classmethod |
| | | def set_market_info(cls, code, price, pre_price, current_amount): |
| | | """ |
| | | 设置市场行情信息 |
| | | @param code: |
| | | @param price: |
| | | @param pre_price: |
| | | @param current_amount: |
| | | @return: |
| | | """ |
| | | money = (price - pre_price) * current_amount / pre_price |
| | | cls.__code_money_dict[code] = int(money) |
| | | |
| | | @classmethod |
| | | def get_money(cls, code): |
| | | return cls.__code_money_dict.get(code) |
| | | |
| | | |
| | | @tool.singleton |
| | | class BlockInMoneyRankManager: |
| | | """ |
| | | 板块流入流出管理 |
| | | """ |
| | | |
| | | __code_blocks = {} |
| | | |
| | | __in_list = [] |
| | | __out_list = [] |
| | | |
| | | def __load_codes(self): |
| | | codes = [] |
| | | codes_sh, codes_sz = l1_subscript_codes_manager.get_codes(False) |
| | | for b in codes_sh: |
| | | codes.append(b.decode()) |
| | | for b in codes_sz: |
| | | codes.append(b.decode()) |
| | | return codes |
| | | |
| | | def __load_blocks(self): |
| | | if self.codes: |
| | | for code in self.codes: |
| | | before_fblocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code) |
| | | if not before_fblocks: |
| | | before_fblocks = set() |
| | | fblocks = BlockMapManager().filter_blocks(before_fblocks) |
| | | if fblocks: |
| | | fblocks -= constant.KPL_INVALID_BLOCKS |
| | | self.__code_blocks[code] = fblocks |
| | | |
| | | def __init__(self): |
| | | self.codes = self.__load_codes() |
| | | self.__load_blocks() |
| | | |
| | | def get_codes(self): |
| | | return self.codes |
| | | |
| | | def compute(self): |
| | | codes = self.codes |
| | | block_money = {} |
| | | for code in codes: |
| | | money = CodeInMoneyManager.get_money(code) |
| | | if money is None: |
| | | continue |
| | | before_fblocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code) |
| | | if not before_fblocks: |
| | | before_fblocks = set() |
| | | fblocks = BlockMapManager().filter_blocks(before_fblocks) |
| | | if fblocks: |
| | | fblocks -= constant.KPL_INVALID_BLOCKS |
| | | for b in fblocks: |
| | | if b not in block_money: |
| | | block_money[b] = 0 |
| | | block_money[b] += money |
| | | temp_list = [(x, block_money[x]) for x in block_money] |
| | | temp_list.sort(key=lambda x: x[1], reverse=True) |
| | | self.__in_list = temp_list |
| | | temp_list = copy.deepcopy(temp_list) |
| | | temp_list.sort(key=lambda x: x[1]) |
| | | self.__out_list = temp_list |
| | | |
| | | def get_in_list(self): |
| | | return self.__in_list |
| | | |
| | | def get_out_list(self): |
| | | return self.__out_list |