New file |
| | |
| | | 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) |
| | |
| | | |
| | | |
| | | 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 |
| | | |
| | |
| | | |
| | | 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(): |
| | |
| | | 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() |
| | | # --------启动交易---------- |
| | |
| | | """ |
| | | import json |
| | | |
| | | |
| | | class StrategyParamsSettings: |
| | | # 禁止买入 |
| | | STATE_FORBIDDEN_BUY = 0 |
| | |
| | | # 价格区间 |
| | | 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 |
| | | # 昨日不能跌停 |
| | |
| | | # 是否可买今日涨停过的票 |
| | | 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表示此条数据不生效 |
| | |
| | | return obj |
| | | |
| | | |
| | | settings: StrategyParamsSettings = StrategyParamsSettings() |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | __DataLoader = DataLoader("2025-06-05") |
| | | __DataLoader = DataLoader("2025-06-09") |
| | | # __test_jx_blocks(__DataLoader) |
| | | |
| | | # instance = StockVariables() |
| | |
| | | # print(result_dict["301279"]) |
| | | |
| | | results = __DataLoader.load_target_plate_and_codes() |
| | | plates = ["有色金属"] |
| | | plates = ["医药"] |
| | | print("==========新题材=======") |
| | | for p in plates: |
| | | print(p, results.get(p)) |
| | |
| | | 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 |
| | |
| | | # days = ["2025-05-06", "2025-05-07", "2025-05-08", "2025-05-09", "2025-05-12", "2025-05-13", "2025-05-14", |
| | | # "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-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-06-09"] |
| | | days.reverse() |
| | | for day in days: |
| | | if day not in back_test_dict: |