历史交易数据涨跌分级

历史交易数据涨跌分级

python 复制代码
# encoding:utf-8
import sys,traceback
from loguru import logger

sys.path.append("..")
from QhSpiderTool import QhDorpFiled
from QhCsvMode import *



def QhZhangDieFenJi(QhDfData,QhFangFa="A"):

    """
    历史交易数据涨跌分级
    作者:阙辉
    :param QhDfData:
    :return:
    """

    QhZDFZ10 = 0.1
    QhZDFZ20 = 0.2
    QhJYBK = 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"] = QhFenJi
                elif QhPanDuan == "==":  # 平
                    QhDfData.loc[(QhDfData[QhFiledZD] == QhDfData["QFZ_{}".format(str(QhFanWei0))]), "QZDFJ"] = QhFenJi
                elif QhPanDuan == "<":  # 跌停
                    QhDfData.loc[(QhDfData[QhFiledZD] < QhDfData["QFZ_{}".format(str(QhFanWei0))]), "QZDFJ"] = QhFenJi
            elif 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"] = QhFenJi
                elif 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)  # 阀值0
                if 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)  # 阀值0
                QhFanWei1 = QhFanWei[1]
                QhFZ1 = round(QhFanWei1 * QhZDFRow, 4)  # 阀值1
                if QhPanDuan == ">|<=": QhDfData.loc[(QhDfData[QhFiledZD] > QhFZ0) & (QhDfData[QhFiledZD] <= QhFZ1),"QZDFJ"] = QhFenJi    # 涨
                elif QhPanDuan == "<|>=": QhDfData.loc[(QhDfData[QhFiledZD] < QhFZ0) & (QhDfData[QhFiledZD] >= QhFZ1),"QZDFJ"] = QhFenJi  # 跌

    return QhDfData

if __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
相关推荐
双叶83626 分钟前
(Python)文件储存的认识,文件路径(文件储存基础教程)(Windows系统文件路径)(基础教程)
开发语言·windows·python
枫昕柚1 小时前
python
开发语言·python
木头左1 小时前
自动驾驶领域中的Python机器学习
python·机器学习·自动驾驶
Dxy12393102161 小时前
Python Requests-HTML库详解:从入门到实战
开发语言·python·html
seasonsyy1 小时前
2.安装CUDA详细步骤(含安装截图)
python·深度学习·环境配置·cuda
写点什么啦1 小时前
一键修复ipynb,Jupyter Notebook损坏文件
ide·python·jupyter
fishwheel1 小时前
Android:Reverse 实战 part 2 番外 IDA python
android·python·安全
测试19982 小时前
cmake应用:集成gtest进行单元测试
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
淦暴尼2 小时前
银行客户流失预测分析
python·深度学习·算法
那雨倾城3 小时前
PiscCode使用OpenCV实现漂浮方块特效
python·opencv