From ed9e2367eea9baa6c8bea82e0f81c209ffb2a56f Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 02 一月 2023 17:55:50 +0800
Subject: [PATCH] 撤单策略再次修改

---
 trade_data_manager.py |   69 ++++++++++++++++++++++++++++++++--
 1 files changed, 64 insertions(+), 5 deletions(-)

diff --git a/trade_data_manager.py b/trade_data_manager.py
index 8c5eafb..4b54b81 100644
--- a/trade_data_manager.py
+++ b/trade_data_manager.py
@@ -210,7 +210,22 @@
         count = self.__get_redis().get(key)
         return 0 if count is None else count
 
+    # 淇濆瓨褰撳墠娑ㄥ箙
+    def __save_current_rate(self, code, rate):
+        key = "code_current_rate-{}".format(code)
+        self.__get_redis().setex(key, tool.get_expire(), rate)
+
+    # 鑾峰彇褰撳墠娑ㄥ箙
+    def __get_current_rate(self, code):
+        key = "code_current_rate-{}".format(code)
+        rate = self.__get_redis().get(key)
+        if rate is not None:
+            return float(rate)
+        return None
+
     def process_rate(self, code, rate, time_str):
+        # 淇濆瓨鐩墠鐨勪唬鐮佹定骞�
+        self.__save_current_rate(code, rate)
         # 9鐐瑰崐涔嬪墠鐨勬暟鎹笉澶勭悊
         if int(time_str.replace(":", "")) < int("093000"):
             return
@@ -261,11 +276,55 @@
             return None
         return data[1]
 
+    # 鑾峰彇娑ㄥ箙鍓嶅嚑鐨勪唬鐮�
+    def get_top_rate_codes(self, top_n):
+        keys = "code_current_rate-*"
+        keys = self.__get_redis().keys(keys)
+        infos = []
+        for k in keys:
+            code = k.split("-")[1]
+            rate = self.__get_current_rate(code)
+            infos.append((code, rate))
+        # 鎺掑簭淇℃伅
+        sorted_infos = sorted(infos, key=lambda tup: tup[1], reverse=True)
+        sorted_infos = sorted_infos[:top_n]
+        codes = []
+        for data in sorted_infos:
+            codes.append(data[0])
+        return codes
+
+
+# 娑ㄥ仠娆℃暟绠$悊
+class placeordercountmanager:
+    __redisManager = redis_manager.RedisManager(0)
+
+    @classmethod
+    def __get_redis(cls):
+        return cls.__redisManager.getRedis()
+
+    @classmethod
+    def __incre_place_order_count(cls, code):
+        key = "place_order_count-{}".format(code)
+        cls.__get_redis().incrby(key, 1)
+        cls.__get_redis().expire(key, tool.get_expire())
+
+    @classmethod
+    def __get_place_order_count(cls, code):
+        key = "place_order_count-{}".format(code)
+        count = cls.__get_redis().get(key)
+        if count is not None:
+            return int(count)
+        return 0
+
+    @classmethod
+    def place_order(cls, code):
+        cls.__incre_place_order_count(code)
+
+    @classmethod
+    def get_place_order_count(cls, code):
+        return cls.__get_place_order_count(code)
+
 
 if __name__ == "__main__":
     processor = CodeActualPriceProcessor()
-    processor.process_rate("123456", -0.2, "09:30:00")
-    processor.process_rate("123456", -0.3, "09:40:00")
-    processor.process_rate("123456", 0.3, "09:50:00")
-
-    processor.is_under_water("123456")
+    print(processor.get_top_rate_codes(30))

--
Gitblit v1.8.0