From cd5863943c5c207601df5c91ec1159c41fb044fb Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 04 九月 2024 18:13:52 +0800
Subject: [PATCH] 小群撤参数修改

---
 huaxin_client/l1_api_client.py |  105 +++++++++++++++++++++++++++++++++-
 servers/data_server.py         |    3 
 utils/buy_strategy_util.py     |    2 
 utils/data_export_util.py      |   27 +++++++-
 4 files changed, 125 insertions(+), 12 deletions(-)

diff --git a/huaxin_client/l1_api_client.py b/huaxin_client/l1_api_client.py
index ea3a837..dab8a67 100644
--- a/huaxin_client/l1_api_client.py
+++ b/huaxin_client/l1_api_client.py
@@ -3,7 +3,7 @@
 import time
 
 import qcvalueaddproapi
-import sys
+from utils import tool
 
 global g_userid, g_passwd, g_address, g_port, g_seqnum
 g_seqnum = 100000
@@ -29,10 +29,15 @@
     def queryTradeCalendar(self):
         try:
             queryField = qcvalueaddproapi.CQCVDReqQryShareCalendarField()
-            queryField.BegDate = "20240701"
-            queryField.EndDate = "20240801"
-            queryField.PageCount = 100
+            # queryField.BegDate = "20240704"
+            queryField.EndDate = "20240904"
+            queryField.PageCount = 10
             queryField.PageLocate = 1
+            if queryField.BegDate:
+                queryField.OrderType = qcvalueaddproapi.QCVD_ORDST_ASC
+            if queryField.EndDate:
+                queryField.OrderType = qcvalueaddproapi.QCVD_ORDST_DESC
+
             request_id = self.__create_request_id()
             results = self.m_api.ReqReqQryShareCalendar(queryField, request_id)
             for i in range(0, 1000):
@@ -40,6 +45,57 @@
                     return self.__result_cache
                 time.sleep(0.002)
             print("ReqReqQryShareCalendar:", results)
+        except Exception as e:
+            logging.exception(e)
+
+    def queryBars(self, code, begin_date, end_date):
+        try:
+            queryField = qcvalueaddproapi.CQCVDReqQryStockDayQuotationField()
+            queryField.BegDate = begin_date.replace("-", "")
+            queryField.EndDate = end_date.replace("-", "")
+            if tool.is_sh_code(code):
+                queryField.ExchangeID = qcvalueaddproapi.QCVD_EXD_SSE
+            else:
+                queryField.ExchangeID = qcvalueaddproapi.QCVD_EXD_SZSE
+            queryField.SecurityID = code
+            # queryField.PageCount = 10
+            queryField.PageLocate = 1
+            queryField.OrderType = qcvalueaddproapi.QCVD_ORDST_DESC
+
+            request_id = self.__create_request_id()
+            results = self.m_api.ReqReqQryStockDayQuotation(queryField, request_id)
+            for i in range(0, 1000):
+                if request_id in self.__result_cache:
+                    results = self.__result_cache[request_id]
+                    # 鏈�鏂扮殑澶嶆潈鍥犲瓙
+                    start_adjust_factor = None
+                    for i in range(0, len(results)):
+                        d = results[i]
+                        if not start_adjust_factor:
+                            start_adjust_factor = d["AdjustFactor"]
+                        # 澶嶆潈浠锋牸
+                        if start_adjust_factor != d["AdjustFactor"]:
+                            # 寮�濮嬪鏉�
+                            d["PreClosePrice"] = round(d["AdjustFactor"] * d["PreClosePrice"] / start_adjust_factor, 4)
+                            d["OpenPrice"] = round(d["AdjustFactor"] * d["OpenPrice"] / start_adjust_factor, 4)
+                            d["HighPrice"] = round(d["AdjustFactor"] * d["HighPrice"] / start_adjust_factor, 4)
+                            d["LowPrice"] = round(d["AdjustFactor"] * d["LowPrice"] / start_adjust_factor, 4)
+                            d["ClosePrice"] = round(d["AdjustFactor"] * d["ClosePrice"] / start_adjust_factor, 4)
+                    fresults = []
+                    for r in results:
+                        fresults.append({"sec_id": r["SecurityID"],
+                                         "open": r["TradingDay"],
+                                         "high": r["HighPrice"],
+                                         "low": r["LowPrice"],
+                                         "close": r["ClosePrice"],
+                                         "volume": r["Volume"],
+                                         "pre_close": r["PreClosePrice"],
+                                         "bob": f"{r['TradingDay'][:4]}-{r['TradingDay'][4:6]}-{r['TradingDay'][6:]} 00:00:00",
+                                         "amount": r["Turnover"]
+                                         })
+                    return fresults
+                time.sleep(0.002)
+            print("ReqReqQryStockDayQuotation:", results)
         except Exception as e:
             logging.exception(e)
 
@@ -66,7 +122,8 @@
         if (pRspInfo.ErrorID == 0):
             # 鐧诲綍鎴愬姛鍚庣洿鎺ユ煡璇�
             # self.ReqInquiryHistoryDelivery()
-            threading.Thread(target=lambda : print("浜ゆ槗鏃ュ巻锛�", self.queryTradeCalendar())).start()
+            # threading.Thread(target=lambda : print("浜ゆ槗鏃ュ巻锛�", self.queryTradeCalendar())).start()
+            threading.Thread(target=lambda: print("鏃锛�", self.queryBars())).start()
 
     def ReqQryGGTEODPrices(self):
         QryField = qcvalueaddproapi.CQCVDQryGGTEODPricesField()
@@ -77,6 +134,15 @@
         self.m_api.ReqQryInvestor(QryField, new_seqnum())
 
     def OnRspInquiryShareCalendar(self, pShareCalendar, pRspInfo, nRequestID, bIsPageLast, bIsTotalLast):
+        """
+        浜ゆ槗鏃ュ巻鍝嶅簲
+        @param pShareCalendar:
+        @param pRspInfo:
+        @param nRequestID:
+        @param bIsPageLast:
+        @param bIsTotalLast:
+        @return:
+        """
         if nRequestID not in self.__temp_cache:
             self.__temp_cache[nRequestID] = []
 
@@ -87,6 +153,35 @@
             self.__temp_cache.pop(nRequestID)
             print("OnRspInquiryShareCalendar:", self.__result_cache[nRequestID])
 
+    def OnRspInquiryStockDayQuotation(self, pStockDayQuotation, pRspInfo, nRequestID, bIsPageLast, bIsTotalLast):
+        """
+       鏃鍝嶅簲
+       @param pStockDayQuotation:
+       @param pRspInfo:
+       @param nRequestID:
+       @param bIsPageLast:
+       @param bIsTotalLast:
+       @return:
+       """
+        if nRequestID not in self.__temp_cache:
+            self.__temp_cache[nRequestID] = []
+
+        print("鏄惁鏈〉鏌ヨ瀹屾瘯锛�", bIsPageLast)
+
+        if not bIsPageLast:
+            self.__temp_cache[nRequestID].append({
+                "SecurityID": pStockDayQuotation.SecurityID, "TradingDay": pStockDayQuotation.TradingDay,
+                "AdjustFactor": pStockDayQuotation.AdjustFactor, "PreClosePrice": pStockDayQuotation.PreClosePrice,
+                "OpenPrice": pStockDayQuotation.OpenPrice, "HighPrice": pStockDayQuotation.HighPrice,
+                "LowPrice": pStockDayQuotation.LowPrice,
+                "ClosePrice": pStockDayQuotation.ClosePrice, "Volume": int(pStockDayQuotation.Volume * 100),
+                "Turnover": int(pStockDayQuotation.Turnover * 1000)
+            })
+        else:
+            self.__result_cache[nRequestID] = self.__temp_cache[nRequestID]
+            self.__temp_cache.pop(nRequestID)
+            print("OnRspInquiryStockDayQuotation:", len(self.__result_cache[nRequestID]))
+
 
 def main():
     # if (len(sys.argv)< 5):
diff --git a/servers/data_server.py b/servers/data_server.py
index 0ad6174..f12c0fb 100644
--- a/servers/data_server.py
+++ b/servers/data_server.py
@@ -361,6 +361,7 @@
                 code = ps_dict['code']
                 date = ps_dict.get('date')
                 time_str = ps_dict.get('time')
+                end_index = ps_dict.get('end_index')
                 total_datas = l2_data_util.local_today_datas.get(code)
                 if not total_datas:
                     total_datas = []
@@ -368,7 +369,7 @@
                     total_datas = None
                 else:
                     date = tool.get_now_date_str()
