From bda4216d608a12db7132c97083c19ecdad48d78f Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 28 八月 2024 18:29:21 +0800
Subject: [PATCH] 激进买入

---
 utils/buy_strategy_util.py |   75 ++++++++++++++++++++++++-------------
 1 files changed, 48 insertions(+), 27 deletions(-)

diff --git a/utils/buy_strategy_util.py b/utils/buy_strategy_util.py
index 40c8872..8ab6868 100644
--- a/utils/buy_strategy_util.py
+++ b/utils/buy_strategy_util.py
@@ -3,10 +3,12 @@
 """
 import time
 
-from code_attribute import gpcode_manager
+from code_attribute import gpcode_manager, code_volumn_manager
 from l2 import l2_data_util, l2_data_source_util, transaction_progress
 from l2.l2_data_util import L2DataUtil
 from l2.l2_transaction_data_manager import HuaXinSellOrderStatisticManager
+from log_module import async_log_util
+from log_module.log import logger_l2_error
 from settings.trade_setting import MarketSituationManager, TradeBlockBuyModeManager
 from trade import trade_data_manager
 from utils import tool, buy_condition_util, global_util
@@ -141,33 +143,52 @@
     @param trade_index:
     @return:
     """
-    total_data = l2_data_util.local_today_datas.get(code)
-    total_count = 0
-    total_big_count = 0
-    for i in range(trade_index + 1, total_data[-1]["index"] + 1):
-        data = total_data[i]
-        val = data["val"]
-        if not l2_data_util.L2DataUtil.is_limit_up_price_buy(val):
-            continue
-        money = val["num"] * float(val["price"])
-        if money < 5000:
-            continue
+    # 鑾峰彇浠婃棩鎴愪氦閲忎笌鍙傝�冮噺
+    # today = get_today_volumn(code)
+    # max60, yesterday = get_histry_volumn(code)
+    try:
+        today_volume = code_volumn_manager.get_today_volumn_cache(code)
+        histry_volumn = code_volumn_manager.get_histry_volumn(code)
+        if not today_volume or not histry_volumn:
+            return False, "灏氭湭鑾峰彇鍒伴噺"
+        threshhold_volume = (histry_volumn[0][0] - today_volume) // 3
+        limit_up_price = gpcode_manager.get_limit_up_price_as_num(code)
+        threshhold_volumes = threshhold_volume // 100, int(50000 / limit_up_price), int(200000 / limit_up_price)
 
-        left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(
-            code,
-            i,
-            total_data,
-            l2_data_util.local_today_canceled_buyno_map.get(
-                code))
-        if left_count > 0:
-            total_count += 1
-            if money > 29900:
-                total_big_count += 1
-            if total_count > 10:
-                break
-    if total_count > 10 or total_big_count < 1:
-        return False, f"鏈垚浜ゆ暟閲�-{total_count}锛屽ぇ鍗曟暟閲�-{total_big_count}"
-    return True, ""
+        total_data = l2_data_util.local_today_datas.get(code)
+        total_count = 0
+        total_big_count = 0
+        total_num = 0
+        for i in range(trade_index + 1, total_data[-1]["index"] + 1):
+            data = total_data[i]
+            val = data["val"]
+            if not l2_data_util.L2DataUtil.is_limit_up_price_buy(val):
+                continue
+            money = val["num"] * float(val["price"])
+            if money < 5000:
+                continue
+
+            left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(
+                code,
+                i,
+                total_data,
+                l2_data_util.local_today_canceled_buyno_map.get(
+                    code))
+            if left_count > 0:
+                total_num += val["num"]
+                total_count += 1
+                if money > 29900:
+                    total_big_count += 1
+                if threshhold_volumes[2] < total_num:
+                    break
+        if threshhold_volumes[1] <= total_num <= threshhold_volumes[2] and total_num < threshhold_volumes[
+            0] and total_big_count > 0:
+            # 鍓╀綑鐨勫�煎湪500w-2000w涔嬮棿鎵嶄細鍙備笌璁$畻
+            return True, ""
+        return False, f"鏈垚浜ゆ墜鏁�-{total_num}锛岄槇鍊�-{threshhold_volumes[0]}锛屽ぇ鍗曟暟閲�-{total_big_count}"
+    except Exception as e:
+        async_log_util.error(logger_l2_error, f"璁$畻鏄惁璺濈鎴愪氦杩涘害浣嶇疆杩戯細{str(e)}")
+        return False, "璁$畻寮傚父"
 
 
 def is_quantization(code, start_index, end_index):

--
Gitblit v1.8.0