| | |
| | | import time |
| | | import datetime |
| | | |
| | | import dask |
| | | import requests |
| | | |
| | | import constant |
| | |
| | | DABAN_TYPE_EVER_LIMIT_DOWN = 5 |
| | | |
| | | |
| | | def __base_request(url, data, timeout=10): |
| | | def __base_request(url, data, timeout=10): |
| | | DELEGATE = True |
| | | if not DELEGATE: |
| | | headers = { |
| | |
| | | def getCodesByPlate(plate_code): |
| | | data = f"Order=1&a=ZhiShuStockList_W8&st=30&c=ZhiShuRanking&PhoneOSNew=1&old=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&IsZZ=0&Token=0&Index=0&apiv=w32&Type=6&IsKZZType=0&UserID=0&PlateID={plate_code}&" |
| | | return __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data) |
| | | |
| | | |
| | | |
| | | # 获取概念中的板块中的子板块 |
| | |
| | | |
| | | # 获取行情精选板块 强度排名 |
| | | 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] |
| | | # 尝试过滤掉无意义的概念板块(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]) |
| | | print(f"======={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%的 和 名称中包含ST的 和 涨速小于等于0%的 和 只要昨日未涨停 和 上证或深证的正股 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]] |
| | | # 逐个选择性添加its_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) |
| | | |
| | | data = (getMarketJingXuanRealRankingInfo()) |
| | | market_sift_plate = json.loads(data) |
| | | # logger_kpl_jingxuan_in 打印的日志专用于开盘了数据的存储分析,不能轻易删除 |
| | |
| | | # 初始化精选板块对应个股字典 |
| | | 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%的 和 名称中包含ST的 和 涨速小于等于0%的 和 只要昨日未涨停 和 上证或深证的正股 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]] |
| | | # 逐个选择性添加its_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) |
| | | ds = [] |
| | | for d in market_sift_plate['list']: |
| | | ds.append(request_plate_codes(d)) |
| | | dask_result = batch_get_plate_codes(ds) |
| | | dask_result.compute() |
| | | logger.info(f"精选板块股票强度数据更新 == {market_sift_plate_stock_dict}") |
| | | return market_sift_plate_stock_dict |
| | | |
| | |
| | | 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}") |
| | |
| | | # 将日期和data_to_append转换为JSON格式的字符串 |
| | | json_line = json.dumps({current_date: data_to_append}, ensure_ascii=False) + '\n' |
| | | # 打开文件并追加JSON行 |
| | | 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) |
| | | else: |
| | | logger.info(f"(当日日期已存在于文件的最后一行了,不再重复追加写入)") |
| | | else: |
| | |
| | | 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)}") |
| | | # 统计每日主线 |
| | | daily_limit_up_info_len = len(data_cache.daily_limit_up_info) |
| | |
| | | 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}") |
| | |
| | | # the_same_class_amount = pre_trading_day_limit_up_info[0][20] |
| | | # logger.info(f"同概念涨停数量=={the_same_class_amount}") |
| | | |
| | | |
| | | # get_handling_limit_up_info() |
| | | |
| | | |
| | |
| | | plate_are_null_list.append(sec_name) |
| | | logger.info(f"有{have_no_plate_num}只股票概念为空") |
| | | logger.info(f"个股有历史K线但概念为空的有:{plate_are_null_list}") |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | # 获取全部个股的精选板块并存储的函数 |
| | |
| | | if Unfinished_opening_plan_number != 0: |
| | | # 根据账户可用金额 计算今日计划下单金额 |
| | | # (账户可用金额/今日最大新增持仓票数) * (大盘综合强度分数 * 0.01) |
| | | data_cache.today_planned_order_amount = (usefulMoney * low_emotion_mood_emotion / Unfinished_opening_plan_number) * (data_cache.real_time_market_strong * 0.01) |
| | | data_cache.today_planned_order_amount = ( |
| | | usefulMoney * low_emotion_mood_emotion / Unfinished_opening_plan_number) * ( |
| | | data_cache.real_time_market_strong * 0.01) |
| | | |
| | | except Exception as error: |
| | | logger.error(f"获取实时大盘行情情绪综合强度[分数] 函数报错: {error}") |
| | | finally: |
| | | time.sleep(3) |
| | | |
| | | |
| | | # kpl_stocks_list_selected_blocks_process() #在 kpl_api.py中可以调用 |
| | | |
| | |
| | | # list = ['SHSE.600805','SHSE.600804'] |
| | | # |
| | | # all_stocks_plate_dict(list) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | start_time = time.time() |
| | | get_market_sift_plate_its_stock_power() |
| | | print("耗时:", time.time() - start_time) |