From 59fba698b03a51a8da5b56a919ebbf94d4784f74 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 06 一月 2023 15:06:27 +0800
Subject: [PATCH] 买入策略修改

---
 l2_data_manager_new.py |   85 +++++++++++++++++++++++-------------------
 1 files changed, 46 insertions(+), 39 deletions(-)

diff --git a/l2_data_manager_new.py b/l2_data_manager_new.py
index 5740086..acf94b3 100644
--- a/l2_data_manager_new.py
+++ b/l2_data_manager_new.py
@@ -464,12 +464,12 @@
                         buy_nums += int(_val["num"]) * int(total_datas[i]["re"])
                     elif L2DataUtil.is_limit_up_price_buy_cancel(_val):
                         buy_nums -= int(_val["num"]) * int(total_datas[i]["re"])
-                if buy_nums < sell1_volumn:
-                    return False, "绾拱閲�({})灏忎簬鍗�1閲弡} 鍗�1鏃堕棿锛歿}".format(buy_nums, sell1_volumn, sell1_time)
+                if buy_nums < sell1_volumn * 0.49:
+                    return False, "绾拱閲�({})灏忎簬鍗�1閲忕殑49%{} 鍗�1鏃堕棿锛歿}".format(buy_nums, sell1_volumn, sell1_time)
         except Exception as e:
             logging.exception(e)
 
-        # 閲忔瘮瓒呰繃1.1鐨勪笉鑳戒拱
+        # 閲忔瘮瓒呰繃1.3鐨勪笉鑳戒拱
         volumn_rate = l2_trade_factor.L2TradeFactorUtil.get_volumn_rate_by_code(code)
         if volumn_rate >= 1.3:
             return False, "鏈�澶ч噺姣旇秴杩�1.3涓嶈兘涔�"
@@ -512,12 +512,12 @@
             for key in codes_index:
                 if codes_index.get(key) == 0:
                     first_codes.append(key)
-
-            for key in first_codes:
-                state = trade_manager.get_trade_state(key)
-                if state == trade_manager.TRADE_STATE_BUY_SUCCESS:
-                    # 鑰佸ぇ宸茬粡涔版垚鍔熶簡
-                    return False, "鑰佸ぇ{}宸茬粡涔版垚鍔燂紝鑰佷簩鏃犻渶璐拱".format(key)
+            # 鏆傛椂娉ㄩ噴鎺�
+            # for key in first_codes:
+            #     state = trade_manager.get_trade_state(key)
+            #     if state == trade_manager.TRADE_STATE_BUY_SUCCESS:
+            #         # 鑰佸ぇ宸茬粡涔版垚鍔熶簡
+            #         return False, "鑰佸ぇ{}宸茬粡涔版垚鍔燂紝鑰佷簩鏃犻渶璐拱".format(key)
             #
             # # 鏈�9鐐瑰崐娑ㄥ仠鐨勮�佸ぇ鎵嶈兘涔拌�佷簩锛屼笉鐒朵笉鑳戒拱
             # # 鑾峰彇鑰佸ぇ鐨勬定鍋滄椂闂�
@@ -607,9 +607,14 @@
 
         # 鏄惁涓烘柊鑾峰彇鍒扮殑浣嶇疆
         if buy_single_index is None:
+            place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code)
+            continue_count = 3
+            # 鍓�2娆$殑淇″彿杩炵画绗旀暟涓�3锛屽悗闈负2
+            if place_order_count > 2:
+                continue_count = 2
             # 鏈変拱鍏ヤ俊鍙�
             has_single, _index = cls.__compute_order_begin_pos(code, max(
-                compute_start_index - 2 if new_add else compute_start_index, 0), 3, compute_end_index)
+                compute_start_index - 2 if new_add else compute_start_index, 0), continue_count, compute_end_index)
             buy_single_index = _index
             if has_single:
                 num = 0
@@ -679,7 +684,7 @@
                 cls.debug(code, "鏁版嵁澶勭悊瀹屾瘯锛屼笅鍗�, 鏁版嵁鎴浘鏃堕棿-{}", capture_time)
                 # 鏁版嵁宸茬粡澶勭悊瀹屾瘯锛屽鏋滆繕娌℃挙鍗曞氨瀹為檯涓嬪崟
                 if need_cancel:
-                    if cls.cancel_buy(code, "鍒嗛挓绾уぇ鍗曟挙閿�"):
+                    if cls.cancel_buy(code, "S绾уぇ鍗曟挙閿�"):
                         # 鎵ц鎾ゅ崟鎴愬姛
                         pass
                 else:
@@ -829,17 +834,13 @@
 
         buy_single_time_seconds = L2DataUtil.get_time_as_second(total_datas[buy_single_index]["val"]["time"])
 
-        # 鍙互瑙﹀彂涔�
+        # 鍙互瑙﹀彂涔帮紝褰撴湁娑ㄥ仠涔颁俊鍙锋椂鎵嶄細瑙﹀彂涔�
         trigger_buy = True
         place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code)
-        max_space_time = 2
-        if place_order_count <= 0:
-            max_space_time = 2
-        elif place_order_count <= 1:
-            max_space_time = 6 - 1
-        else:
-            max_space_time = 9 - 1
-
+        if place_order_count>3:
+            place_order_count = 3
+        # 闂撮殧鏈�澶ф椂闂翠緷娆′负锛�3,9,27,81
+        max_space_time = pow(3,place_order_count + 1) - 1
         for i in range(compute_start_index, compute_end_index + 1):
             data = total_datas[i]
             _val = total_datas[i]["val"]
