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

---
 utils/tool.py |   76 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 72 insertions(+), 4 deletions(-)

diff --git a/utils/tool.py b/utils/tool.py
index d73f473..e191df7 100644
--- a/utils/tool.py
+++ b/utils/tool.py
@@ -21,6 +21,22 @@
     return wrapper
 
 
+def singleton(cls):
+    """
+    鍗曚緥瑁呴グ鍣�
+    @param cls:
+    @return:
+    """
+    instances = {}
+
+    def get_instance(*args, **kwargs):
+        if cls not in instances:
+            instances[cls] = cls(*args, **kwargs)
+        return instances[cls]
+
+    return get_instance
+
+
 def get_expire():
     now = int(t.time())
     end = int(t.time()) + 60 * 60 * 24
@@ -28,7 +44,7 @@
     end = int(t.mktime(t.strptime(local_time, "%Y-%m-%d")))
     expire = end - now
     # 鍔犻殢鏈烘暟锛岄槻姝竴璧烽攢姣佹暟鎹�
-    expire += random.randint(0, 60 * 60)
+    expire += random.randint(0, 60 * 30)
     return expire
 
 
@@ -51,6 +67,18 @@
 
 def get_now_time_str():
     time_str = datetime.datetime.now().strftime("%H:%M:%S")
+    return time_str
+
+
+def get_now_time_as_int():
+    time_str = datetime.datetime.now().strftime("%H:%M:%S")
+    return int(time_str.replace(":", ""))
+
+
+def get_now_time_with_ms_str():
+    now = datetime.datetime.now()
+    ms = int(now.microsecond / 1000)
+    time_str = now.strftime(f"%H:%M:%S.{ms:03d}")
     return time_str
 
 
@@ -179,6 +207,16 @@
     return "{0:0>2}:{1:0>2}:{2:0>2}.{3:0>3}".format(h, m, s, ms)
 
 
+def timestamp_format(timestamp, format):
+    """
+    鏃堕棿鎴虫牸寮忓寲
+    @param timestamp:
+    @param format:
+    @return:
+    """
+    return datetime.datetime.fromtimestamp(timestamp).strftime(format)
+
+
 # 浜ゆ槗鏅傞枔鐨勫樊鍊�
 # 濡�11:29:59 涓� 13:00:00鍙浉宸�1s
 def trade_time_sub(time_str_1, time_str_2):
@@ -286,7 +324,11 @@
     # if price - 0.1 < fprice:
     #     fprice = price - 0.1
     # return round(fprice, 2)
-    return round(get_buy_min_price(price) - 0.03, 2)
+    if price < 20:
+        return round(get_buy_min_price(price) - 0.03, 2)
+    else:
+        # 澶ц偂浠风洿鎺ュ悜涓嬪彇2%
+        return round(price * (1 - 0.02), 2)
 
 
 if __name__ == "__main__":
@@ -315,6 +357,19 @@
 def is_can_buy_code(code):
     if code.find("00") == 0 or code.find("60") == 0 or code.find("30") == 0:
         return True
+    return False
+
+
+def is_target_code(code):
+    """
+    鏄惁鏄洰鏍囦唬鐮�
+    @param code:
+    @return:
+    """
+    prefixes = ["00", "60", "30"]
+    for prefix in prefixes:
+        if code.find(prefix) == 0:
+            return True
     return False
 
 
@@ -347,7 +402,11 @@
 
 
 def get_buy_volume(limit_up_price):
-    count = (constant.BUY_MONEY_PER_CODE // int(round(float(limit_up_price) * 100))) * 100
+    return get_buy_volume_by_money(limit_up_price, constant.BUY_MONEY_PER_CODE)
+
+
+def get_buy_volume_by_money(limit_up_price, money):
+    count = (money // int(round(float(limit_up_price) * 100))) * 100
     if count < 100:
         count = 100
     return count
@@ -393,5 +452,14 @@
     return get_market_type(code) == MARKET_TYPE_SZSE
 
 
+def is_ge_code(code):
+    """
+    鏄惁鏄垱涓氭澘
+    @param code:
+    @return:
+    """
+    return code.find("30") == 0
+
+
 if __name__ == "__main__":
-    print(is_sz_code("0000"))
+    print(timestamp_format(1726034271, "%H%M%S"))

--
Gitblit v1.8.0