| | |
| | | import gpcode_manager |
| | | import redis_manager |
| | | import tool |
| | | import trade_manager |
| | | |
| | | |
| | | class THSBuy1VolumnManager: |
| | |
| | | key = "buy1_volumn_codes" |
| | | return self.__get_redis().smembers(key) |
| | | |
| | | # 返回是否需要更新数据 |
| | | # 返回是否需要更新数据,是否需要撤单,撤单原因 |
| | | def save(self, code, time_str, volumn, price): |
| | | # 客户端数据未加载出来过滤 |
| | | if volumn < 1: |
| | | return False |
| | | return False, False, None |
| | | # 14:55:00之后不在处理 |
| | | if int(time_str.replace(':', '')) >= int("145500"): |
| | | return False |
| | | return False, False, None |
| | | |
| | | self.__add_recod(code) |
| | | # 判断是否为涨停价 |
| | |
| | | if limit_up_price != tool.to_price(decimal.Decimal(price)): |
| | | # 非涨停价 |
| | | volumn = 0 |
| | | |
| | | last_volumn = self.__last_data[code] |
| | | # 不保存和上一次相同的数据 |
| | | if code in self.__last_data and self.__last_data[code] == volumn: |
| | | return False |
| | | if code in self.__last_data and last_volumn == volumn: |
| | | return False, False, None |
| | | self.__last_data[code] = volumn |
| | | |
| | | if code not in self.__code_time_volumn_dict: |
| | |
| | | self.__save_last_recod(code, keys[0], self.__code_time_volumn_dict[code][keys[0]]) |
| | | |
| | | self.__save_recod(code, time_str, volumn) |
| | | return True |
| | | |
| | | # 如果当前已挂单 |
| | | state = trade_manager.get_trade_state(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER: |
| | | # 判断本次与上一次的封单额是否小于5000w |
| | | limit_up_price = gpcode_manager.get_limit_up_price(code) |
| | | threshold_num = 50000000 // (limit_up_price * 100) |
| | | |
| | | if volumn < threshold_num and last_volumn < threshold_num: |
| | | # 下降趋势 |
| | | if volumn < last_volumn: |
| | | if (last_volumn - volumn) / last_volumn > 0.5: |
| | | return True, True, "连续两次封单量降幅达50%以上,时间:{} 封单量:{}-{}".format(time_str, last_volumn, volumn) |
| | | # 当封单额小于1000万需要撤单 |
| | | min_num = 10000000 // (limit_up_price * 100) |
| | | if volumn < min_num: |
| | | return True, True, "最新封单额小于1000万,时间:{} 封单量:{}".format(time_str, volumn) |
| | | |
| | | return True, False, None |
| | | |
| | | # 获取校验数据 |
| | | # 返回上一次的数据,如果没有上一次的就返回本次的 |