股票历史交易数据统一建模

# encoding:utf-8
import sys,os,copy,traceback
import pandas as pd

sys.path.append("..")
from QhSetting import QHJSPATH
from QhCsvMode import *


# 【数据建模】此模块主要用于数据统一建模
# 统一字段名 统一字段类型 统一数据单位 统一数据格式
# 作者:阙辉

def QhReadCsv(QhJsonDb,QhFactionKey,QhCsvPath,QhCsvName,QhScode="Q000001"):

    QhCsvPath = QhJsonDb[QhFactionKey][QhCsvPath]
    QhCsvPath = QhDbPathJieXiIsMkdir(QhCsvPath,QHJSPATH)
    QhCsvName = QHDFDBJSON[QhFactionKey][QhCsvName]
    if "{}" in QhCsvName: QhCsvName = QhCsvName.format(QhScode)
    QhCsvPath = "{}\{}".format(QhCsvPath,QhCsvName)
    QhCsvDf = pd.read_csv(QhCsvPath,encoding='gbk',low_memory=False)
    return QhCsvDf

def QhChangeDataType(QhJieGuoDf,QhFileds,QhType=float):

    QhDfData_columns=QhJieGuoDf.columns.tolist()
    if not isinstance(QhFileds,list):
        QhFileds = [QhFileds]
    for QhRow in QhFileds:
        try:
            if QhRow not in QhDfData_columns: continue
            QhFiled = QhRow
            QhJieGuoDf[QhFiled] = QhJieGuoDf[QhFiled].replace("-", "0")
            QhJieGuoDf[QhFiled] = pd.to_numeric(QhJieGuoDf[QhFiled], errors='coerce')  # 非数值字符串转换为NaN
            QhJieGuoDf[QhFiled] = QhJieGuoDf[QhFiled].replace("",0)
            QhJieGuoDf[QhFiled] = QhJieGuoDf[QhFiled].fillna(0)
            QhJieGuoDf[QhFiled] = QhJieGuoDf[QhFiled].astype(QhType)
        except:
            QhErrMsg = traceback.format_exc()
            print(QhErrMsg)

    return QhJieGuoDf


def QhStockHisJiaoYiModel(QhScode="Q000001",QhFrom="DF",QhShiChang="深交所A股",QhZhouQi="日",QhFuQuan="前复权"):
    """
    历史交易数据模型标准化
    作者:阙辉
    :param QhScode: Q股票代码
    :param QhFrom: 数据来源
    :param QhShiChang: 市场板块
    :param QhZhouQi: 周期
    :param QhFuQuan: 复权
    :return: QSCODE|Q股票代码,TD|交易日期,OPEN|开盘价|元,CLOSE|收盘价|元,HIGH|最高价|元,LOW|最低价|元,
             VOL|成交量|笔,AMOUNT|成交额|元,ZDF|涨跌幅|小数,ZDE|涨跌额|元,
             ZF|振幅|小数,HSL|换手率|小数,ZQ|周期,FQ|复权,FROM|数据来源
    """

    # 结果数据初始化
    QhJieGuoDf = pd.DataFrame()
    # 复权类型字典  标准
    QhfltDicPbli = {"前复权": "B", "后复权": "C", "不复权": "A"}
    # 周期类型字典  标准
    QhkltDicPbli = {"日": "D", "周": "W", "月": "M", "季度": "Q", "半年": "HY", "年": "Y"}  # 周期类型

    if QhFrom=="DF": # 东方财富
        # 复权类型字典
        QhfltDic = {"前复权":"1","后复权":"2","不复权":"0"}
        # 周期类型字典
        QhkltDic = {"日":"101","周":"102","月":"103","季度":"104","半年":"105","年":"106"}  # 周期类型
        QhDfCoulmnsFloat = ["收盘","开盘","最高","最低","成交量","成交额","涨跌幅","涨跌额","振幅","换手率",]  # 待转浮点型数值的字段

        QhFuQuanBZ = QhfltDicPbli[QhFuQuan]  # 标准复权
        QhZhouQiBZ = QhkltDicPbli[QhZhouQi]  # 标准周期

        QhFuQuandf = QhfltDic[QhFuQuan]  # 东方复权
        QhZhouQidf = QhkltDic[QhZhouQi]  # 东方周期
        # 读取文件
        QhReadDf = QhReadCsv(QhJsonDb = QHDFDBJSON,
                             QhFactionKey = "QhDFStockHisJiaoYiFlow",
                             QhCsvPath = "QhCsvPath",
                             QhCsvName = "QhCsvName",
                             QhScode = QhScode,
                             )
        # 过滤数据
        QhReadGuoLvDf = QhReadDf[(QhReadDf["周期代码"] == int(QhZhouQidf)) & (QhReadDf["复权代码"] == int(QhFuQuandf))]
        # 数值转换
        QhReadGuoLvDf = QhChangeDataType(QhReadGuoLvDf,QhDfCoulmnsFloat,QhType=float)
        # 数据模型标准化
        QhJieGuoDf["QSCODE"] = QhReadGuoLvDf["Q股票代码"]
        QhJieGuoDf["TD"] = QhReadGuoLvDf["交易日期"]  # YYYY-MM-DD
        QhJieGuoDf["OPEN"] = QhReadGuoLvDf["开盘"]   # 单位:元
        QhJieGuoDf["CLOSE"] = QhReadGuoLvDf["开盘"]  # 单位:元
        QhJieGuoDf["HIGH"] = QhReadGuoLvDf["最高"]   # 单位:元
        QhJieGuoDf["LOW"] = QhReadGuoLvDf["最低"]    # 单位:元
        QhJieGuoDf["ZCLOSE"] = QhJieGuoDf["CLOSE"].shift(1)  # 单位:元
        QhJieGuoDf["VOL"] = QhReadGuoLvDf["成交量"]*100   # 单位:笔
        QhJieGuoDf["AMOUNT"] = QhReadGuoLvDf["成交额"]    # 单位:元
        QhJieGuoDf["ZDF"] = QhReadGuoLvDf["涨跌幅"]/100   # 单位:小数
        QhJieGuoDf["ZDE"] = QhReadGuoLvDf["涨跌额"]       # 单位:元
        QhJieGuoDf["ZF"] = QhReadGuoLvDf["振幅"]/100     # 单位:小数
        QhJieGuoDf["HSL"] = QhReadGuoLvDf["换手率"]/100  # 单位:小数
        QhJieGuoDf["JYBK"] = QhShiChang   # 交易板块 待完善
        QhJieGuoDf["ZQ"] = QhZhouQiBZ
        QhJieGuoDf["FQ"] = QhFuQuanBZ
        QhJieGuoDf["FROM"] = QhFrom

        print(QhJieGuoDf)

    return QhJieGuoDf

if __name__ == '__main__':
    QhHisModel(QhScode="Q000001", QhFrom="DF", QhShiChang="深交所A股", QhZhouQi="日", QhFuQuan="前复权")

    pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值