"""
|
该模块为全局化变量的模块
|
不要试图把所有数据都全局化了
|
"""
|
|
import datetime
|
import json
|
import logging
|
import os
|
|
import constant
|
# 引入掘金API
|
import utils.juejin_api
|
from log_module.log import logger_common
|
# from logging_config import get_logger
|
from utils import tool, hx_qc_value_util
|
|
# 获取logger实例
|
logger = logger_common
|
|
# 全局日志配置 如果不想用就把 logging.ERROR 如果要打就=logging.INFO
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
|
@tool.singleton
|
class DataCache:
|
"""
|
数据缓存
|
"""
|
# ---定义变量---
|
today_date = None
|
pre_trading_day = None
|
double_pre_trading_day = None
|
next_trading_day = None
|
all_stocks = None
|
filtered_stocks = None
|
min_instruments = None
|
min_stocks = None
|
code_name_dict = {}
|
|
def __init__(self):
|
logging.info("全局初始化数据 开始》》》")
|
'''
|
设定基本日期
|
'''
|
# 今日时间初始化
|
now = datetime.datetime.now() # 获取本机时间
|
print(f"本机时间::{now}")
|
# 本机启动时间初始化
|
Local_startup_time = datetime.datetime.now().strftime("%H:%M:%S")
|
print(f"本机启动时间==={Local_startup_time}")
|
logger.info(f"本机启动时间==={Local_startup_time}")
|
# 全局化 【今日日期 上一个交易日期 上上个交易日期 下一个交易日期】
|
self.today_date = now.strftime('%Y-%m-%d') # 获取今日日期参数
|
print(f"今日日期{self.today_date}")
|
self.pre_trading_day = hx_qc_value_util.get_previous_trading_date(self.today_date) # 获取前一个交易日
|
print(f"上一个交易日{self.pre_trading_day}")
|
self.double_pre_trading_day = hx_qc_value_util.get_previous_trading_date(self.pre_trading_day) # 获取上上一个交易日
|
print(f"上上一个交易日{self.double_pre_trading_day}")
|
self.next_trading_day = hx_qc_value_util.get_next_trading_date(self.today_date) # 获取下一个交易日
|
print(f"下一个交易日{self.next_trading_day}")
|
'''
|
设定基本时间点
|
'''
|
# 获取A股市场(包含沪深两市)的股票列表跳过停牌,跳过ST 上交所 SHSE.600000 深交所 SZSE.000000 target = ['SHSE.603839', 'SZSE.002855']
|
self.all_stocks = utils.juejin_api.JueJinApi.get_target_codes()
|
# self.all_stocks = [{'sec_level': 1, 'symbol': 'SZSE.301633','pre_close': 78.72000122070312, 'is_suspended': 0, 'sec_name': '港迪技术', 'listed_date': datetime.datetime(2024, 11, 7, 0, 0,tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'sec_type': 1, 'sec_id': '301633'}]
|
|
# self.all_stocks = self.all_stocks[:10]
|
# 缓存代码的名称
|
self.code_name_dict = {x['symbol']: x['sec_name'] for x in self.all_stocks}
|
|
print("A股所有代码数量:", len(self.all_stocks))
|
# 只要上证A股和深证A股
|
# self.filtered_stocks = [stock for stock in self.all_stocks if
|
# stock.startswith('SHSE.60') or (stock.startswith('SZSE.00'))]
|
self.filtered_stocks = [stock['symbol'] for stock in self.all_stocks if
|
isinstance(stock.get('symbol'), str) and (
|
stock['symbol'].startswith('SHSE.60') or stock['symbol'].startswith(
|
'SZSE.00'))]
|
# self.filtered_stocks = self.filtered_stocks[:10]
|
print(f"过滤后上证A股和深证A股数量filtered_stocks:{len(self.filtered_stocks)}")
|
# 声明一下需要拉取K线的列表
|
self.main_index_stocks = ['SHSE.000001', 'SZSE.399001', 'SZSE.399006', 'SHSE.000300']
|
# 获取上证A股和深证A股 基本信息
|
instruments = [stock for stock in self.all_stocks if stock['symbol'] in self.filtered_stocks]
|
# 将获取到的上证A股和深证A股 基本信息 汇编为一个字典
|
basic_info_symbols_dict = {}
|
# 初始化没有K线的股票
|
no_k_line_stocks = []
|
for i in instruments:
|
basic_info_symbols_dict[i["symbol"]] = i
|
# print(f"basic_info_symbols_dict ====={basic_info_symbols_dict}")
|
# basic_info_symbols_dict ===== 'SHSE.600611': {'symbol': 'SHSE.600611', 'sec_name': '大众交通', 'pre_close': 2.809999942779541},
|
# if ['sec_name']
|
# 如果公司名称中不包含["ST", "退市", "退", "XD", "XR", "DR", "N"] 则继续逻辑判断
|
if any(keyword in i['sec_name'] for keyword in ["ST", "退市", "退", "N", "C"]):
|
# print(f"非ST, 退市, 退, XD, N==={basic_info['sec_name']} 继续判断")
|
no_k_line_stocks.append(i['symbol'])
|
# 将列表推导式移出循环 过滤出昨日收盘价在2-30元的股票
|
min_instruments = [stock for stock in instruments if 2 < stock['pre_close'] < 30]
|
# print(f"min_instruments 数量==={len(min_instruments)}")
|
# 使用 get 方法安全地获取 symbol 字段的值
|
self.min_stocks = [stock.get('symbol') for stock in min_instruments if stock.get('symbol') is not None]
|
print(f"min_stocks==={len(self.min_stocks)}")
|
logging.info(f"全局初始化数据 完成《《《 - {os.getpid()}")
|
# 获取当前进程的PID
|
|
|
'''
|
设定基本时间点
|
'''
|
Local_startup_time = datetime.datetime.now().strftime("%H:%M:%S")
|
server_restart_time = datetime.time(9, 00, 00).strftime("%H:%M:%S") # 定义9:00
|
L1_data_start_time = datetime.time(9, 15, 00).strftime("%H:%M:%S") # 定义9:15
|
before_open_bidding_time = datetime.time(9, 20, 00).strftime("%H:%M:%S") # 定义9:20
|
open_bidding_time = datetime.time(9, 25, 00).strftime("%H:%M:%S") # 定义 盘前 集合竞价 时间
|
later_open_bidding_time = datetime.time(9, 25, 30).strftime("%H:%M:%S") # 定义 盘前 集合竞价 时间
|
after_open_bidding_time = datetime.time(9, 26, 00).strftime("%H:%M:%S") # 定义 集合竞价 开始后 时间
|
opening_time = datetime.time(9, 30, 00).strftime("%H:%M:%S") # 定义开盘时间
|
morn_market_time = datetime.time(9, 35, 00).strftime("%H:%M:%S") # 定义早盘时间
|
noon_market_time = datetime.time(13, 5, 00).strftime("%H:%M:%S") # 定义午盘时间
|
close_position_time = datetime.time(14, 55, 00).strftime("%H:%M:%S") # 定义平仓时间
|
watch_disk_end_time = datetime.time(14, 56, 00).strftime("%H:%M:%S") # 定义 板上盯结束时间
|
close_bidding_time = datetime.time(14, 57, 00).strftime("%H:%M:%S") # 定义 盘后 集合竞价 时间
|
closing_time = datetime.time(15, 00, 00).strftime("%H:%M:%S") # 定义 收盘时间
|
after_closing_time = datetime.time(15, 1, 00).strftime("%H:%M:%S") # 定义 收盘后时间
|
checking_data_time = datetime.time(17, 00, 00).strftime("%H:%M:%S") # 定义 检查数据时间
|
update_data_time = datetime.time(18, 31, 00).strftime("%H:%M:%S") # 定义更新数据时间
|
program_sleep_time = datetime.time(23, 00, 00).strftime("%H:%M:%S") # 定义程序休眠时间
|
|
# 读取已经获取到并存储在本地的目标范围的个股的板块概念
|
# 读取JSON文件并解析为字典
|
if os.path.exists(constant.ALL_STOCKS_PLATE_PATH):
|
with open(constant.ALL_STOCKS_PLATE_PATH, 'r',
|
encoding='utf-8') as f:
|
json_data = f.read()
|
else:
|
json_data = "{}"
|
all_stocks_plate_dict = json.loads(json_data)
|
logger.info(f"all_stocks_plate_dict的数量={len(all_stocks_plate_dict)}")
|
|
# 初始化当日当时最高价
|
high_price = 0
|
# 初始化当日当时最低价
|
low_price = 0
|
|
# 初始化每日涨停信息
|
daily_limit_up_info = []
|
# 初始化开盘啦涨停昨日信息涨停代码
|
yesterday_limit_up_code_list = []
|
# 初始化开盘啦昨日炸板但通过K线数据计算涨停的股票代码列表
|
yesterday_frying_plate_last_minute_list = []
|
# 初始化每日涨停信息方法被执行记录
|
execution = False
|
# 初始化实时涨停概念板块
|
limit_up_block_names = []
|
# 初始化板块强度下的个股强度
|
market_sift_plate_stock_dict = {}
|
# 初始化实时大盘行情情绪综合强度[分数]
|
real_time_market_strong = 0
|
# 初始化实时大盘行情情绪综合强度分时列表
|
time_sharing_market_strong_dirt = {}
|
|
# 为K线属性指标字典初始化
|
all_stocks_all_K_line_property_dict = {}
|
# 声明K线属性中所有涨停类型
|
limit_up_type = ['one_line_limit_up', 'limit_down_then_limit_up', 'limit_up_then_limit_down_then_limit_up',
|
'limit_up']
|
# 声明K线属性中所有跌停类型
|
limit_down_type = ['limit_up_then_limit_down', 'one_line_limit_down', 'limit_down', 'touch_limit_down']
|
# 声明K线属性中所有炸板类型
|
frying_plate_type = ['frying_plate', 'first_frying_plate', 'one_line_limit_up_then_frying_plate',
|
'one_line_limit_up_then_frying_plate_then_limit_down', 'not_first_frying_plate']
|
|
# 定义一个当日分时内所有个股的开盘价字典
|
all_stocks_current_open = {}
|
# 定义一个当日分时内所有个股的实时最高价和最低价字典
|
all_stocks_current_high_and_low = {}
|
# 定义一个当日分时内所有个股的上一个实时总成交量字典
|
all_stocks_last_volume = {}
|
# 定义一个当前最新价初始化缓存
|
current_new_price = 0
|
|
# 为当前账户全部【资金信息】创建字典
|
account_finance_dict = {}
|
# 为当前账户可用资金创建一个变量
|
usefulMoney = 0
|
# 为当前账户全部【持仓信息】创建列表
|
account_positions_dict = {}
|
# 为持仓代码创建一个初始集合
|
position_symbols_set = set()
|
# 为当日可用持仓代码创建一个初始集合
|
available_symbols_set = set()
|
# 为当日新增加持仓代码创建一个初始集合 买入策略中会用到 判断是否成功买了三支票
|
addition_position_symbols_set = set()
|
|
# 定义一个记录开盘价(开盘时最新价)是否记录
|
record_current_open_execution = False
|
# 定义一个实时计算最高价和最低价的函数是否在规定时间内启动
|
record_high_and_low_execution = False
|
# 定义一个集合竞价后开盘前的逻辑是否只进入判断一次
|
# later_open_bidding_time_is_entered = False ##################
|
# 定义一个集合竞价时间段条件分支逻辑的初始执行次数
|
execution_times = 0
|
# 定义一个有概念逻辑分支买入进入执行的初始化次数
|
have_plate_buy_times = 0
|
# 定义一个有强度逻辑分支买入进入执行的初始化次数
|
have_strength_buy_times = 0
|
# 定义一个有小量换大涨幅逻辑分支买入进入执行的初始化次数
|
have_small_turn_large_buy_times = 0
|
# 创建一个已买板块列表
|
bought_plate = []
|
# 持仓金额自动管理开关
|
position_automatic_management_switch = True
|
# 初始化有概念买入金额
|
have_plate_buy_money = 3000
|
# 初始化有强度买入金额
|
have_strength_buy_money = 3000
|
# 今日计划下单金额
|
today_planned_order_amount = 0
|
|
# 最新的市场行情数据
|
# {"code":(代码,昨日收盘价,最新价,总成交量,总成交额,买五档(价格,成交额),卖五档(价格,成交额),更新时间)}
|
latest_code_market_info_dict = {}
|
|
# 股票指数字典 例如:{"000001":(指数, 量, 额, 昨日收盘价)}
|
stock_index_dict = {}
|
# 上证指数 瞬时涨幅
|
Shanghai_tick_growth = 0
|
# 上证指数 当日涨幅
|
Shanghai_today_growth = 0
|
# 上证指数 开盘涨幅
|
Shanghai_open_growth = 0
|
|
# 深证指数 瞬时涨幅
|
Shenzhen_tick_growth = 0
|
# 深证指数 当日涨幅
|
Shenzhen_today_growth = 0
|
# 深证指数 开盘涨幅
|
Shenzhen_open_growth = 0
|
|
# 创业板指 瞬时涨幅
|
TSXV_tick_growth = 0
|
# 创业板指 当日涨幅
|
TSXV_today_growth = 0
|
# 创业板指 开盘涨幅
|
TSXV_open_growth = 0
|
|
logging.info(f"全局初始化数据 完成《《《 - {os.getpid()}")
|