-                delegate_datas = data_export_util.get_l2_datas(code, total_datas, date=date)
+                delegate_datas = data_export_util.get_l2_datas(code, total_datas, date=date, end_index=end_index)
                 transaction_datas = data_export_util.get_l2_transaction_datas(code, date=date)
                 code_name = gpcode_manager.get_code_name(code)
                 response_data = json.dumps({"code": 0, "data": {"code": code, "code_name": code_name,
diff --git a/utils/buy_strategy_util.py b/utils/buy_strategy_util.py
index 545d09c..93c60d6 100644
--- a/utils/buy_strategy_util.py
+++ b/utils/buy_strategy_util.py
@@ -45,7 +45,7 @@
                         break
             continue
         # 涓庡綋鍓嶆椂闂寸浉宸�3s鐨勭粨鏉�
-        if tool.trade_time_sub_with_ms(end_time_with_ms, l2_data_util.L2DataUtil.get_time_with_ms(val)) > 6000:
+        if tool.trade_time_sub_with_ms(end_time_with_ms, l2_data_util.L2DataUtil.get_time_with_ms(val)) > 10000:
             break
 
         cancel_count += 1
diff --git a/utils/data_export_util.py b/utils/data_export_util.py
index 8e3137d..046716c 100644
--- a/utils/data_export_util.py
+++ b/utils/data_export_util.py
@@ -1,6 +1,7 @@
 """
 鏁版嵁瀵煎嚭宸ュ叿
 """
+import copy
 import json
 import logging
 import os
@@ -13,7 +14,7 @@
 import l2.l2_data_util
 from l2.huaxin import l2_huaxin_util
 from log_module import log, log_export
-from l2 import l2_data_source_util
+from l2 import l2_data_source_util, l2_data_util
 from log_module.log import logger_debug
 from trade import deal_big_money_manager
 from utils import tool
@@ -29,7 +30,7 @@
 
 
 # 鑾峰彇L2鐨勬暟鎹�
-def get_l2_datas(code, today_datas=None, date=None, max_time=None):
+def get_l2_datas(code, today_datas=None, date=None, end_index=None):
     __start_time = time.time()
     if date is None:
         date = tool.get_now_date_str()
@@ -66,6 +67,14 @@
     active_sell_set = active_sell_map.get(code)
     if not active_sell_set:
         active_sell_set = set()
+    # 濡傛灉鏈夋埅鑷充綅缃�
+    if end_index:
+        datas = copy.deepcopy(datas)
+        for i in range(len(datas)):
+            if datas[i]["index"] == end_index:
+                datas = datas[:i]
+                break
+
     fdatas = export_l2_data(code, datas, process_indexs, trade_indexs, real_position_indexes, deal_list_dict, sell_nos,
                             active_sell_set, cancel_reasons)
     return fdatas
@@ -93,6 +102,11 @@
             if trade_indexs[i][1] == index:
                 return trade_indexs[i]
         return None
+
+    # 鏈�鏂扮殑涓�鏉℃暟鎹�
+    latest_data = datas[-1]
+    latest_time_str_with_ms = l2.l2_data_util.L2DataUtil.get_time_with_ms(latest_data["val"])
+
 
     # 鏁版嵁棰勫鐞�
     num_operate_map = {}
@@ -200,7 +214,8 @@
         if int(data["val"]["operateType"]) == 0:
             cancel_data = l2.l2_data_util.local_today_canceled_buyno_map.get(code).get(str(data["val"]["orderNo"]))
             # 涔�
-            if cancel_data:
+            if cancel_data and latest_data["index"] >= cancel_data["index"]:
+                # 濡傛灉鎾ゅ崟绱㈠紩涓嶈兘姣旀渶杩戞暟鎹储寮曡繕澶�
                 try:
                     left_num = data["val"]["num"] - cancel_data["val"]["num"]
                     if left_num > 0:
@@ -213,8 +228,10 @@
             else:
                 deal_info = deal_list_dict.get(str(data["val"].get("orderNo")))
                 if deal_info and len(deal_info) >= 5:
-                    cancel_info = l2_huaxin_util.convert_time(deal_info[4],
-                                                              with_ms=True)
+                    # 鎴愪氦鏃堕棿涓嶈兘姣斿綋鍓嶇储寮曟椂闂村ぇ
+                    if tool.trade_time_sub_with_ms(cancel_info , latest_time_str_with_ms) <= 0:
+                        cancel_info = l2_huaxin_util.convert_time(deal_info[4],
+                                                                  with_ms=True)
         format_data.append(cancel_info)
         cancel_order_info = None
         if trade_info:

--
Gitblit v1.8.0