From d475991a9d0abc94edfb3a5d9761df8bed8b4fc4 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 10 七月 2024 17:03:55 +0800
Subject: [PATCH] 想买单策略修改

---
 main.py |   48 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/main.py b/main.py
index 47b883c..875f35f 100644
--- a/main.py
+++ b/main.py
@@ -9,6 +9,7 @@
 import time
 
 from code_attribute import target_codes_manager, gpcode_manager, code_market_manager, history_k_data_util
+from code_attribute.gpcode_manager import CodesNameManager
 from db.redis_manager_delegate import RedisUtils
 from huaxin_client import l2_client_for_cb
 from huaxin_client.client_network import SendResponseSkManager
@@ -16,9 +17,10 @@
 from records import huaxin_trade_record_manager
 from third_data import kpl_data_manager, kpl_util
 from third_data.kpl_data_manager import PullTask, KPLCodeJXBlockManager, KPLLimitUpDataRecordManager
-from trade import huaxin_trade_api, huaxin_trade_data_update, huaxin_sell_util, backtest_trade
+from trade import huaxin_trade_api, huaxin_trade_data_update, huaxin_sell_util, backtest_trade, buy_strategy
 from trade.buy_strategy import BuyStrategyDataManager
 from trade.trade_manager import CodeTradeStateManager
+from trade.trade_settings import WantBuyCodesManager, TradeStateManager
 from utils import middle_api_protocol, outside_api_command_manager, constant, tool, huaxin_util, socket_util, sell_util, \
     output_util, l2_huaxin_util, output_data_util
 
@@ -215,7 +217,7 @@
                         volume = sum([x["volume"] for x in temp_dict[k]])
                         x = temp_dict[k][0]
                         r["buy_list"].append({"price": str(x["price"]), "tradeTime": x["tradeTime"], "volume": volume})
-                    r["createTime"] = int(buys[-1]["tradeTime"].replace(":", ""))
+                    r["createTime"] = int(buys[0]["tradeTime"].replace(":", ""))
 
                 if "sell_list" not in r:
                     sells = huaxin_trade_record_manager.DealRecordManager().list_sell_by_code_cache(cb_code)
@@ -270,6 +272,41 @@
                 send_response({"code": 0, "data": {}}, client_id, request_id)
             except Exception as e:
                 send_response({"code": 0, "data": {}, "msg": str(e)}, client_id, request_id)
+        elif ctype == "want_buy_codes":
+            try:
+                operate = data["operate"]
+                if operate == outside_api_command_manager.OPERRATE_ADD:
+                    code = data["code"]
+                    WantBuyCodesManager().add_code(code, buy_strategy.STRATEGY_TYPE_LIMIT_UP)
+                    WantBuyCodesManager().add_code(code, buy_strategy.STRATEGY_TYPE_RISE_HIGH_WITH_BLOCKS)
+                    send_response({"code": 0, "data": {}}, client_id, request_id)
+                elif operate == outside_api_command_manager.OPERRATE_GET:
+                    code_infos = WantBuyCodesManager().list_code()
+                    codes = set([x.split("-")[0] for x in code_infos])
+                    code_infos = [(x, CodesNameManager.get_code_name(x)) for x in codes]
+                    send_response({"code": 0, "data": code_infos}, client_id, request_id)
+                elif operate == outside_api_command_manager.OPERRATE_DELETE:
+                    code = data["code"]
+                    WantBuyCodesManager().remove_code(code, buy_strategy.STRATEGY_TYPE_LIMIT_UP)
+                    WantBuyCodesManager().remove_code(code, buy_strategy.STRATEGY_TYPE_RISE_HIGH_WITH_BLOCKS)
+                    send_response({"code": 0, "data": {}}, client_id, request_id)
+            except Exception as e:
+                send_response({"code": 1, "msg": str(e)}, client_id, request_id)
+        elif ctype == "trade_state":
+            try:
+                operate = data["operate"]
+                if operate == outside_api_command_manager.OPERRATE_SET:
+                    state = data["state"]
+                    if state > 0:
+                        TradeStateManager().open_buy()
+                    else:
+                        TradeStateManager().close_buy()
+                    send_response({"code": 0, "data": {}}, client_id, request_id)
+                elif operate == outside_api_command_manager.OPERRATE_GET:
+                    state = 1 if TradeStateManager().is_can_buy() else 0
+                    send_response({"code": 0, "data": {"state": state}}, client_id, request_id)
+            except Exception as e:
+                send_response({"code": 1, "msg": str(e)}, client_id, request_id)
 
 
 def test():
@@ -302,12 +339,15 @@
                 buy_infos = result[3]
                 for buy_info in buy_infos:
                     if buy_info[0]:
+                        if not TradeStateManager().is_can_buy():
+                            continue
                         # 绛栫暐绫诲瀷
                         strategy_type = buy_info[1]
                         # 鑾峰彇鑲$エ浠g爜鐨勫彲杞�轰唬鐮�
                         cb_code = target_codes_manager.get_cb_code(code)
                         if CodeTradeStateManager().get_trade_state(cb_code,
-                                                                   strategy_type) == CodeTradeStateManager.TRADE_STATE_ALREADY_BUY:
+                                                                   strategy_type) == CodeTradeStateManager.TRADE_STATE_ALREADY_BUY and not WantBuyCodesManager().is_in_cache(cb_code, strategy_type):
+                            # 宸茬粡涔颁簡涓旀病鍦ㄦ兂涔板崟
                             continue
                         # 鑾峰彇鍙浆鍊虹殑娑ㄥ仠浠�
                         market_info = code_market_manager.get_market_info(cb_code)
@@ -325,6 +365,8 @@
                             result = huaxin_trade_api.order(1, cb_code, volume, buy_price, blocking=True)
                             CodeTradeStateManager().set_trade_state(cb_code, strategy_type,
                                                                     CodeTradeStateManager.TRADE_STATE_ALREADY_BUY)
+                            # 绉婚櫎鎯充拱鍗�
+                            WantBuyCodesManager().remove_code(cb_code, strategy_type)
                             async_log_util.info(logger_trade, f"鍙浆鍊轰笅鍗曠粨鏋滐細{result}")
                             huaxin_trade_data_update.add_position_list()
                             huaxin_trade_data_update.add_money_list()

--
Gitblit v1.8.0