HQChart指标计算引擎-py接口类FastHQChart介绍
Py接口封装
对c++指标动态库使用py类进行封装, 方便在py中使用, 一共包含2个类 FastHQChart(操作类),IHQData(数据类)。文件在hqchartpy2_fast.py
导入方法
from hqchartpy2_fast import FastHQChart,IHQData
FastHQChart
指标计算操作类都是公共静态成员函数
Initialization
@staticmethod
def Initialization(Key=None)
初始化指标动态库, 主要完成加载动态库,获取指标计算动态库版本信息,及授权信息。
Key 授权码, 需要测试用户可以向群主索要 提供 MAC地址和手机号, 免费开通1个月。
Run
@staticmethod
def Run(jsonConfig, hqData, proSuccess=None,procFailed=None):
单/多股票指标执行
jsonConfig 指标配置
hqData 行情数据 (通过派生IHQData对接数据)
proSuccess 执行成功回调函数
procFailed 执行失败回调函数
jsonConfig 指标配置说明
指标配置使用json格式来配置
Name 系统指标名字/ID ,如果填了下面的Script就可以不填,直接调用系统指标脚本,系统指标录入详见HQChart(C++)指标计算引擎-系统指标
Script 指标脚本(必填)
Args 指标参数数组类型(可选)
Period 周期(可选) 默认0
4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟
0=日线 1=周线 2=月线 3=年线 9=季线 21=双周
Right 复权(可选)默认0
0=不复权 1=前复权 2=后复权
Symbol 执行的股票, 如果是Symbol填一个股票, 如果是Symbol填股票数组
OutCount 输出数据个数(可选) 默认-1 全部数据,1=输出最后1个数据 2=输出最后2个数据 以此类推
JobID 指标执行的ID(可选)
单股票指标配置用例
runConfig={
# 指标脚本
"Script":'''
KF:=(O-REF(C,1))/REF(C,1)*100;
ZF:=(C-REF(C,1))/REF(C,1)*100;
限幅:=KF<3.82 AND KF>-3.82;
ZT:=C>1.1*REF(C,1)-0.01 AND C<1.1*REF(C,1)+0.01 AND C=H;
一字:=C>1.1*REF(C,1)-0.01 AND C<1.1*REF(C,1)+0.01 AND H=O AND L=H;
去一:=NOT(一字);
XG:限幅 AND 去一 AND BARSSINCE(C<>O AND BARSCOUNT(CLOSE)<>1)>30 AND O<>HHV(H,2);
''',
# 脚本参数
"Args":[ { "Name": 'N1', "Value": 5 },{ "Name": 'N2', "Value": 10 },{ "Name": 'N3', "Value": 15 } ],
# 周期 复权
"Period":0, "Right":0,
# 执行的股票
"Symbol":"600000.sh",
#jobID (可选)
"JobID":"1234-555-555"
}
jsConfig = json.dumps(runConfig) # 运行配置项
多股票指标配置用例
runConfig={
# 执行的脚本
"Script":'''
JJ:=(HIGH+LOW+CLOSE)/3;
QJ0:=VOL/IF(HIGH=LOW,4,HIGH-LOW);
QJ1:=QJ0*(MIN(OPEN,CLOSE)-LOW);
QJ2:=QJ0*(JJ-MIN(CLOSE,OPEN));
QJ3:=QJ0*(HIGH-MAX(OPEN,CLOSE));
QJ4:=QJ0*(MAX(CLOSE,OPEN)-JJ);
DDX:=IF(HIGH=LOW,4*QJ0,((QJ1+QJ2)-(QJ3+QJ4)))/SUM(VOL,10)*100;
DDY:=((QJ2+QJ4)-(QJ1+QJ3))/SUM(VOL,10)*100;
DDZ:=((QJ1+QJ2)-(QJ3+QJ4))/((QJ1+QJ2)+(QJ3+QJ4))*100*17;
AA:((DDX+DDY+DDZ)/3);
''',
# 脚本参数
"Args":[ { "Name": 'N1', "Value": 5 },{ "Name": 'N2', "Value": 10 },{ "Name": 'N3', "Value": 15 } ],
# 周期 复权
"Period":0, "Right":0,
# 股票池
"Symbol":["600000.sh","600007.sh","000001.sz","600039.sh"],
# 输出数据个数 如果只需要最后几个数据可以填几个的个数, 数据从最后开始返回的, 如1=返回最后1个数据 2=返回最后2个数组, -1=返回所有的数据
"OutCount":1,
# 单个股票执行完是否立即清空缓存, 更具K线个数配置, 不清空缓存到占用很多内存 (默认False)
"ClearCache":True
}
jsConfig = json.dumps(runConfig) # 运行配置项
执行结果返回接收接口
proSuccess
股票执行成功回调, 每只股票执行指标成功以后都会触发这个回调
函数格式:
def RunSuccess(symbol, jsData, jobID):
symbol 执行成功的股票代码
jsData 执行的结果数据, json格式的
jobID 执行的job的ID, 对应jsConfig中的JobID
procFailed
指标执行失败以后触发回调
格式:
def RunFailed(code, symbol, error,jobID) :
code 脚本内容
symbol 执行失败的股票代码
error 错误信息
jobID 执行的job的ID, 对应jsConfig中的JobID
简单的执行结果接收demo类HQResultTest
class HQResultTest():
def __init__(self):
self.Result = [] # 保存所有的执行结果
self.IsOutLog=True # 是否输出日志
# 执行成功回调
def RunSuccess(self, symbol, jsData, jobID):
self.Result.append({"Symbol":symbol, "Data":jsData}) # 保存结果
if (self.IsOutLog) :
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)
单股票指标demo
# 单股票指标
def TestSingleStock() :
runConfig={
"Script":'''
KF:=(O-REF(C,1))/REF(C,1)*100;
ZF:=(C-REF(C,1))/REF(C,1)*100;
限幅:=KF<3.82 AND KF>-3.82;
ZT:=C>1.1*REF(C,1)-0.01 AND C<1.1*REF(C,1)+0.01 AND C=H;
一字:=C>1.1*REF(C,1)-0.01 AND C<1.1*REF(C,1)+0.01 AND H=O AND L=H;
去一:=NOT(一字);
XG:限幅 AND 去一 AND BARSSINCE(C<>O AND BARSCOUNT(CLOSE)<>1)>30 AND O<>HHV(H,2);
''',
# 脚本参数
"Args":[ { "Name": 'N1', "Value": 5 },{ "Name": 'N2', "Value": 10 },{ "Name": 'N3', "Value": 15 } ],
# 周期 复权
"Period":0, "Right":0,
"Symbol":"600000.sh",
#jobID (可选)
"JobID":"1234-555-555"
}
jsConfig = json.dumps(runConfig) # 运行配置项
hqData=HQChartData() # 实例化数据类
result=HQResultTest() # 实例计算结果接收类
result.IsOutLog=True
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)
# 调用
FastHQChart.Initialization()
TestSingleStock()
多股票指标demo
# 股票池
def TestMultiStock() :
runConfig={
# 执行的脚本
"Script":'''
JJ:=(HIGH+LOW+CLOSE)/3;
QJ0:=VOL/IF(HIGH=LOW,4,HIGH-LOW);
QJ1:=QJ0*(MIN(OPEN,CLOSE)-LOW);
QJ2:=QJ0*(JJ-MIN(CLOSE,OPEN));
QJ3:=QJ0*(HIGH-MAX(OPEN,CLOSE));
QJ4:=QJ0*(MAX(CLOSE,OPEN)-JJ);
DDX:=IF(HIGH=LOW,4*QJ0,((QJ1+QJ2)-(QJ3+QJ4)))/SUM(VOL,10)*100;
DDY:=((QJ2+QJ4)-(QJ1+QJ3))/SUM(VOL,10)*100;
DDZ:=((QJ1+QJ2)-(QJ3+QJ4))/((QJ1+QJ2)+(QJ3+QJ4))*100*17;
AA:((DDX+DDY+DDZ)/3);
''',
# 脚本参数
"Args":[ { "Name": 'N1', "Value": 5 },{ "Name": 'N2', "Value": 10 },{ "Name": 'N3', "Value": 15 } ],
# 周期 复权
"Period":0, "Right":0,
# 股票池
"Symbol":["600000.sh","600007.sh","000001.sz","600039.sh"],
# 输出数据个数 如果只需要最后几个数据可以填几个的个数, 数据从最后开始返回的, 如1=返回最后1个数据 2=返回最后2个数组, -1=返回所有的数据
"OutCount":1
}
jsConfig = json.dumps(runConfig) # 运行配置项
hqData=HQChartData() # 实例化数据类
result=HQResultTest() # 实例计算结果接收类
result.IsOutLog=False
start = time.process_time()
res=FastHQChart.Run(jsConfig,hqData,proSuccess=result.RunSuccess, procFailed=result.RunFailed)
elapsed = (time.process_time() - start)
log="执行指标 Time used:{0}, 股票个数:{1}".format(elapsed, len(runConfig['Symbol']))
print(log)
# 执行
key="***授权码"
FastHQChart.Initialization(key)
TestMultiStock()
交流
如果有什么问题或需求可以加交流QQ群: 950092318 联系群主(QQ48274798)