HQChart(C++)指标计算引擎-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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HQChart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值