From 2f2516749615da866e96d8d24e499b7ecbb63a3e Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 23 六月 2025 12:28:52 +0800
Subject: [PATCH] 默认交易模式变更/真实下单位置计算位置修改

---
 utils/init_data_util.py |   77 +++++++++++++++++++++++++++++++++++---
 1 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/utils/init_data_util.py b/utils/init_data_util.py
index b02b719..70a3f5b 100644
--- a/utils/init_data_util.py
+++ b/utils/init_data_util.py
@@ -14,13 +14,13 @@
 
 def re_set_price_pres(codes, force=False):
     # 閫氳繃鍘嗗彶鏁版嵁缂撳瓨鑾峰彇
-    result = HistoryKDatasUtils.get_gp_latest_info(codes)
-    for item in result:
-        symbol = item['symbol']
-        symbol = symbol.split(".")[1]
-        pre_close = tool.to_price(decimal.Decimal(str(item['pre_close'])))
-        gpcode_manager.CodePrePriceManager.set_price_pre(symbol, pre_close, force)
-
+    for code in codes:
+        result = HistoryKDatasUtils.get_history_tick_n(code, 1)
+        for item in result:
+            symbol = item['symbol']
+            symbol = symbol.split(".")[1]
+            pre_close = tool.to_price(decimal.Decimal(str(item['close'])))
+            gpcode_manager.CodePrePriceManager.set_price_pre(symbol, pre_close, force)
 
 
 # 鑾峰彇杩�90澶╃殑鏈�澶ч噺涓庢渶杩戠殑閲�
@@ -63,6 +63,69 @@
         "%Y-%m-%d"), refer_index
 
 
+def parse_max_volume_new(code, datas):
+    """
+    璁$畻杩滈珮閲�
+    @param code:
+    @param datas:
+    @return: [楂橀噺,楂橀噺,楂橀噺鏃ユ湡,楂橀噺绱㈠紩]
+    """
+
+    def __is_limited_up(item):
+        limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(code, item["pre_close"]))
+        if abs(limit_up_price - item["high"]) < 0.001:
+            return True
+        return False
+
+    # 鍙栨渶杩�60涓氦鏄撴棩
+    datas = datas[:60]
+
+    # 鍒ゆ柇鏄惁娑ㄥ仠杩�
+    target_index = None
+    for i in range(len(datas)):
+        data = datas[i]
+        if __is_limited_up(data):
+            next_data = None
+            if i > 0:
+                next_data = datas[i - 1]
+            # max锛堟定鍋滆繖涓�澶�, 鍚庝竴澶╋級鐨勯噺
+            if next_data and next_data['volume'] > data['volume']:
+                target_index = i - 1
+            else:
+                target_index = i
+            break
+    if target_index is None:
+        # 60澶╂湭娑ㄥ仠,鑾峰彇60澶╁唴鐨勬渶楂橀噺
+        for i in range(len(datas)):
+            data = datas[i]
+            if target_index is None:
+                target_index = i
+            if data['volume'] > datas[target_index]['volume']:
+                target_index = i
+    return datas[target_index]['volume'], datas[target_index]['volume'], datas[target_index]['bob'].strftime(
+        "%Y-%m-%d"), target_index
+
+
+def parse_max_volume_in_days(datas, max_day):
+    """
+    瑙f瀽鏈�杩戝嚑澶╂渶澶х殑閲�
+    @param datas:
+    @param max_day:
+    @return:
+    """
+    # 瑙f瀽鏈�杩戝嚑澶╃殑鏈�澶ч噺
+    datas = datas[:max_day]
+    max_volume_info = None
+    for d in datas:
+        if max_volume_info is None:
+            max_volume_info = (d["volume"], d)
+        if d["volume"] > max_volume_info[0]:
+            max_volume_info = (d["volume"], d)
+    if max_volume_info:
+        return max_volume_info[0]
+    return None
+
+
 # 杩斿洖锛�(60澶╂渶澶ч噺,鏄ㄦ棩閲�,閲忓弬鑰冩棩鏈�,鍙傝�冮噺鎹粖浜ゆ槗鏃ユ暟)
 def __parse_max_volume(code, datas, is_new_or_near_top=False):
     max_volume = 0

--
Gitblit v1.8.0