歷史交易數據漲跌分級
# 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