From 70b51a2636858fb8cfbf39d3764d88d07286d8ad Mon Sep 17 00:00:00 2001 From: admin <admin@example.com> Date: 星期二, 08 四月 2025 11:27:42 +0800 Subject: [PATCH] 增加并行数量 --- strategy/kpl_api.py | 435 ++++++++++++++++++++++++++++------------------------- 1 files changed, 229 insertions(+), 206 deletions(-) diff --git a/strategy/kpl_api.py b/strategy/kpl_api.py index faed30b..cd91466 100644 --- a/strategy/kpl_api.py +++ b/strategy/kpl_api.py @@ -2,20 +2,26 @@ kpl API鏁版嵁鑾峰彇涓庡鐞� """ import json +import os.path import time import datetime +import dask import requests +import constant +from log_module import async_log_util +from log_module.log import logger_common, logger_kpl_jingxuan_in, logger_Overall_market_strength_score, \ + logger_stock_of_markets_plate, logger_debug # import requests from strategy import data_cache from strategy import basic_methods - -from strategy.logging_config import get_logger -from utils import hx_qc_value_util +from strategy.kpl_data_manager import KPLStockOfMarketsPlateLogManager +from trade import middle_api_protocol +from utils import hx_qc_value_util, tool # 鑾峰彇logger瀹炰緥 -logger = get_logger() +logger = logger_common now = time.time() print(f"kpl_api寮�濮嬭繍琛�--{now}") @@ -32,17 +38,23 @@ DABAN_TYPE_EVER_LIMIT_DOWN = 5 -def __base_request(url, data): - headers = { - "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", - "User-Agent": "Dalvik / 2.1.0(Linux;U;Android 6.0.1;MuMu Build/V417IR)" - } - # proxies={'https': '192.168.3.251:9002'} - # 绂佹浠g悊锛屼笉鐒朵細璧版湰鍦颁唬鐞� - response = requests.post(url, data=data, headers=headers, proxies={"http": None, "https": None}) - if response.status_code != 200: - raise Exception("璇锋眰鍑洪敊") - return response.text +def __base_request(url, data, timeout=10): + DELEGATE = True + if not DELEGATE: + headers = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "User-Agent": "Dalvik / 2.1.0(Linux;U;Android 6.0.1;MuMu Build/V417IR)" + } + # proxies={'https': '192.168.3.251:9002'} + # 绂佹浠g悊锛屼笉鐒朵細璧版湰鍦颁唬鐞� + response = requests.post(url, data=data, headers=headers, proxies={"http": None, "https": None}, + timeout=timeout) + if response.status_code != 200: + raise Exception("璇锋眰鍑洪敊") + return response.text + else: + fdata = middle_api_protocol.load_kpl(url, data, timeout) + return middle_api_protocol.request(fdata) def daBanList(pidType): @@ -109,7 +121,6 @@ return __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data) - # 鑾峰彇姒傚康涓殑鏉垮潡涓殑瀛愭澘鍧� def getSonPlate(plate_code): data = f"a=SonPlate_Info&apiv=w32&c=ZhiShuRanking&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&PlateID={plate_code}&" @@ -174,88 +185,149 @@ return json.dumps({"errcode": 0, "list": fresults}) -# if __name__ == "__main__": -# print(f"鎵撴澘鍒楄〃t(pidType)====={daBanList(2)}") -# print(f"鑾峰彇涓偂浠g爜鐨勬澘鍧�==={getStockIDPlate('002766')}") -# print((f"鑾峰彇涓偂浠g爜鐨勭簿閫夋澘鍧�==={getCodeJingXuanBlocks('002878')}")) -# print(f"鑾峰彇璇ユ蹇典笅鐨勪釜鑲′唬鐮佸強鍏朵粬====={getCodesByPlate(885500)}") 銆娿�娿�娿�娿�娿�娿�娿�娿�娿�� -# print(f"鑾峰彇姒傚康涓殑鏉垮潡涓殑瀛愭澘鍧�====={json.loads(getSonPlate(801085))}") +# 鑾峰彇娑ㄥ仠淇℃伅鏁版嵁 +def get_limit_up_info(): + # 鑾峰彇娑ㄥ仠淇℃伅鍒楄〃 + limit_up_info = json.loads(getLimitUpInfoNew())['list'] + return limit_up_info -# print(f"鑾峰彇姒傚康涓殑鏉垮潡寮哄害====={getSonPlate(getCodesByPlate(getCodeJingXuanBlocks('002452')[2][0]))}") -# print(f"甯傚満琛屾儏-琛屼笟鏉垮潡 鏁�==={len(getMarketIndustryRealRankingInfo(True))}") -# print(f"甯傚満琛屾儏-琛屼笟鏉垮潡==={json.loads(getMarketIndustryRealRankingInfo(True))}") -# 杩斿洖鏍煎紡锛歔'鏉垮潡ID','鏉垮潡鍚嶇О','寮哄害','娑ㄥ箙','鏈煡','鎴愪氦棰�','''''''''寮哄害','鏈煡'] -# print(f"甯傚満琛屾儏-绮鹃�夋澘鍧� 鏁�==={getMarketJingXuanRealRankingInfo(True)}") -# print(f"甯傚満琛屾儏-绮鹃�夋澘鍧�==={json.loads(getMarketJingXuanRealRankingInfo(True))}") -# print(f"鑲$エ浠g爜锛歿Market_situation_selected_sectors_No1[0]}") -# jingxuanbankuai = json.loads(getMarketJingXuanRealRankingInfo(True)) -# print(f"jingxuanbankuai==={type(jingxuanbankuai)}") -# print(f"鏉垮潡浠g爜锛歿jingxuanbankuai['list'][0][0]}锛屾澘鍧楀悕绉帮細{jingxuanbankuai['list'][0][1]}锛屽己搴︼細{jingxuanbankuai['list'][0][2]}锛屾定骞咃細{jingxuanbankuai['list'][0][3]}锛屾湭鐭ワ細{jingxuanbankuai['list'][0][4]}锛屾垚浜ら锛歿round(jingxuanbankuai['list'][0][5]/100000000)}浜匡紝涓诲姏鍑�棰濓細{round(jingxuanbankuai['list'][0][6]/100000000,2)}浜匡紝涓讳拱锛歿round(jingxuanbankuai['list'][0][7]/100000000,2)}浜匡紝涓诲崠锛歿round(jingxuanbankuai['list'][0][8]/100000000,2)}浜匡紝鏈煡锛歿jingxuanbankuai['list'][0][9]}锛屾祦閫氬�硷細{round(jingxuanbankuai['list'][0][10]/100000000,2)}浜匡紝鏈煡/鎴栦负鏈�澶ф定璺屽箙锛歿round(jingxuanbankuai['list'][0][11],2)}锛屾湭鐭ワ細{round(jingxuanbankuai['list'][0][12]/100000000,2)}浜匡紝鎬诲競鍊硷細{round(jingxuanbankuai['list'][0][13]/100000000,2)}浜匡紝绗竴瀛e害鏈烘瀯鎸佷粨锛歿round(jingxuanbankuai['list'][0][14]/100000000,2)}浜匡紝鏈煡锛歿round(jingxuanbankuai['list'][0][15],2)}锛屾湭鐭ワ細{round(jingxuanbankuai['list'][0][16],2)}锛屽己搴︼細{round(jingxuanbankuai['list'][0][17],2)}") -# # 閮ㄥ垎鏉垮潡娌℃湁瀛愭澘鍧� -# print(f"鑾峰彇姒傚康涓殑鏉垮潡涓殑瀛愭澘鍧�====={json.loads(getSonPlate(801248))}") +# 鑾峰彇甯傚満鎯呯华缁煎悎寮哄害銆愬畬鏁淬�� +def changeStatistics(): + """ + 鑾峰彇甯傚満寮哄害 + :return: + """ + result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php", + f"a=ChangeStatistics&apiv=w35&c=HomeDingPan&PhoneOSNew=1&UserID=0&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9774&VerSion=5.13.0.0&Token=0&") + # data = result.text + data = json.loads(result) + return data["info"][0] -# print(f"鑷敱娴侀�氬競鍊�==={getZYLTAmount('603319')}") -# print((f"鑾峰彇涓偂浠g爜鐨勭簿閫夋澘鍧楀垪琛�==={getCodeJingXuanBlocks('002452')}")) -# print((f"鑾峰彇涓偂浠g爜鐨勭簿閫夌涓�鏉垮潡浠g爜==={getCodeJingXuanBlocks('002452')[0][0]}")) -# print(f"鑾峰彇璇ユ蹇典笅鐨勪釜鑲′唬鐮佸強鍏朵粬====={json.loads(getCodesByPlate(getCodeJingXuanBlocks('002452')[0][0]))}") -# print(f"鑾峰彇璇ユ蹇典笅鐨勪釜鑲′唬鐮佸強鍏朵粬dddddd====={json.loads(its_strongest_sector_situation)}") -# print(f"娑ㄥ仠鍒楄〃鍙婃蹇垫澘鍧�={json.loads(getLimitUpInfoNew())['list']}") -######################################################################################################################################################################################################################## +# 鑾峰彇甯傚満鎯呯华缁煎悎寮哄害 +def get_market_strong(): + """ + 鑾峰彇甯傚満寮哄害 + :return: + """ + result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php", + f"a=DiskReview&apiv=w35&c=HomeDingPan&VerSion=5.13.0.0&PhoneOSNew=1&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9773&") + data = json.loads(result) + return int(data["info"]["strong"]) + + +# 甯傚満鎯呯华--娑ㄨ穼缁熻 +# 鏁版嵁鏍煎紡锛� +# SJZT:瀹為檯娑ㄥ仠 SJDT:瀹為檯璺屽仠 SZJS:娑ㄦ暟閲� ZT:娑ㄥ仠 DT:璺屽仠 XDJS:璺屾暟閲� sign:浜烘皵姒傝堪 +def getMarketFelling(): + result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php", + f"a=ZhangFuDetail&apiv=w35&c=HomeDingPan&PhoneOSNew=1&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9774&VerSion=5.13.0.0&") + data = json.loads(result) + return data["info"] +# market_strong = get_market_strong() +# print(f"market_strong==={market_strong}") + + +if __name__ == "__main__": + MarketFelling = getMarketFelling() + print(f"MarketFelling==={MarketFelling}") + changeStatistics = changeStatistics() + print(f"changeStatistics==={changeStatistics}") + +# -------------------------------------------------------------------------------------------------------------------------------------------------------------- + # 鑾峰彇琛屾儏绮鹃�夋澘鍧� 寮哄害鎺掑悕 def get_market_sift_plate_its_stock_power(): + @dask.delayed + def batch_get_plate_codes(fs): + return fs + + @dask.delayed + def request_plate_codes(i): + plate_name = i[1] + log_data = None + its_stock = json.loads(getCodesByPlate(i[0])) + now_time_str = tool.get_now_time_str() + if data_cache.OPENING_TIME < now_time_str < data_cache.NOON_MARKET_TIME: + log_data = {plate_name: its_stock['list']} + # 灏濊瘯杩囨护鎺夋棤鎰忎箟鐨勬蹇垫澘鍧�(plate_name not in ['绉戝垱鏉�', '鍖椾氦鎵�', '娆℃柊鑲�', '鏃�', 'ST鏉垮潡', 'ST鎽樺附', '骞惰喘閲嶇粍', '鍥戒紒鏀归潻','瓒呰穼', '澹宠祫婧�', '鑲℃潈杞', '閫佽浆濉潈']) and '澧為暱' in plate_name + if (plate_name not in ['绉戝垱鏉�', '鍖椾氦鎵�', '娆℃柊鑲�', '鏃�', 'ST鏉垮潡', 'ST鎽樺附', '骞惰喘閲嶇粍', '鍥戒紒鏀归潻', '瓒呰穼', + '澹宠祫婧�', '鑲℃潈杞', '閫佽浆濉潈']) or ('澧為暱' in plate_name): + + # print(f"{i[1]} 寮哄害:{i[2]}") + # 閫氳繃鏉垮潡ID鑾峰彇鍏朵笅闈㈢殑涓偂寮哄害鍒楄〃 + # print(f"======={i[0]}=======") + + # its_stock_list_info = its_stock['list'] + # logger.info(f"its_stock_list_info==={its_stock_list_info}") + # 灏嗘澘鍧楀己搴︿笅闈㈠搴旂殑涓偂鍒楄〃鎵撳嵃鍒版棩蹇椾腑 + # for i in its_stock_list_info: + # if i[0] != 1: + # logger.info( + # f"l === 涓偂浠g爜锛歿i[0]}锛屽叕鍙稿悕绉帮細{i[1]}锛屼富鍔涜祫閲戞帹娴嬶細{i[2]}锛屾湭鐭�0鍊硷細{i[3]}锛屾蹇碉細{i[4]}锛屾渶鏂颁环锛歿i[5]}锛屽綋鏃ュ綋鏃舵定骞咃細{i[6]}%锛�" + # f"鎴愪氦棰濓細{round(i[7] / 100000000, 2)} 浜匡紝瀹為檯鎹㈡墜鐜囷細{i[8]}%锛屾湭鐭�0鍊硷細{i[9]}锛屽疄闄呮祦閫氾細{round(i[10] / 100000000, 2)}浜匡紝" + # f"涓诲姏涔帮細{round(i[11] / 100000000, 2)}浜匡紝" + # f"涓诲姏鍗栵細{round(i[12] / 100000000, 2)}浜匡紝" + # f"涓诲姏鍑�棰濓細{round(i[13] / 10000, 2)}涓囷紝涔版垚鍗犳瘮锛歿i[14]}%锛屽崠鎴愬崰姣旓細{i[15]}%锛屽噣鎴愬崰姣旓細{i[16]}%锛屼拱娴佸崰姣旓細{i[17]}%锛屽崠娴佸崰姣旓細{i[18]}%锛屽噣娴佸崰姣旓細{i[19]}%锛�" + # f"鍖洪棿娑ㄥ箙锛歿i[20]}%锛岄噺姣旓細{i[21]}锛屾湭鐭�0锛歿i[22]}锛屼笂鏉挎儏鍐碉細{i[23]}锛屼笂鏉挎帓鍚嶏細{i[24]}锛屾崲鎵嬬巼锛歿i[25]}%锛�" + # f"鏈煡绌哄�硷細{i[26]}锛屾湭鐭ラ浂鍊硷細{i[27]}锛屾敹鐩樺皝鍗曪細{i[28]}锛屾渶澶у皝鍗曪細{i[29]}锛屾湭鐭ョ┖鍊硷紵锛歿i[30]}锛�" + # f"锛燂細{i[30]}%锛岋紵锛歿i[31]}锛岋紵锛燂細{i[32]}锛屾尟骞咃細{i[33]}%锛屾湭鐭�0锛燂紵锛燂紵锛歿i[34]}锛屾湭鐭�0锛燂紵锛燂紵锛燂細{i[35]}锛�" + # f"锛�=锛歿i[36]}锛岋紵鎬诲競鍊硷細{i[37]}锛岋紵娴侀�氬競鍊硷細{i[38]}锛屾渶缁堝綊灞炴蹇碉紙鏀剁洏鍚庡嚭鏁版嵁锛燂級锛歿i[39]}锛岄娑ㄦ鏁帮細{i[40]}锛�" + # f"41鏈煡1鍊硷細{i[41]}锛岀涓夊搴︽満鏋勬寔浠撱�恠tr鏁版嵁鍕跨敤杩愮畻绗︺�戯細{i[42]}涓囷紝锛熷勾棰勬祴鍑�鍒╂鼎锛歿i[43]}锛屼笂骞撮娴嬪噣鍒╂鼎锛歿i[44]}锛屽勾鍐呴娴嬪噣鍒╂鼎锛歿i[45]}" + # ) + + # 鍒濆鍖栬偂绁ㄥ己搴﹀垪琛� + stock_power_list = [] + for s in its_stock['list']: + # 杩囨护鎺夋定骞呭ぇ浜� and s[6] < 6.5 涓斿皬浜�0%鐨� 鍜� 鍚嶇О涓寘鍚玈T鐨� 鍜� 娑ㄩ�熷皬浜庣瓑浜�0%鐨� 鍜� 鍙鏄ㄦ棩鏈定鍋� 鍜� 涓婅瘉鎴栨繁璇佺殑姝h偂 and s[9] > 0.0025 + if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("鏉�") < 0 and s[24].find("鏉�") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1: + # print(f"{s[1]}锛屼釜鑲′唬鐮侊細{s[0]}锛� 娑ㄥ箙锛歿s[6]}% 娑ㄩ�燂細{s[9]}% 姒傚康锛歿s[4]} 涓诲姏璧勯噾鎺ㄦ祴锛歿s[2]} 棰嗘定娆℃暟锛歿s[40]} 浠婃棩绗嚑鏉匡細{s[23]} 鏄惁鐮寸増{s[24]}") + # 瀵逛釜鑲″己搴� 涓昏 灞炴�у垪琛ㄨ繘琛岃濉� + its_stock_power = [s[1], s[0], s[6], s[9], s[4], s[2], s[40]] + # 閫愪釜閫夋嫨鎬ф坊鍔爄ts_stock涓殑鍏冪礌鍒颁釜鑲″己搴﹀垪琛ㄤ腑 + # print(f"its_stock_power===={its_stock_power}") + # 鏁翠綋灏嗘坊鍔犲畬鍠勭殑涓偂寮哄害鍒楄〃娣诲姞鍒拌偂绁ㄥ垪琛ㄤ腑 + stock_power_list.append(its_stock_power) + # print(f"stock_power_list===={stock_power_list}") + # 杩囨护鎺夋病鏈夌灛鏃堕珮寮哄害涓偂鐨勭┖姒傚康 + if len(stock_power_list) != 0: + # 灏嗗搴旀澘鍧楃殑鑲$エ寮哄害鍒楄〃鏂板缓涓�涓瓧鍏� + stock_power_item = {i[1]: stock_power_list} + # 骞舵洿鏂板埌绮鹃�夋澘鍧椾釜鑲″瓧鍏镐腑 + market_sift_plate_stock_dict.update(stock_power_item) + return log_data + data = (getMarketJingXuanRealRankingInfo()) market_sift_plate = json.loads(data) + # logger_kpl_jingxuan_in 鎵撳嵃鐨勬棩蹇椾笓鐢ㄤ簬寮�鐩樹簡鏁版嵁鐨勫瓨鍌ㄥ垎鏋愶紝涓嶈兘杞绘槗鍒犻櫎 # print(f"market_sift_plate 鏁� ======{len(market_sift_plate['list'])}") - logger.info(f"market_sift_plate['list']======{market_sift_plate['list']}") - logger.info(f"market_sift_plate['list'][0] ======{market_sift_plate['list'][0]}") + # 琛屾儏銆嬬簿閫夋澘鍧椼�嬫帓鍚嶅墠20涓�嬪搴斾釜鑲°�嬬鍚堟潯浠剁殑涓偂 + # logger.info(f"market_sift_plate['list']======{market_sift_plate['list']}") + # logger.info(f"market_sift_plate['list'][0] ======{market_sift_plate['list'][0]}") # 鍒濆鍖栫簿閫夋澘鍧楀搴斾釜鑲″瓧鍏� market_sift_plate_stock_dict = {} if 'list' in market_sift_plate: - for i in market_sift_plate['list']: - plate_name = i[1] - # 灏濊瘯杩囨护鎺夋棤鎰忎箟鐨勬蹇垫澘鍧�(plate_name not in ['绉戝垱鏉�', '鍖椾氦鎵�', '娆℃柊鑲�', '鏃�', 'ST鏉垮潡', 'ST鎽樺附', '骞惰喘閲嶇粍', '鍥戒紒鏀归潻','瓒呰穼', '澹宠祫婧�', '鑲℃潈杞', '閫佽浆濉潈']) and '澧為暱' in plate_name - if (plate_name not in ['绉戝垱鏉�', '鍖椾氦鎵�', '娆℃柊鑲�', '鏃�', 'ST鏉垮潡', 'ST鎽樺附', '骞惰喘閲嶇粍', '鍥戒紒鏀归潻', '瓒呰穼', - '澹宠祫婧�', '鑲℃潈杞', '閫佽浆濉潈']) or ('澧為暱' in plate_name): - # print(f"{i[1]} 寮哄害:{i[2]}") - # 閫氳繃鏉垮潡ID鑾峰彇鍏朵笅闈㈢殑涓偂寮哄害鍒楄〃 - its_stock = getCodesByPlate(i[0]) - its_stock = json.loads(its_stock) - # print(f"its_stock['list'] === {its_stock['list']}") - # print(f"its_stock['list'][0] === {its_stock['list'][0]}") - # 鑾峰彇璇ユ蹇垫澘鍧楃殑鐨勫瓙鐗堝潡 - # its_son_plate = json.loads(getSonPlate(i[0])) - # logger.info(f"its_son_plate=={its_son_plate['List']}") - # if its_son_plate['List'][0][2] > 0: - # print(f"its_son_plate=={its_son_plate['List'][0]}") - # for son in its_son_plate['List']: - # if son[2] > 0: - # print(f"son===={son}") - # 鍒濆鍖栬偂绁ㄥ己搴﹀垪琛� - stock_power_list = [] - for s in its_stock['list']: - # 杩囨护鎺夋定骞呭ぇ浜� and s[6] < 6.5 涓斿皬浜�0%鐨� 鍜� 鍚嶇О涓寘鍚玈T鐨� 鍜� 娑ㄩ�熷皬浜庣瓑浜�0%鐨� 鍜� 鍙鏄ㄦ棩鏈定鍋� 鍜� 涓婅瘉鎴栨繁璇佺殑姝h偂 and s[9] > 0.0025 - if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("鏉�") < 0 and s[24].find( - "鏉�") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1: - # print(f"{s[1]}锛屼釜鑲′唬鐮侊細{s[0]}锛� 娑ㄥ箙锛歿s[6]}% 娑ㄩ�燂細{s[9]}% 姒傚康锛歿s[4]} 涓诲姏璧勯噾鎺ㄦ祴锛歿s[2]} 棰嗘定娆℃暟锛歿s[40]} 浠婃棩绗嚑鏉匡細{s[23]} 鏄惁鐮寸増{s[24]}") - # 瀵逛釜鑲″己搴﹀睘鎬у垪琛ㄨ繘琛屽垵濮嬪寲 - its_stock_power = [s[1], s[0], s[6], s[9], s[4], s[2], s[40]] - # 閫愪釜閫夋嫨鎬ф坊鍔爄ts_stock涓殑鍏冪礌鍒颁釜鑲″己搴﹀垪琛ㄤ腑 - # print(f"its_stock_power===={its_stock_power}") - # 鏁翠綋灏嗘坊鍔犲畬鍠勭殑涓偂寮哄害鍒楄〃娣诲姞鍒拌偂绁ㄥ垪琛ㄤ腑 - stock_power_list.append(its_stock_power) - # print(f"stock_power_list===={stock_power_list}") - # 杩囨护鎺夋病鏈夌灛鏃堕珮寮哄害涓偂鐨勭┖姒傚康 - if len(stock_power_list) != 0: - # 灏嗗搴旀澘鍧楃殑鑲$エ寮哄害鍒楄〃鏂板缓涓�涓瓧鍏� - stock_power_item = {i[1]: stock_power_list} - # 骞舵洿鏂板埌绮鹃�夋澘鍧椾釜鑲″瓧鍏镐腑 - market_sift_plate_stock_dict.update(stock_power_item) - logger.info(f"绮鹃�夋澘鍧楄偂绁ㄥ己搴︽暟鎹洿鏂� == {market_sift_plate_stock_dict}") + ds = [] + for d in market_sift_plate['list']: + ds.append(request_plate_codes(d)) + dask_result = batch_get_plate_codes(ds) + compute_results = dask_result.compute() + log_datas = {} + for r in compute_results: + if not r: + continue + for b in r: + log_datas[b] = r[b] + now_time = tool.get_now_time_str() + if data_cache.L1_DATA_START_TIME < now_time < data_cache.NOON_MARKET_TIME: + # logger.info(f"绮鹃�夋澘鍧楄偂绁ㄥ己搴︽暟鎹洿鏂� == {market_sift_plate_stock_dict}") + # 鍙湪鐩樹腑鏃堕棿鑾峰彇 + KPLStockOfMarketsPlateLogManager().add_log(market_sift_plate['list'], log_datas) + return market_sift_plate_stock_dict @@ -267,68 +339,48 @@ try: # now = time.time() # print(f"kpl_limit_up_process寮�濮嬩簡{now}") - its_stock_power = get_market_sift_plate_its_stock_power() - callback(its_stock_power) - # print(f"绮鹃�夋澘鍧楁媺鍗囦釜鑲℃洿鏂�===={its_stock_power}") + start_time = time.time() + now_time = tool.get_now_time_str() + if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME: + its_stock_power = get_market_sift_plate_its_stock_power() + time_str = datetime.datetime.now().strftime("%H%M%S") + if 92900 < int(time_str) < 95000: + logger_kpl_jingxuan_in.info(f"鑰楁椂锛歿time.time() - start_time} 鏁版嵁锛歿its_stock_power}") + callback(its_stock_power) + # print(f"绮鹃�夋澘鍧楁媺鍗囦釜鑲℃洿鏂�===={its_stock_power}") except Exception as e: + logger_debug.exception(e) logger.error(f"寮�鐩樺暒鏉垮潡寮哄害绾跨▼鎶ラ敊An error occurred: {e}") finally: time.sleep(2) -# 鑾峰彇娑ㄥ仠淇℃伅鏁版嵁 -def get_limit_up_info(): - # 鑾峰彇娑ㄥ仠淇℃伅鍒楄〃 - limit_up_info = json.loads(getLimitUpInfoNew())['list'] - return limit_up_info - - -# 鑾峰彇甯傚満琛屾儏鎯呯华缁煎悎寮哄害 -def get_market_strong(): - """ - 鑾峰彇甯傚満寮哄害 - :return: - """ - result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php", - f"a=DiskReview&apiv=w35&c=HomeDingPan&VerSion=5.13.0.0&PhoneOSNew=1&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9773&") - data = json.loads(result) - return int(data["info"]["strong"]) - -# market_strong = get_market_strong() -# print(f"market_strong==={market_strong}") - # 鑾峰彇娑ㄥ仠鏉垮潡鍚嶇О鍒楄〃骞跺瓨鍌ㄦ湰鍦扮殑鍑芥暟 def get_limit_up_block_names(): - # 鑾峰彇娑ㄥ仠淇℃伅鍒楄〃 - limit_up_info = get_limit_up_info() - # print(f"limit_up_info=={limit_up_info}") - data_cache.limit_up_info = get_limit_up_info() - # 鎻愬彇娑ㄥ仠鍒楄〃涓殑鏉垮潡鍚嶇О - limit_up_block_names = [] # 璁惧畾褰撳墠鏃堕棿鐐� - now_time = datetime.datetime.now().strftime("%H:%M:%S") - # 寰幆娣诲姞娑ㄥ仠姒傚康 - for i in limit_up_info: - limit_up_block_names.append(i[5]) - # print(f"limit_up_block_names==={limit_up_block_names}") - # return limit_up_block_names - # # 浣跨敤Counter璁$畻姣忎釜鍏冪礌鐨勫嚭鐜版鏁� - # counter = Counter(limit_up_block_names) - # # 鎵惧嚭鍑虹幇娆℃暟鏈�澶氱殑鍏冪礌鍙婂叾娆℃暟 - # most_common_element, most_common_count = counter.most_common(1)[0] - # # 鎵撳嵃鍑虹幇娆℃暟鏈�澶氱殑鍏冪礌 - # print(f"涓荤嚎姒傚康锛歿most_common_element}锛屽嚭鐜颁簡 {most_common_count} 娆�") - if now_time > data_cache.after_closing_time: - # print(f"鏀剁洏缁撴潫锛岃褰曞綋鍓嶆定鍋滄澘鍧�") - # 灏嗚幏鍙栧埌鐨勬定鍋滄蹇垫澘鍧楄浆JSON鏍煎紡骞跺瓨鍌ㄥ湪鏈湴鏂囦欢澶逛腑 - # 灏嗗瓧鍏歌浆鎹负JSON鏍煎紡鐨勫瓧绗︿覆 - json_data = json.dumps(limit_up_block_names) - # print(f"json_data=={json_data}") - if len(json_data) != 0: - # 鍐欏叆鏂囦欢 - with open('local_storage_data/limit_up_block_names.json', 'w', encoding='utf-8') as f: - f.write(json_data) - return limit_up_block_names + now_time = tool.get_now_time_str() + # print(f"now_time===={now_time}") + if data_cache.SERVER_RESTART_TIME < now_time < data_cache.UPDATE_DATA_TIME: + # print(f"鍦ㄦ椂闂村唴浣跨敤--------------------------") + # 鑾峰彇娑ㄥ仠淇℃伅鍒楄〃 + limit_up_info = get_limit_up_info() + # print(f"limit_up_info=={limit_up_info}") + data_cache.limit_up_info = get_limit_up_info() + # 鎻愬彇娑ㄥ仠鍒楄〃涓殑鏉垮潡鍚嶇О + limit_up_block_names = [] + # 寰幆娣诲姞娑ㄥ仠姒傚康 + for i in limit_up_info: + limit_up_block_names.append(i[5]) + # print(f"limit_up_block_names==={limit_up_block_names}") + # return limit_up_block_names + # # 浣跨敤Counter璁$畻姣忎釜鍏冪礌鐨勫嚭鐜版鏁� + # counter = Counter(limit_up_block_names) + # # 鎵惧嚭鍑虹幇娆℃暟鏈�澶氱殑鍏冪礌鍙婂叾娆℃暟 + # most_common_element, most_common_count = counter.most_common(1)[0] + # # 鎵撳嵃鍑虹幇娆℃暟鏈�澶氱殑鍏冪礌 + # print(f"涓荤嚎姒傚康锛歿most_common_element}锛屽嚭鐜颁簡 {most_common_count} 娆�") + + return limit_up_block_names # 涓哄紑鐩樺暒鎺ュ彛鑾峰彇鐨勬定鍋滃垪琛ㄦ蹇垫澘鍧楀崟鐙紑涓�涓繘绋� 褰㈠弬(callback) @@ -354,39 +406,44 @@ # 鏋勫缓娑ㄥ仠淇℃伅璇诲啓瀵硅薄 class DailyLimitUpInfoStorageManager: # 鍒濆鍖栨枃浠惰矾寰� - def __init__(self, file_path='local_storage_data/limit_up_block_date_data.jsonl'): + def __init__(self, file_path=constant.KPL_LIMIT_UP_DATA_PATH): self.file_path = file_path # 娣诲姞鍗曟棩娑ㄥ仠淇℃伅鏁版嵁鍒版枃浠朵腑鐨勪竴琛� 鍑芥暟 def append_data_to_file(self, data_to_append): # print(f"data_to_append=={data_to_append}") # 璇诲彇鎵�鏈夎骞惰В鏋愪负 JSON 瀵硅薄鍒楄〃 - with open(self.file_path, 'r', encoding='utf-8') as file: - # 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲 - current_date = datetime.datetime.now().strftime('%Y-%m-%d') - lines = [json.loads(line.strip()) for line in file if line.strip()] - # print(f"lines type=={type(lines)}") - # print(f"lines=={lines}") - # 妫�鏌ュ綋鍓嶆棩鏈熸槸鍚﹀凡瀛樺湪浜庢枃浠朵腑 - if lines: # 濡傛灉璇诲彇鍒扮殑琛屾枃浠跺垪琛ㄤ笉涓虹┖锛堜负鐪燂級 - if lines[-1].get(current_date) is None: # 濡傛灉鍒楄〃涓殑鍊掓暟鏈�鍚庝竴琛岃幏鍙栦笉鍒板綋鏃ョ殑鏃ユ湡锛堟渶鍚庝竴琛岀殑閿� 涓� 褰撴棩鏃ユ湡锛� - # 灏嗘棩鏈熷拰data_to_append杞崲涓篔SON鏍煎紡鐨勫瓧绗︿覆 + if os.path.exists(self.file_path): + with open(self.file_path, 'r', encoding='utf-8') as file: + # 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲 + current_date = datetime.datetime.now().strftime('%Y-%m-%d') + lines = [json.loads(line.strip()) for line in file if line.strip()] + # print(f"lines type=={type(lines)}") + # print(f"lines=={lines}") + # 妫�鏌ュ綋鍓嶆棩鏈熸槸鍚﹀凡瀛樺湪浜庢枃浠朵腑 + if lines: # 濡傛灉璇诲彇鍒扮殑琛屾枃浠跺垪琛ㄤ笉涓虹┖锛堜负鐪燂級 + if lines[-1].get(current_date) is None: # 濡傛灉鍒楄〃涓殑鍊掓暟鏈�鍚庝竴琛岃幏鍙栦笉鍒板綋鏃ョ殑鏃ユ湡锛堟渶鍚庝竴琛岀殑閿� 涓� 褰撴棩鏃ユ湡锛� + # 灏嗘棩鏈熷拰data_to_append杞崲涓篔SON鏍煎紡鐨勫瓧绗︿覆 + json_line = json.dumps({current_date: data_to_append}, ensure_ascii=False) + '\n' + # 鎵撳紑鏂囦欢骞惰拷鍔燡SON琛� + with open(self.file_path, 'a', encoding='utf-8') as file: + file.write(json_line) + else: + logger.info(f"锛堝綋鏃ユ棩鏈熷凡瀛樺湪浜庢枃浠剁殑鏈�鍚庝竴琛屼簡锛屼笉鍐嶉噸澶嶈拷鍔犲啓鍏ワ級") + else: json_line = json.dumps({current_date: data_to_append}, ensure_ascii=False) + '\n' # 鎵撳紑鏂囦欢骞惰拷鍔燡SON琛� - with open(self.file_path, 'a', encoding='utf-8') as file:file.write(json_line) - else: - print(f"锛堝綋鏃ユ棩鏈熷凡瀛樺湪浜庢枃浠剁殑鏈�鍚庝竴琛屼簡锛屼笉鍐嶉噸澶嶈拷鍔犲啓鍏ワ級") - else: - json_line = json.dumps({current_date: data_to_append}, ensure_ascii=False) + '\n' - # 鎵撳紑鏂囦欢骞惰拷鍔燡SON琛� - with open(self.file_path, 'a', encoding='utf-8') as file: - file.write(json_line) + with open(self.file_path, 'a', encoding='utf-8') as file: + file.write(json_line) # 娓呯悊澶氫綑鏁版嵁鍑芥暟 def check_and_remove_oldest_entry(self, max_entries): # 璇诲彇鎵�鏈夎骞惰В鏋愪负 JSON 瀵硅薄鍒楄〃 - with open(self.file_path, 'r', encoding='utf-8') as file: - lines = [json.loads(line.strip()) for line in file if line.strip()] + if os.path.exists(self.file_path): + with open(self.file_path, 'r', encoding='utf-8') as file: + lines = [json.loads(line.strip()) for line in file if line.strip()] + else: + lines = [] # 濡傛灉琛屾暟瓒呰繃闄愬埗锛岀Щ闄ゆ渶鏃╃殑涓�浜涜 if len(lines) >= max_entries: @@ -402,16 +459,17 @@ def arrange_limit_up_info(self): limit_info = {} # 鍒涘缓涓�涓垪琛ㄦ潵瀛樺偍鎵�鏈夎В鏋愮殑 JSON 瀵硅薄 - with open(self.file_path, 'r', encoding='utf-8') as file: - for line in file: - # 鍘婚櫎姣忚鏈熬鐨勬崲琛岀锛堝鏋滄湁鐨勮瘽锛� - line = line.rstrip('\n') - # 灏嗘瘡琛岃В鏋愪负涓�涓� JSON 瀵硅薄 - info = json.loads(line) - # 鍋囪姣忚閮芥槸涓�涓瓧鍏告暟鎹紝涓斿彧鏈変竴涓敭鍊煎锛屽叾涓敭鏄棩鏈� - if isinstance(info, dict) and len(info) == 1: - date, data = list(info.items())[0] - limit_info[date] = data + if os.path.exists(self.file_path): + with open(self.file_path, 'r', encoding='utf-8') as file: + for line in file: + # 鍘婚櫎姣忚鏈熬鐨勬崲琛岀锛堝鏋滄湁鐨勮瘽锛� + line = line.rstrip('\n') + # 灏嗘瘡琛岃В鏋愪负涓�涓� JSON 瀵硅薄 + info = json.loads(line) + # 鍋囪姣忚閮芥槸涓�涓瓧鍏告暟鎹紝涓斿彧鏈変竴涓敭鍊煎锛屽叾涓敭鏄棩鏈� + if isinstance(info, dict) and len(info) == 1: + date, data = list(info.items())[0] + limit_info[date] = data return limit_info @@ -429,7 +487,6 @@ history_limit_up_info = DailyLimitUpInfoStorageManager() data_cache.daily_limit_up_info = history_limit_up_info.arrange_limit_up_info() # logger.info(f"璇绘湰鍦扮殑鏃ユ洿鐨勫巻鍙叉定鍋滄暟鎹�=={data_cache.daily_limit_up_info}") - # print(f"daily_limit_up_info 绫诲瀷==={type(data_cache.daily_limit_up_info)}") # 缁熻姣忔棩涓荤嚎 @@ -474,6 +531,7 @@ sorted_plate_ranking_list = sorted(plate_ranking_list, key=lambda x: list(x.values())[0], reverse=True) # logger.info(f"{key}=====>>>>{sorted_plate_ranking_list}") history_sorted_plate_ranking_list.append(sorted_plate_ranking_list) + # print(f"history_sorted_plate_ranking_list={history_sorted_plate_ranking_list}") # for ranking_list in history_sorted_plate_ranking_list: # print(f"ranking_list={ranking_list}") @@ -578,6 +636,7 @@ # the_same_class_amount = pre_trading_day_limit_up_info[0][20] # logger.info(f"鍚屾蹇垫定鍋滄暟閲�=={the_same_class_amount}") + # get_handling_limit_up_info() @@ -615,7 +674,7 @@ # 灏嗗瓧鍏歌浆鎹负JSON鏍煎紡鐨勫瓧绗︿覆 json_data = json.dumps(all_stocks_plate_dict) # 鍐欏叆鏂囦欢 - with open('local_storage_data/all_stocks_plate_dict.json', 'w', encoding='utf-8') as f: + with open(constant.ALL_STOCKS_PLATE_PATH, 'w', encoding='utf-8') as f: f.write(json_data) now_time = datetime.datetime.now() # 鑾峰彇鏈満鏃堕棿 logger.info(f"鍐欏叆鎵�鏈変釜鑲℃澘鍧楁枃浠跺畬鎴愶紒::{now_time}") @@ -640,9 +699,6 @@ plate_are_null_list.append(sec_name) logger.info(f"鏈墈have_no_plate_num}鍙偂绁ㄦ蹇典负绌�") logger.info(f"涓偂鏈夊巻鍙睰绾夸絾姒傚康涓虹┖鐨勬湁锛歿plate_are_null_list}") - - - # 鑾峰彇鍏ㄩ儴涓偂鐨勭簿閫夋澘鍧楀苟瀛樺偍鐨勫嚱鏁� @@ -684,42 +740,9 @@ print(f"鍐欏叆绮鹃�夋澘鍧楁枃浠跺畬鎴愶紒::{now_time}") -# 鑾峰彇瀹炴椂澶х洏琛屾儏鎯呯华缁煎悎寮哄害 [鍒嗘暟] 鍑芥暟 -def get_real_time_market_strong(): - while True: - try: - if data_cache.position_automatic_management_switch is True: - # 鍒濆鍖栧垎鏃跺競鍦烘儏缁垎鏁板垪琛ㄦ暟鎹垪琛� - time_sharing_market_strong_dirt = {} - now = datetime.datetime.now() # 鑾峰彇鏈満鏃堕棿 - data_cache.real_time_market_strong = get_market_strong() - # data_cache.time_sharing_market_strong_dirt = time_sharing_market_strong_dirt.update({now: data_cache.real_time_market_strong}) - logger.info(f"澶х洏琛屾儏鎯呯华缁煎悎寮哄害 [鍒嗘暟]==={data_cache.real_time_market_strong}鍒�") - - if data_cache.real_time_market_strong >= 70: - data_cache.have_plate_buy_money = 30000 - data_cache.have_strength_buy_money = 30000 - elif 60 <= data_cache.real_time_market_strong < 70: - data_cache.have_plate_buy_money = 20000 - data_cache.have_strength_buy_money = 20000 - elif 50 <= data_cache.real_time_market_strong < 60: - data_cache.have_plate_buy_money = 10000 - data_cache.have_strength_buy_money = 10000 - elif 30 <= data_cache.real_time_market_strong < 50: - data_cache.have_plate_buy_money = 3000 - data_cache.have_strength_buy_money = 3000 - elif data_cache.real_time_market_strong < 30: - data_cache.have_plate_buy_money = 1000 - data_cache.have_strength_buy_money = 1000 - except Exception as error: - logger.error(f"鑾峰彇瀹炴椂澶х洏琛屾儏鎯呯华缁煎悎寮哄害[鍒嗘暟] 鍑芥暟鎶ラ敊: {error}") - finally: - time.sleep(3) - # kpl_stocks_list_selected_blocks_process() #鍦� kpl_api.py涓彲浠ヨ皟鐢� - # stocks_list_selected_blocks(min_stocks) #鍦� kpl_api.py涓彲浠ヨ皟鐢� - # list = ['SHSE.600805','SHSE.600804'] # # all_stocks_plate_dict(list) + -- Gitblit v1.8.0