Administrator
2025-06-09 2c0cd33754ca012a24438b0b1d01229242079aca
功能完善
5个文件已修改
1个文件已添加
142 ■■■■ 已修改文件
api/outside_api_callback.py 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/outside_api_command_manager.py 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/strategy_params_settings.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/strategy_variable_factory.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/time_series_backtest.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/outside_api_callback.py
New file
@@ -0,0 +1,60 @@
import json
import logging
from api.outside_api_command_manager import ActionCallback
from huaxin_client.client_network import SendResponseSkManager
from strategy import strategy_params_settings
from utils import socket_util, middle_api_protocol
class MyAPICallback(ActionCallback):
    @classmethod
    def __send_response(cls, data_bytes):
        sk = SendResponseSkManager.create_send_response_sk(addr=middle_api_protocol.SERVER_HOST,
                                                           port=middle_api_protocol.SERVER_PORT)
        try:
            data_bytes = socket_util.load_header(data_bytes)
            sk.sendall(data_bytes)
            result, header_str = socket_util.recv_data(sk)
            result = json.loads(result)
            if result["code"] != 0:
                raise Exception(result['msg'])
        finally:
            sk.close()
    def send_response(self, data, _client_id, _request_id):
        data_bytes = json.dumps({"type": "response", "data": data, "client_id": _client_id,
                                 "request_id": _request_id}).encode('utf-8')
        for i in range(3):
            try:
                self.__send_response(data_bytes)
                # print("发送数据成功")
                break
            except Exception as e1:
                logging.exception(e1)
    def __on_get_settings(self):
        """
        获取交易参数
        @return:
        """
        result = strategy_params_settings.settings.to_json_str()
        return json.dumps({"code": 0, "data": result})
    def __on_get_env(self):
        """
        获取环境信息
        @return:
        """
        return json.dumps({"code": 0, "data": {}, "msg": "测试结果"})
    def OnCommonRequest(self, client_id, request_id, data):
        ctype = data["ctype"]
        result_str = ''
        if ctype == "get_settings":
            result_str = self.__on_get_settings()
        elif ctype == 'get_env':
            result_str = self.__on_get_env()
        self.send_response(result_str, client_id, request_id)
api/outside_api_command_manager.py
@@ -66,63 +66,6 @@
class ActionCallback(object):
    # 交易
    def OnTrade(self, client_id, request_id, data):
        pass
    # 交易状态
    def OnTradeState(self, client_id, request_id, data):
        pass
    # 交易模式
    def OnTradeMode(self, client_id, request_id, data):
        pass
    # 卖出规则
    def OnSellRule(self, client_id, request_id, data):
        pass
    # 代码名单
    def OnCodeList(self, client_id, request_id, data):
        pass
    def OnExportL2(self, client_id, request_id, data):
        pass
    def OnEveryDayInit(self, client_id, request_id, data):
        pass
    def OnRefreshTradeData(self, client_id, request_id, data):
        pass
    def OnGetCodeAttribute(self, client_id, request_id, data):
        pass
    def OnGetCodeTradeState(self, client_id, request_id, data):
        pass
    def OnGetEnvInfo(self, client_id, request_id, data):
        pass
    def OnSyncL2SubscriptCodes(self, client_id, request_id):
        pass
    def OnGetFromDataServer(self, client_id, request_id, data):
        pass
    # 代码的交易信息
    def OnGetCodeTradeInfo(self, client_id, request_id, data):
        pass
    def OnGetActiveListenCount(self, client_id, request_id):
        pass
    def OnSaveRunningData(self, client_id, request_id):
        pass
    def OnGetCodePositionInfo(self, client_id, request_id, data):
        pass
    def OnCommonRequest(self, client_id, request_id, data):
        pass
main.py
@@ -5,13 +5,15 @@
import requests
from api import outside_api_callback
from api.outside_api_command_manager import ApiCommandManager
from huaxin_client import l2_market_client, trade_client
from log_module.log import logger_debug
from server import data_server
from strategy.env_info import RealTimeEnvInfo
from third_data import hx_qc_value_util
from trade.huaxin import huaxin_trade_api
from utils import tool
from utils import tool, middle_api_protocol
def __run_l2_market_subscript():
@@ -47,6 +49,11 @@
if __name__ == "__main__":
    # -----启动data_server-----
    threading.Thread(target=lambda: data_server.run("127.0.0.1", 9008), daemon=True).start()
    # --------启动本地API接口----------
    manager = ApiCommandManager(middle_api_protocol.SERVER_HOST, middle_api_protocol.SERVER_PORT, outside_api_callback.MyAPICallback())
    manager.run(blocking=False)
    # -------启动华鑫增值服务api------
    threading.Thread(target=hx_qc_value_util.run, daemon=True).start()
    # --------启动交易----------
strategy/strategy_params_settings.py
@@ -3,7 +3,6 @@
"""
import json
class StrategyParamsSettings:
    # 禁止买入
    STATE_FORBIDDEN_BUY = 0
@@ -18,9 +17,9 @@
        # 价格区间
        self.price_range = (3, 60)
        # 老题材涨停数
        self.limit_up_count_of_old_plate = 4
        self.limit_up_count_of_old_plate = 3
        # 新题材涨停数
        self.limit_up_count_of_new_plate = 4
        self.limit_up_count_of_new_plate = 3
        # 昨日不能涨停
        self.cant_yesterday_limit_up = True
        # 昨日不能跌停
@@ -50,7 +49,7 @@
        # 是否可买今日涨停过的票
        self.can_buy_limited_up = False
        # 最低开盘涨幅
        self.min_open_rate = -0.03
        self.min_open_rate = -0.02
        # 可买的涨幅比例
        self.avaiable_rates = (-0.03, 0.07)
        # 今日涨停价需突破XX日最高价,None表示此条数据不生效
@@ -73,3 +72,4 @@
        return obj
settings: StrategyParamsSettings = StrategyParamsSettings()
strategy/strategy_variable_factory.py
@@ -628,7 +628,7 @@
if __name__ == "__main__":
    __DataLoader = DataLoader("2025-06-05")
    __DataLoader = DataLoader("2025-06-09")
    # __test_jx_blocks(__DataLoader)
    # instance = StockVariables()
@@ -644,7 +644,7 @@
    # print(result_dict["301279"])
    results = __DataLoader.load_target_plate_and_codes()
    plates = ["有色金属"]
    plates = ["医药"]
    print("==========新题材=======")
    for p in plates:
        print(p, results.get(p))
strategy/time_series_backtest.py
@@ -766,7 +766,7 @@
            stock_variables.板块成交代码 = self.deal_block_codes
# DEBUG_CODES = ['002194', '002583', '603083', '002130', '002436']
# DEBUG_CODES = ['002365', '000953', '002907', '002688', '003020', '002900', '002082', '000566', '300204', '002317']
DEBUG_CODES = []
VOLUME_LOG_ENABLE = False
@@ -783,7 +783,7 @@
    #         "2025-05-15", "2025-05-16"]
    days = ["2025-05-12", "2025-05-13", "2025-05-14", "2025-05-15", "2025-05-16", "2025-05-19", "2025-05-20",
            "2025-05-21", "2025-05-22","2025-05-23", "2025-05-26", "2025-05-27", "2025-05-28", "2025-05-29",
            "2025-05-30", "2025-06-03", "2025-06-04", "2025-06-05", "2025-06-06"]
            "2025-05-30", "2025-06-03", "2025-06-04", "2025-06-05", "2025-06-06", "2025-06-09"]
    days.reverse()
    for day in days:
        if day not in back_test_dict: