hqchartPy2数据对接教程1-K线数据

K线获取接口函数

函数定义

class IHQData(object):
	# K线数据
	def GetKLineData(self, symbol, period, right, jobID) :

参数说明

symol

股票代码

period

周期
0=日线 1=周线 2=月线 3=年线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 9=季线 10=分笔

right

复权
0=不复权 1=前复权 2=后复权

jobID

任务id

返回数据格式

返回一个字典类型的数据

name

股票名称 字符串

period

周期 数值型

right

复权 数值型

yclose

前收盘价 数值型数组

open

开盘价 数值型数组

high

最高价 数值型数组

low

最低价 数值型数组

close

收盘价 数值型数组

vol

成交量 数值型数组

amount

成交金额

tushare数据对接例子

使用 pro_bar 数据接口获取K线数据,接口说明见https://waditu.com/document/2?doc_id=146

TushareHQChartData

新建一个tushare数据类TushareHQChartData
TusharePro tushare数据类接口
StartDate 指标计算的起始时间
EndDate 指标计算的结束时间

在TushareHQChartData的构造函数中首先设置一个tushare的token, 后面就可以用tushare获取数据了。

HQResultTest

计算数据结果类
指标计算结果成功/异常都是通过回调直接发送到这个类里面,可以在这个类里面保存结果数据

class HQResultTest():
    def __init__(self):
        self.Result = []    # 保存所有的执行结果
    
     # 执行成功回调
    def RunSuccess(self, symbol, jsData, jobID):
        self.Result.append({
    
    "Symbol":symbol, "Data":jsData})  # 保存结果
        log="{0} success".format(symbol)
        print (log)
        print (jsData)

    # 执行失败回调
    def RunFailed(self, code, symbol, error,jobID) :
        log="{0}\n{1} failed\n{2}".format(code, symbol,error)
        print(log)

注意点

  1. K线数据降序排
  2. date 日期 数值类型 格式YYYYMMDD 如: 20201012 =>2020-10-12
  3. time 时间 数值类型 格式HHMM 如 945=>9:45 , 1421=>14:21

K数据对接代码

class TushareHQChartData(IHQData) :
    def __init__(self, token, startDate, endDate):
        ts.set_token(token) 
        self.TusharePro = ts.pro_api()
        self.StartDate=startDate
        self.EndDate=endDate
    
    def GetKLineData(self, symbol, period, right, jobID) :
        # 复权 0=不复权 1=前复权 2=后复权
        fq=None # 复权
        if (right==1) : # 前复权
            fq="qfq"
        elif (right==2) :   # 后复权
            fq="hfq"

        # 周期 0=日线 1=周线 2=月线 3=年线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 9=季线 10=分笔
        freq='D'
        if (period==1) :
            freq="W"
        elif (period==2):
            freq="M"
        elif (period==4):
            freq="1MIN"
        elif (period==5):
            freq="5MIN"
        elif (period==6):
            freq="15MIN"
        elif (period==7):
            freq="30MIN"
        elif (period==8):
            freq="60MIN"

        df = ts.pro_bar(ts_code=symbol, adj=fq, start_date=str(self.StartDate), end_date=str(self.EndDate),freq=freq)
        # df = self.TusharePro.daily(ts_code=symbol, start_date='20200101', end_date='20201231')
        df=df.sort_index(ascending=False) # 数据要降序排
        print(df)

        cacheData={
    
    }
        if (period in (0,1,2,3,9)) :
            # 日期转int
            aryDate=df["trade_date"]
            aryDate[aryDate == ''] = 0
            aryDate = aryDate.astype(np.int)
            dataCount=len(aryDate) 
            cacheData['count']=dataCount    # 数据个数
            cacheData["date"]=aryDate.tolist()
        else :
            aryDateTime=df["trade_time"]
            dataCount=len(aryDateTime) 
            cacheData['count']=dataCount    # 数据个数
            aryDateTime= pd.to_datetime(aryDateTime, format="%Y-%m-%d %H:%M:%S")
            print(aryDateTime)
            aryDate=[]
            aryTime=[]
            for item in aryDateTime :
                aryDate.append(item.year*10000 + item.month* 100  + item.day)
                aryTime.append(item.hour*100+item.minute)
            cacheData["time"]=aryTime
            cacheData["date"]=aryDate

        
        cacheData['name']=symbol        # 股票名称
        cacheData['period']=period      # 周期
        cacheData['right']=period       # 不复权

        cacheData["yclose"]=np.array(df["pre_close"]).tolist()
        cacheData["open"]=np.array(df["open"]).tolist()
        cacheData["high"]=np.array(df["high"]).tolist()
        cacheData["low"]=np.array(df["low"]).tolist()
        cacheData["close"]=np.array(df["close"]).tolist()
        cacheData["vol"]=np.array(df["vol"]).tolist()
        cacheData["amount"]=np.array(df["amount"]).tolist()
        
        log="K线:{0} - period={1} right={2} count={3}".format(symbol,period,right,dataCount)
        print(log)

        return cacheData

**注意:分钟数据没有测试过,因为tushare分钟数据需要付费购买,如果有朋友提供账户,我可以把分钟数据的例子也加上 **

测试脚本

def TestSingleStock() :
    # 授权码
    key="授权码"
    FastHQChart.Initialization(key)

    runConfig={
    
    
        # 系统指标名字
        # "Name":"MA",
        "Script":'''
        T:MA(C,M1);
        T2:MA(C,M2);
        T3:MA(C,M3);
        ''',
        # 脚本参数
        "Args": [ {
    
     "Name":"M1", "Value":15 }, {
    
     "Name":"M2", "Value":20 }, {
    
     "Name":"M3", "Value":30} ],
        # 周期 复权
        "Period":0, "Right":1,
        "Symbol":"600000.sh",

        #jobID (可选)
        "JobID":"1234-555-555"
    }

    jsConfig = json.dumps(runConfig)    # 运行配置项
    hqData=TushareHQChartData("tushare的token",startDate=20200421, endDate=20201231)    # 实例化数据类
    result=HQResultTest()   # 实例计算结果接收类

    start = time.process_time()

    res=FastHQChart.Run(jsConfig,hqData,proSuccess=result.RunSuccess, procFailed=result.RunFailed)

    elapsed = (time.process_time() - start)
    log="TestSingleStock() Time used:{0}, 股票{1}".format(elapsed, runConfig['Symbol'])
    print(log)

数据结果截图

在这里插入图片描述

交流QQ群

如果有什么问题或需求可以加交流QQ群: 950092318** 联系群主(QQ48274798)

hqchartPy动态库地址

https://github.com/jones2000/HQChart/tree/master/C++指标计算引擎/py版本

HQChart代码地址

地址:https://github.com/jones2000/HQChart

猜你喜欢

转载自blog.csdn.net/jones2000/article/details/112060412