历史交易数据涨跌分级
# encoding:utf-8
import sys,traceback
from loguru import loggersys.path.append("..")
from QhSpiderTool import QhDorpFiled
from QhCsvMode import *def QhZhangDieFenJi(QhDfData,QhFangFa="A"):"""历史交易数据涨跌分级作者:阙辉:param QhDfData::return:"""QhZDFZ10 = 0.1QhZDFZ20 = 0.2QhJYBK = QhDfData["JYBK"].values[0] # 交易板块,从流数据获取QhZhangTingBiCanShu = { # 涨跌停分级参数"ZhangDieFu": [{# SHA|上证A股,SZA|深证A股,BJA|北证A股,"TiaoJian": ["SHA", "SZA", "BJA"],"BiLi": 0.1,},{# KCB|科创板,CYB|创业板,"TiaoJian": ["KCB", "CYB"],"BiLi": 0.2,},],"ZhangDieFu0": {"SHA": QhZDFZ10, # SHA|上证A股"SZA": QhZDFZ10, # SZA|深证A股"BJA": QhZDFZ10, # BJA|北证A股"KCB": QhZDFZ20, # KCB|科创板"CYB": QhZDFZ20, # CYB|创业板},"FanWei": [-0.98, -0.8, -0.7, -0.5, -0.2, 0, 0.2, 0.5, 0.7, 0.8, 0.98], # 计算比例参数"FenJiCanShu":{# 涨跌分级参数 "FZ":[] 作为阀值缓存使用,暂时不用-6:{"FW":[0,-0.2],"PD":"<|>=","FZ":[]},-5:{"FW":[-0.2,-0.5],"PD":"<|>=","FZ":[]},-4:{"FW":[-0.5,-0.7],"PD":"<|>=","FZ":[]},-3:{"FW":[-0.7,-0.8],"PD":"<|>=","FZ":[]},-2:{"FW":[-0.8,-0.98],"PD":"<|>=","FZ":[]},-1:{"FW":[-0.98],"PD":"<","FZ":[]}, # 跌停0:{"FW":[0],"PD":"==","FZ":[]}, # 平1:{"FW":[0.98],"PD":">","FZ":[]}, # 涨停2:{"FW":[0.8,0.98],"PD":">|<=","FZ":[]},3:{"FW":[0.7,0.8],"PD":">|<=","FZ":[]},4:{"FW":[0.5,0.7],"PD":">|<=","FZ":[]},5:{"FW":[0.2,0.5],"PD":">|<=","FZ":[]},6:{"FW":[0,0.2],"PD":">|<=","FZ":[]},},}# 获取参数 阙辉QhZhangDieFuDic = QhZhangTingBiCanShu["ZhangDieFu"]QhFanWeiA = QhZhangTingBiCanShu["FanWei"]FenJiCanShuDic = QhZhangTingBiCanShu["FenJiCanShu"]ZhangDieFu0Dic = QhZhangTingBiCanShu["ZhangDieFu0"]if QhFangFa == "A":# 计算比例 阙辉# JYBK 代表交易板块for QhRow in QhZhangDieFuDic:QhTiaoJian = QhRow["TiaoJian"] #QhBiLi = QhRow["BiLi"] # 涨跌比例for QhRow01 in QhFanWeiA:QhFaZhi = QhRow01 # 阀值# 根据不同板块计算阀值,用于分级比较,阀值存储在df中,比较完后,阀值再删除掉 阙辉QhDfData.loc[(QhDfData["JYBK"].isin(QhTiaoJian)),"QFZ_{}".format(str(QhFaZhi))] = round(QhBiLi * QhFaZhi,4) # 计算阀值比例# 分级判断 阙辉for QhKey,QhValue in FenJiCanShuDic.items():QhFenJi = QhKey # 分级值QhFanWei = QhValue["FW"] # 分级范围QhFanWeiLen = len(QhFanWei)QhPanDuan = QhValue["PD"] # 分级判断值print(QhFanWei)# print(QhFanWeiLen)if QhFanWeiLen > 2:logger.error("【涨跌分级】分级范围参数超范围,请检查,本次不计算,QueHui!")continue# QZDFJ|涨跌分级QhFiledZD = "ZDF"if QhFanWeiLen == 1: # 单条件QhFanWei0 = QhFanWei[0]if QhPanDuan == ">": # 涨停QhDfData.loc[(QhDfData[QhFiledZD] > QhDfData["QFZ_{}".format(str(QhFanWei0))]),"QZDFJ"] = QhFenJielif QhPanDuan == "==": # 平QhDfData.loc[(QhDfData[QhFiledZD] == QhDfData["QFZ_{}".format(str(QhFanWei0))]), "QZDFJ"] = QhFenJielif QhPanDuan == "<": # 跌停QhDfData.loc[(QhDfData[QhFiledZD] < QhDfData["QFZ_{}".format(str(QhFanWei0))]), "QZDFJ"] = QhFenJielif QhFanWeiLen == 2: # 多条件QhFanWei0 = QhFanWei[0]QhFanWei1 = QhFanWei[1]if QhPanDuan == ">|<=": # 涨QhDfData.loc[(QhDfData[QhFiledZD] > QhDfData["QFZ_{}".format(str(QhFanWei0))]) &(QhDfData[QhFiledZD] <= QhDfData["QFZ_{}".format(str(QhFanWei1))]),"QZDFJ"] = QhFenJielif QhPanDuan == "<|>=": # 跌QhDfData.loc[(QhDfData[QhFiledZD] < QhDfData["QFZ_{}".format(str(QhFanWei0))]) &(QhDfData[QhFiledZD] >= QhDfData["QFZ_{}".format(str(QhFanWei1))]),"QZDFJ"] = QhFenJi# 删除用于比较的阀值QhDfData = QhDorpFiled(QhDfData,["QFZ_{}".format(str(QhRow)) for QhRow in QhFanWeiA])else:# 分级判断 阙辉for QhKey, QhValue in FenJiCanShuDic.items():QhFenJi = QhKey # 分级值QhFanWei = QhValue["FW"] # 分级范围QhFanWeiLen = len(QhFanWei)QhPanDuan = QhValue["PD"] # 分级判断值QhZDFRow = ZhangDieFu0Dic[QhJYBK] # 找到板块的涨跌幅if QhFanWeiLen > 2: # 校验参数是否超范围logger.error("【涨跌分级】分级范围参数超范围,请检查,本次不计算,QueHui!")continue# QZDFJ|涨跌分级 直接法QhFiledZD = "ZDF"if QhFanWeiLen == 1: # 单条件QhFanWei0 = QhFanWei[0]QhFZ0 = round(QhFanWei0 * QhZDFRow,4) # 阀值0if QhPanDuan == ">": QhDfData.loc[(QhDfData[QhFiledZD] > QhFZ0), "QZDFJ"] = QhFenJi # 涨停elif QhPanDuan == "==": QhDfData.loc[(QhDfData[QhFiledZD] == QhFZ0), "QZDFJ"] = QhFenJi # 平elif QhPanDuan == "<": QhDfData.loc[(QhDfData[QhFiledZD] < QhFZ0), "QZDFJ"] = QhFenJi # 跌停elif QhFanWeiLen == 2: # 多条件QhFanWei0 = QhFanWei[0]QhFZ0 = round(QhFanWei0 * QhZDFRow, 4) # 阀值0QhFanWei1 = QhFanWei[1]QhFZ1 = round(QhFanWei1 * QhZDFRow, 4) # 阀值1if QhPanDuan == ">|<=": QhDfData.loc[(QhDfData[QhFiledZD] > QhFZ0) & (QhDfData[QhFiledZD] <= QhFZ1),"QZDFJ"] = QhFenJi # 涨elif QhPanDuan == "<|>=": QhDfData.loc[(QhDfData[QhFiledZD] < QhFZ0) & (QhDfData[QhFiledZD] >= QhFZ1),"QZDFJ"] = QhFenJi # 跌return QhDfDataif __name__ == '__main__':QhDfData = QhStockHisJiaoYiModel(QhScode="Q000001",QhFrom="DF",QhShiChang="SZA",QhZhouQi="日",QhFuQuan="前复权")QhDfData = QhZhangDieFenJi(QhDfData)QhDfData.to_csv("test.csv",encoding="gbk")print(QhDfData)pass