| | |
| | | from db import redis_manager |
| | | import tool |
| | | import l2.l2_data_util |
| | | from log import logger_l2_trade_buy_queue |
| | | from log import logger_l2_trade_buy_queue, logger_l2_trade_buy_progress |
| | | |
| | | |
| | | class TradeBuyQueue: |
| | |
| | | |
| | | def __get_latest_not_limit_up_time(self, code): |
| | | key = "latest_not_limit_up_time-{}".format(code) |
| | | self.__getRedis().get(key) |
| | | if not constant.TEST: |
| | | return self.__getRedis().get(key) |
| | | return None |
| | | |
| | | # 保存数据,返回保存数据的条数 |
| | | def save(self, code, limit_up_price, buy_1_price, buy_1_time, queues): |
| | |
| | | return num_list |
| | | |
| | | # 保存成交索引 |
| | | def compute_traded_index(self, code, buy1_price, buyQueueBig): |
| | | def compute_traded_index(self, code, buy1_price, buyQueueBig, exec_time=None): |
| | | total_datas = l2.l2_data_util.local_today_datas.get(code) |
| | | today_num_operate_map = l2.l2_data_util.local_today_num_operate_map.get(code) |
| | | index = None |
| | | for i in range(0, len(buyQueueBig)): |
| | | buyQueueBigTemp = buyQueueBig[i:] |
| | | if i > 0 and len(buyQueueBigTemp) < 2: |
| | | # 已经执行过一次,且数据量小于2条就终止计算 |
| | | break |
| | | |
| | | if True: |
| | | buyQueueBigTemp = buyQueueBig |
| | | last_index, is_default = self.get_traded_index(code) |
| | | |
| | | c_last_index = 0 |
| | | if not is_default and last_index is not None: |
| | | c_last_index = last_index |
| | | latest_not_limit_up_time = self.__get_latest_not_limit_up_time(code) |
| | | # 如果是3个/4个数据找不到就调整顺序 |
| | | fbuyQueueBigTempList = [] |
| | | if 3 <= len(buyQueueBigTemp) <= 4: |
| | |
| | | fbuyQueueBigTempList.insert(0, buyQueueBigTemp) |
| | | for temp in fbuyQueueBigTempList: |
| | | try: |
| | | index = l2.l2_data_util.L2TradeQueueUtils.find_traded_progress_index(buy1_price, total_datas, |
| | | index = l2.l2_data_util.L2TradeQueueUtils.find_traded_progress_index(code, buy1_price, total_datas, |
| | | today_num_operate_map, |
| | | temp, |
| | | c_last_index, |
| | | self.__get_latest_not_limit_up_time( |
| | | code)) |
| | | latest_not_limit_up_time |
| | | ) |
| | | if index is not None: |
| | | # 判断位置是否大于执行位2s |
| | | if exec_time and tool.trade_time_sub(total_datas[index]["val"]["time"], exec_time) > 5: |
| | | # 位置是否大于执行位2s表示无效 |
| | | index = None |
| | | continue |
| | | # 只能削减一半以下才能终止 |
| | | if len(temp) * 2 < len(buyQueueBig): |
| | | index = None |
| | | break |
| | | except: |
| | | pass |
| | | if index is not None: |
| | | break |
| | | |
| | | if index is not None: |
| | | logger_l2_trade_buy_queue.info(f"确定交易进度:code-{code} index-{index}") |
| | | logger_l2_trade_buy_progress.info( |
| | | f"确定交易进度成功:code-{code} index-{index} queues:{buyQueueBig} last_index-{c_last_index} latest_not_limit_up_time-{latest_not_limit_up_time} exec_time-{exec_time}") |
| | | # 保存成交进度 |
| | | # self.__save_buy_progress_index(code, index, False) |
| | | return index |
| | | else: |
| | | logger_l2_trade_buy_progress.warning( |
| | | f"确定交易进度失败:code-{code} queues:{buyQueueBig} last_index-{c_last_index} latest_not_limit_up_time-{latest_not_limit_up_time} exec_time-{exec_time}") |
| | | return index |
| | | |
| | | # 获取成交进度索引 |
| | | def get_traded_index(self, code): |
| | | index, is_default = self.__get_buy_progress_index(code) |
| | | return index, is_default |
| | | |
| | | def set_default_traded_index(self, code, index): |
| | | self.__save_buy_progress_index(code, index, True) |
| | | |
| | | def set_traded_index(self, code, index): |
| | | self.__save_buy_progress_index(code, index, False) |