hqchartPy2数据对接教程5-引用指定股票数据函数
效果图
引用指定股票数据
通达信 $操作符
例如:“000014$CLOSE”,表示取000014的收盘价,注意加入双引号.
可在前面加SZ(深市),SH(沪市),或市场_,“SZ000001$CLOSE"表示平安银行,”
例子
如:绘制一个平安银行的K线图
收盘价:"000001$CLOSE",NODRAW;
开盘价:"000001$OPEN",NODRAW;
最高价:"000001$HIGH",NODRAW;
最低价:"000001$LOW",NODRAW;
DRAWKLINE(最高价,开盘价,最低价,收盘价);
hqchart 引用指定股票数据函数
CLOSE(品种代码)/C(品种代码)
收盘价
VOL(品种代码)/V(品种代码)
成交量
OPEN(品种代码)/O(品种代码)
开盘价
HIGH(品种代码)/H(品种代码)
最高价
LOW(品种代码)/L(品种代码)
最低价
AMOUNT(品种代码)/AMO(品种代码)
成交金额
VOLINSTK(品种代码)
持仓量 (期货才有)
例子
绘制一个平安银行的K线图
脚本:
收盘价:C("000001.SZ"),NODRAW;
开盘价:O("000001.SZ"),NODRAW;
最高价:H("000001.SZ"),NODRAW;
最低价:L("000001.SZ"),NODRAW;
DRAWKLINE(最高价,开盘价,最低价,收盘价);
接口函数格式
# 获取其他K线数据
def GetKLineData2(self, symbol, period, right, callInfo, kdataInfo, jobID) :
pass
参数说明
symol
股票代码
period
周期
0=日线 1=周线 2=月线 3=年线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 9=季线 10=分笔
right
复权
0=不复权 1=前复权 2=后复权
callInfo
调用函数信息 ‘000001$CLOSE’
jobID
任务id
kdataInfo
当前k线信息 字典类型
返回数据格式
返回一个字典类型的数据
name
股票名称 字符串
period
周期 数值型
right
复权 数值型
yclose
前收盘价 数值型数组
open
开盘价 数值型数组
high
最高价 数值型数组
low
最低价 数值型数组
close
收盘价 数值型数组
vol
成交量 数值型数组
amount
成交金额
tushare数据对接例子
使用 pro_bar 数据接口获取K线数据,接口说明见https://waditu.com/document/2?doc_id=146
class TushareHQChartData(IHQData) :
# 获取其他K线数据
def GetKLineData2(self, symbol, period, right, callInfo, kdataInfo, jobID) :
if (callInfo.find('$')>0) : #没有后缀的股票要加上后缀
if (symbol.find(".")<=0) :
if (symbol[:3]=='600' or symbol[:3]=="688") :
symbol+=".SH"
elif (symbol[:3]=="000" or symbol[:2]=="30") :
symbol+=".SZ"
return self.GetKLineAPIData(symbol, period, right, kdataInfo["StartDate"], kdataInfo["EndDate"])
# 获取K线API数据
def GetKLineAPIData(self, symbol, period, right, startDate, endDate) :
# 复权 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"
try :
print("[TushareHQChartData::GetKLineAPIData] ts.pro_bar(ts_code={0}, adj={1}, start_date={2}, end_date={3}, freq={4})".format(symbol, fq, startDate, endDate, freq))
df = ts.pro_bar(ts_code=symbol, adj=fq, start_date=str(startDate), end_date=str(endDate),freq=freq)
# df = self.TusharePro.daily(ts_code=symbol, start_date='20200101', end_date='20201231')
except Exception as e:
print('[TushareHQChartData::GetKLineAPIData] Error. throw exception {0},'.format(e))
return { "error":str(e) }
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']=right # 不复权
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} date=[{4}, {5}]".format(symbol,period,right,dataCount, startDate, endDate)
print(log)
return cacheData
交流QQ群
如果有什么问题或需求可以加交流QQ群: 950092318** 联系群主(QQ48274798)
hqchartPy动态库地址
https://github.com/jones2000/HQChart/tree/master/C++指标计算引擎/py版本
HQChart代码地址
地址:https://github.com/jones2000/HQChart
个人爱好(模型/摄影)