@@ -1572,7 +1573,7 @@
                     num += int(val["num"])
 
         average_num = num // count
-        average_num = round(5900/ gpcode_manager.get_limit_up_price(code))
+        average_num = round(5900 / gpcode_manager.get_limit_up_price(code))
         average_up_count = 0
         for i in range(start_index, end_index + 1):
             data = total_data[i]
@@ -1590,6 +1591,7 @@
     @classmethod
     def need_cancel(cls, code, buy_single_index, buy_exec_index, start_index, end_index, need_cancel=True):
         average_num, average_up_count, a_start_index, a_end_index = cls.__get_average_data(code)
+        L2TradeDataProcessor.cancel_debug(code,"s绾ф槸鍚﹂渶瑕佹挙鍗曪紝鏁版嵁鑼冨洿锛歿}-{}  骞冲潎澶у崟淇℃伅-({},{},{},{})",start_index,end_index,average_num, average_up_count, a_start_index, a_end_index)
         if average_num is None:
             return False, None
         total_data = local_today_datas[code]
@@ -1626,16 +1628,16 @@
         if need_cancel:
             # 璁$畻涔版挙澶у崟鏆傛瘮
             cancel_datas = cls.__get_cancel_datas(code)
-
             if cancel_datas is not None and len(cancel_datas) > 0:
+                L2TradeDataProcessor.cancel_debug(code, "s绾уぇ鍗� 鍙栨秷鏁伴噺:{}", len(cancel_datas))
                 cancel_rate_threshold = 0.49
                 place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code)
                 if place_order_count <= 1:
                     cancel_rate_threshold = 0.49
                 elif place_order_count <= 2:
-                    ancel_rate_threshold = 0.549
+                    cancel_rate_threshold = 0.549
                 else:
-                    ancel_rate_threshold = 0.59
+                    cancel_rate_threshold = 0.59
                 cancel_indexs = []
                 for index in cancel_datas:
                     cancel_indexs.append(int(index))
@@ -1703,15 +1705,19 @@
         cls.place_order_success(code, buy_single_index, buy_exec_index)
         # 鎵ц鏄惁闇�瑕佽绠梐verage
         cls.compute_average_big_num(code, buy_single_index, buy_single_index, datas[3])
-        for i in range(buy_single_index, datas[4]):
-            cancel, cancel_data = cls.need_cancel(code, i, i)
+
+        cancel, cancel_data = cls.need_cancel(code, buy_single_index, buy_exec_index, buy_single_index, buy_exec_index,
+                                              False)
+
+        for i in range(buy_exec_index + 1, datas[4]):
+            cancel, cancel_data = cls.need_cancel(code, buy_single_index, buy_exec_index, i, i)
             if cancel:
                 print("闇�瑕佹挙鍗�", cancel, cancel_data["index"])
                 break
 
     @classmethod
     def test(cls):
-        cls.__test(("000716", 410, 420, 461, 536))
+        cls.__test(("000909", 607, 646, 646, 694))
         # 浠g爜 涔板叆淇″彿璧峰鐐�  涔板叆淇℃伅鎵ц浣嶇疆  璁$畻鏈綅 鏈�杩滆绠椾綅缃�
         # cls.__test(("002793", 292, 308, 314, 410))
 
@@ -1803,7 +1809,7 @@
                     num += int(val["num"])
 
         average_num = num // count
-        #average_num = 0
+        # average_num = 0
         average_num = round(5900 / gpcode_manager.get_limit_up_price(code))
         average_up_count = 0
         for i in range(start_index, end_index + 1):
@@ -1860,12 +1866,12 @@
             if cancel_datas is not None and len(cancel_datas) > 0:
                 cancel_rate_threshold = 0.49
                 place_order_count = trade_data_manager.placeordercountmanager.get_place_order_count(code)
-                if place_order_count <=1:
-                    cancel_rate_threshold=0.49
-                elif place_order_count <=2:
-                    ancel_rate_threshold = 0.549
+                if place_order_count <= 1:
+                    cancel_rate_threshold = 0.49
+                elif place_order_count <= 2:
+                    cancel_rate_threshold = 0.549
                 else:
-                    ancel_rate_threshold = 0.59
+                    cancel_rate_threshold = 0.59
                 cancel_indexs = []
                 for index in cancel_datas:
                     cancel_indexs.append(int(index))
@@ -2091,9 +2097,10 @@
     # AverageBigNumComputer.test()
     # LongAverageBigNumComputer.test()
     # L2TradeDataProcessor.test()
-    load_l2_data("600213")
-
-    buy_index, buy_data = l2_data_util.get_buy_data_with_cancel_data(local_today_datas["600213"][84],
-                                                                     local_today_num_operate_map.get(
-                                                                         "600213"))
-    print(buy_index, buy_data)
+    SecondAverageBigNumComputer.test()
+    # load_l2_data("600213")
+    #
+    # buy_index, buy_data = l2_data_util.get_buy_data_with_cancel_data(local_today_datas["600213"][84],
+    #                                                                  local_today_num_operate_map.get(
+    #                                                                      "600213"))
+    # print(buy_index, buy_data)

--
Gitblit v1.8.0