| | |
| | | import json |
| | | import logging |
| | | import threading |
| | | |
| | | 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 |
| | | from strategy import strategy_params_settings, env_info |
| | | from strategy.env_info import RealTimeEnvInfo |
| | | from strategy.strategy_variable_factory import DataLoader |
| | | from third_data.history_k_data_manager import TradeDateManager |
| | | from utils import socket_util, middle_api_protocol, tool |
| | | |
| | | |
| | | class MyAPICallback(ActionCallback): |
| | |
| | | @return: |
| | | """ |
| | | result = strategy_params_settings.settings.to_json_str() |
| | | return json.dumps({"code": 0, "data": result}) |
| | | return {"code": 0, "data": result} |
| | | |
| | | def __on_get_env(self): |
| | | """ |
| | | è·åç¯å¢ä¿¡æ¯ |
| | | @return: |
| | | """ |
| | | return json.dumps({"code": 0, "data": {}, "msg": "æµè¯ç»æ"}) |
| | | fdata = {} |
| | | # 宿¶æ°æ® |
| | | fdata["real_time_data"] = RealTimeEnvInfo().to_dict() |
| | | # å岿°æ® |
| | | fdata["history_data"] = {} |
| | | if tool.get_now_time_str() < '16:00:00': |
| | | # 妿å¨16:00ä¹åéç¨å½åæ¥æ |
| | | day = tool.get_now_date_str() |
| | | else: |
| | | # 妿å¨16:00ä¹åéç¨ä¸ä¸ä¸ªäº¤ææ¥ |
| | | day = TradeDateManager().get_next_trade_day(tool.get_now_date_str()) |
| | | fdata["history_data"]["leading_limit_up_block_codes_count"] = env_info.get_leading_limit_up_block_codes_count( |
| | | day) |
| | | |
| | | if tool.get_now_time_str() < '16:00:00': |
| | | # 妿å¨16:00ä¹åéç¨å½åæ¥æ |
| | | day = TradeDateManager().get_previous_trade_day(tool.get_now_date_str()) |
| | | else: |
| | | # 妿å¨16:00ä¹åéç¨ä¸ä¸ä¸ªäº¤ææ¥ |
| | | day = tool.get_now_date_str() |
| | | fdata["history_data"]["k_bars_count"] = env_info.get_history_k_bars(day) |
| | | return {"code": 0, "data": fdata, "msg": "æµè¯ç»æ"} |
| | | |
| | | def __on_update_leading_limit_up_datas(self): |
| | | """ |
| | | æ´æ°é¢æ¶¨ä»£ç ä¿¡æ¯ |
| | | @return: |
| | | """ |
| | | |
| | | def update(): |
| | | plates = __DataLoader.get_limit_up_reasons_with_plate_code() |
| | | for p in plates: |
| | | print(p) |
| | | __DataLoader.load_plate_codes(p[0], p[1]) |
| | | |
| | | if tool.get_now_time_str() < '16:00:00': |
| | | # 妿å¨16:00ä¹åéç¨å½åæ¥æ |
| | | day = tool.get_now_date_str() |
| | | else: |
| | | # 妿å¨16:00ä¹åéç¨ä¸ä¸ä¸ªäº¤ææ¥ |
| | | day = TradeDateManager().get_next_trade_day(tool.get_now_date_str()) |
| | | __DataLoader = DataLoader(day) |
| | | threading.Thread(target=lambda: update(), daemon=True).start() |
| | | return {"code": 0} |
| | | |
| | | def OnCommonRequest(self, client_id, request_id, data): |
| | | ctype = data["ctype"] |
| | | result_str = '' |
| | | result_json = {} |
| | | if ctype == "get_settings": |
| | | result_str = self.__on_get_settings() |
| | | result_json = self.__on_get_settings() |
| | | elif ctype == 'get_env': |
| | | result_str = self.__on_get_env() |
| | | |
| | | self.send_response(result_str, client_id, request_id) |
| | | result_json = self.__on_get_env() |
| | | elif ctype == 'update_leading_limit_up_datas': |
| | | result_json = self.__on_update_leading_limit_up_datas() |
| | | self.send_response(result_json, client_id, request_id) |
| | |
| | | """ |
| | | ç¯å¢ä¿¡æ¯ |
| | | """ |
| | | import json |
| | | |
| | | from strategy.strategy_variable_factory import DataLoader |
| | | from third_data.history_k_data_manager import HistoryKDataManager |
| | | from utils import tool |
| | |
| | | # Tickæ°æ®(æ´æ°æ¶é´, æ°æ®æ°é) |
| | | self.ticks = ('', 0) |
| | | |
| | | def to_dict(self): |
| | | d = self.__dict__ |
| | | return d |
| | | |
| | | @classmethod |
| | | def to_obj(cls, json_str): |
| | | result = json.loads(json_str) |
| | | obj = RealTimeEnvInfo() |
| | | for k in result: |
| | | setattr(obj, k, result[k]) |
| | | return obj |
| | | |
| | | |
| | | def get_leading_limit_up_block_codes_count(day): |
| | | """ |
| | |
| | | # æ¯å¦å¯ä¹°ä»æ¥æ¶¨åè¿ç票 |
| | | self.can_buy_limited_up = False |
| | | # æä½å¼ç涨å¹
|
| | | self.min_open_rate = -0.02 |
| | | self.min_open_rate = -0.21 |
| | | # å¯ä¹°ç涨å¹
æ¯ä¾ |
| | | self.avaiable_rates = (-0.03, 0.07) |
| | | # 仿¥æ¶¨åä»·éçªç ´XXæ¥æé«ä»·,Noneè¡¨ç¤ºæ¤æ¡æ°æ®ä¸çæ |
| | |
| | | """ |
| | | datas = self.load_all_codes_of_plates(is_for_buy=True) |
| | | fdata = {} |
| | | if not datas: |
| | | return fdata |
| | | for plate_code in datas: |
| | | plate_name = datas[plate_code][0] |
| | | codes_info = datas[plate_code][1] |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | print("======2个票涨åä¹åä¹°") |
| | | statistic_average(r"C:\Users\Administrator\Desktop\2个票涨åä¹åä¹°.txt") |
| | | print("======3个票涨åä¹åä¹°") |
| | | print("======3个票涨åä¹åä¹°+å¼çä»·>=-3") |
| | | statistic_average(r"C:\Users\Administrator\Desktop\3个票涨åä¹åä¹°.txt") |
| | | print("======4个票涨åä¹åä¹°") |
| | | statistic_average(r"C:\Users\Administrator\Desktop\4个票涨åä¹åä¹°.txt") |
| | | print("======3个票涨åä¹åä¹°+å¼çä»·>=-2") |
| | | statistic_average(r"C:\Users\Administrator\Desktop\3个票涨åä¹åä¹°_å¼ç涨å¹
-2以ä¸.txt") |
| | | |
| | |
| | | if __name__ == "__main__": |
| | | back_test_dict = {} |
| | | # 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"] |
| | | # "2025-05-15", "2025-05-16", "2025-05-19", "2025-05-20"] |
| | | 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-06-09"] |
| | |
| | | |
| | | limit_up_codes_count = max([(p, len(sv.å¼çå¦ææ£æ¿å涨å.get(p, []))) for p in can_buy_plates], key=lambda x: x[1])[1] |
| | | |
| | | threshold_money *= max(10 - limit_up_codes_count + 1, 5)/10 |
| | | threshold_money *= max(min(10 - limit_up_codes_count + 3, 10), 5)/10 |
| | | |
| | | # print(target_code, sv.èªç±æµéå¸å¼, threshold_money, limit_up_codes_count) |
| | | |
| | |
| | | from huaxin_client import l1_subscript_codes_manager |
| | | from log_module.log import logger_debug |
| | | from third_data import history_k_data_util |
| | | from third_data.history_k_data_util import HistoryKDatasUtils |
| | | from utils import tool, init_data_util |
| | | |
| | | |
| | |
| | | return codes |
| | | |
| | | |
| | | @tool.singleton |
| | | class TradeDateManager: |
| | | # {"æ¥æ":æ¥æå表} |
| | | __date_list_dict = {} |
| | | """ |
| | | äº¤ææ¥æç®¡ç |
| | | """ |
| | | |
| | | def __load_dates(self, now_day): |
| | | if self.__date_list_dict.get(now_day): |
| | | return |
| | | # è·åååä¸ä¸ªæçäº¤ææ¥æ |
| | | start_date = tool.date_sub(now_day, 30) |
| | | end_date = tool.date_sub(now_day, -30) |
| | | dates = HistoryKDatasUtils.get_trading_dates(start_date, end_date) |
| | | self.__date_list_dict[now_day] = dates |
| | | |
| | | def get_next_trade_day(self, now_day): |
| | | """ |
| | | è·åä¸ä¸ä¸ªäº¤ææ¥ |
| | | @param now_day: |
| | | @return: |
| | | """ |
| | | self.__load_dates(now_day) |
| | | for day in self.__date_list_dict[now_day]: |
| | | if day > now_day: |
| | | return day |
| | | return None |
| | | |
| | | def get_previous_trade_day(self, now_day): |
| | | """ |
| | | è·åä¸ä¸ä¸ªäº¤ææ¥ |
| | | @param now_day: |
| | | @return: |
| | | """ |
| | | self.__load_dates(now_day) |
| | | for day in reversed(self.__date_list_dict[now_day]): |
| | | if day < now_day: |
| | | return day |
| | | return None |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | print(HistoryKDataManager().get_history_bars_codes("2024-12-31")) |
| | | print(TradeDateManager().get_next_trade_day("2025-06-09")) |
| | | print(TradeDateManager().get_previous_trade_day("2025-06-09")) |
| | |
| | | |
| | | @classmethod |
| | | def get_trading_dates(cls, start_date, end_date): |
| | | return hx_qc_value_util.get_trade_calendar(start_date, end_date) |
| | | if constant.is_windows(): |
| | | return JueJinApi.get_trading_dates(start_date, end_date) |
| | | else: |
| | | return hx_qc_value_util.get_trade_calendar(start_date, end_date) |
| | | |
| | | @classmethod |
| | | def get_now_price(cls, codes): |