自己做量化交易软件(42)小白量化实战15--自编股票软件公式历史与聚宽量化平台仿大智慧指标回测设计(代码片段)

荷蒲 荷蒲     2023-03-24     623

关键词:

自己做量化交易软件(42)小白量化实战15–自编股票软件公式历史与聚宽量化平台仿大智慧指标回测设计

在1997年以前,市面上已经出现了很多股票分析软件。大多数软件都集成好了一些常用指标,例如钱龙股票分析系统,海融股票分 析系统,汇金股票分析系统,操盘手等等,各式股票软件,用户在使用时可以简单设置参数后,进行股票分析。例如改变均线指标参数 进行分析。
这些有固定指标的股票软件,满足不了股市中精明投资者的分析方法。因此出现了一些允许用户自己编写股票自编分析指标的股票 软件。其中比较有名的能写自编公式的股票软件是《分析家》和《指南针》股票分析软件。这些软件一出现,聚集了大量用户,一些会 写股票分析指标的用户,根据自己的经验写成自编公式卖给其他投资者。以前很多《分析家》和《指南针》自编公式等,网上叫卖数万 人民币。
随着是时间的推移,股票行情接收卡(例如通视卡等)捆绑销售,以及破解原因,有大量的《分析家》软件用户。另外《分析家》 自编股票公式语法最简洁,因此有很多人在上面开发分析家公式。
由于分析家股票公式系统,支持C++公式扩展,因此有很多既会软件开发,又懂投资分析的人员,例如荷蒲(百度:荷蒲公式,貔貅 公式)等,用C++开发出的指标,远远超越分析家软件提供功能的股票分析应用,丰富了股票软件创新。其中现在股软所具备的基本功能 ,都是荷蒲在1999年以前所发明创造。例如股票文字提示,股票股评,信息雷达,横向统计,四方图分析,预测日周成交量,交易机器 人指标等等。这些新分析技术的发明与分析家所支持的C++指标扩展开发,必不可少。C++公式开发,增强了分析家现有的分析指标和分 析工具。
1999年底,《飞狐交易师》测试版发布,邀请荷蒲加入首席测试师,进行测试和提供改进意见。荷蒲提出分析家C++实现公式横向统 计很不方便,希望飞狐交易师固化成基本功能。《飞狐交易师》吸收了网上的全部分析家公式系统的创新功能,一些荷蒲所开发的C++公 式函数,也集成为基本功能。例如判断是否为最后一个周期ISLASTBAR,早期公式系统没有类似功能函数,荷蒲用C++公式函数来实现的 。荷蒲开发分析家节气函数,也包含在《飞狐交易师》函数。此外《飞狐交易师》还根据荷蒲等人建议,增加了自然日K线分析,周易分 析,农历日期坐标。此外根据荷蒲建议增加了指标函数双变参数建议,一般指标第一个参数是序列,第2个参数是固定数值。例如MA (C,N),N参数在分析家中为固定数值。在《飞狐交易师》中为变化序列。尽管荷蒲用C++也实现了第二变参,使用起来不够方便。《飞狐 交易师》一些函数可以使用第二变参,第三变参等等。例如MA(C,INT(C/10)),实现不定长均线。
《飞狐交易师》除了支持《分析家》公式源代码,还支持分析家的C++公式文件。因此荷蒲的分析家指标,能够完美移植到《飞狐交易师 》。《飞狐交易师》自己C++接口,支持公式函数第二变参,第三变参等等。
数据序列移动,在投资分析上称为“引用未来数据”,分析家原始函数只支持后引用REF(C,N)函数,荷蒲用C++开发了前引用REFX (C,N)函数,即今天指标值计算依赖明天其他指标计算数据。我初始设计不是为了所谓造假,因为我在分析家上利用此功能开发了一套“ 龙霸指标操盘系统”,大户庄家可用通过改变未来行情数值,预先看到未来行情指标走势,可以给“技术指标派”挖坑骗线。《分析家 》软件不能右移位画K线,《飞狐交易师》可以右移位画K线和指标。因此通过REFX()函数,预先设置未来几日行情数据,例如CLOSE、 HIGH、LOW、VOL等等,通过右移位画K线和指标,动态调整行情参数,可以看到用户自编指标在此行情下的指标变化。如果未来主力控 制好行情价格,指标交叉等结果,就是主力的设想。能够精确实现未来指标走势控制的能力。
2000年后又出现了一些支持用户自编指标公式的股票软件,例如《通达信》、《同花顺》、《大智慧》等软件。开始这些软件公司 的指标公式语法,都是自己新开发的,后来发现根本没法跟《分析家》公式语法可比,因此《通达信》和《同花顺》后来指标语法开始兼容《分析家 》公式。
《大智慧》软件公司于2006前后,收购了《分析家》,因此新一代大智慧就继承了分析家内核,完美支持分析家公式和分析家C++开发的 公式。因此至今只有《飞狐交易师》和《大智慧》完美支持荷蒲1997年之今开发的C++指标(https://mp.weixin.qq.com/s/c9J-d30haP5nonU3bjiwSg)。1999年开发的主力进出C++指标,至 今还能在大智慧软件中正常运行,指标算法,至今没几个人能破解。看我的博客https://blog.csdn.net/hepu8/article/details/111996255
2016年用Python开发的人工智能程序“阿法狗”围棋软件战胜了人类专业棋手。作者编写过围棋软件(百度:荷蒲围棋),以传统思路发展硬件和软件在100年内,电脑无法战胜人类,因为2的361次方递归计算是无法实现得的,电脑国际象棋依赖小型机的海量存储和巨大计算潜能,才战胜了人类优秀棋手。这些算法在围棋上不可复制。
2016年人工智能围棋软件战胜人类专业棋手,让作者看到了一道曙光,电脑人工智能能在围棋上战胜人类棋手,那么一定可以利用人工智能软件,编写出全自动交易的赚钱的“摇钱树”。
作者是仿分析家软件指标公式编写高手,自然想到将分析家软件指标公式语法格式移植到Python量化软件上了。因此由作者编写的小白Python量化系统,利用Python的一维数组,以及矢量数学计算的特性,实现了仿分析家公式指标计算。
利用小白量化股股票公式函数模块,很容易将仿分析家公式指标移植到Python量化环境中。除了在小白量化系统中使用仿分析家自编公式指标计算外,还可以用于其他量化平台。
移植步骤如下:

  1、你的自编指标先在通达信软件或小白量化框架上回测调整到参数最优。
  2、你打算实战时,就可以把这个指标移植到其他量化平台了。
  3、把你的指标和指标所有的函数,都复制到你用户策略的开头,分析就可以采用仿分析家公式处理。
  4、在用户交易函数中,进行仿分析家公式处理,来获取买卖点。
  5、这种方式,可以把你的自编通达信指标,大智慧指标等,移植到任何量化平台。

下面我们给出聚款平台上的仿大智慧自编指标的回测代码。我们已自编公式KDJ指标为例子,读者可以把指标替换为自己的自编指标公式来在聚宽量化平台回测或实战交易。

聚宽量化平台回测仿大智慧指标回测代码如下:

#购买<零基础搭建量化投资系统>正版书,送小白量化软件源代码。
# https://item.jd.com/61567375505.html
#独狼荷蒲qq:2775205
#小白python量化群: 524949939
#小白python量化群2: 983815766
#电话微信:18578755056
#微信公众号:独狼股票分析

# 导入函数库
from jqdata import *
import pandas as pd  
import numpy  as np

##小白量化股票数据格式同ts旧版数据格式
## jqtots来源HP_data
def jqtots(df1):  #聚宽格式转ts格式
    a=[x.strftime("%Y-%m-%d") for x in df1.index]
    df1.insert(0,'date',a)
    df1=df1.reset_index(level=None, drop=True ,col_level=0, col_fill='')  
    return df1

global CLOSE,LOW,HIGH,OPEN,VOL
##从小白量化公式函数库中复制.
## 函数来源 HP_formula
def MA(Series, N):
    return pd.Series.rolling(Series, N).mean()

def HHV(Series, N=0):
    if N==0:
        return Series.cummax()
    else:
        return pd.Series(Series).rolling(N).max()

def LLV(Series, N=0):
    if N==0:
        return Series.cummin()
    else:
        return pd.Series(Series).rolling(N).min()

def EMA(Series, N):
    var=pd.Series.ewm(Series, span=N, min_periods=N - 1, adjust=True).mean()
    if N>0:
        var[0]=0
        #y=0
        a=2.00000000/(N+1)
        for i in range(1,N):
            y=pd.Series.ewm(Series, span=i, min_periods=i - 1, adjust=True).mean()
            y1=a*Series[i]+(1-a)*y[i-1]
            var[i]=y1
    return var

def CROSS(A, B):
    A2=np.array(A)
    var = np.where(A2<B, 1, 0)
    return (pd.Series(var, index=A.index).diff()<0).apply(int)
       
##下面开始写用户自编股票公式
def KDJ(N=9, M1=3, M2=3):
    global CLOSE,LOW,HIGH,OPEN,VOL
    """
    KDJ 随机指标
    """
    RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
    K = EMA(RSV, (M1 * 2 - 1))
    D = EMA(K, (M2 * 2 - 1))
    J = K * 3 - D * 2
    return K, D, J


# 初始化函数,设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 输出内容到日志 log.info()
    log.info('初始函数开始运行且全局只运行一次')
    # 过滤掉order系列API产生的比error级别低的log
    # log.set_level('order', 'error')

    ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

    ## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG''510300.XSHG'是一样的)
      # 开盘前运行
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')
      # 开盘时运行
    run_daily(market_open, time='open', reference_security='000300.XSHG')
      # 收盘后运行
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')

## 开盘前运行函数
def before_market_open(context):
    # 输出运行时间
    log.info('函数运行时间(before_market_open):'+str(context.current_dt.time()))

    # 给微信发送消息(添加模拟交易,并绑定微信生效)
    # send_message('美好的一天~')

    # 要操作的股票:(g.为全局变量)
    g.security = '600519.XSHG'

## 开盘时运行函数
def market_open(context):
    global CLOSE,LOW,HIGH,OPEN,VOL
    current_date = context.current_dt.date()
    # 取得当前的现金
    cash = context.portfolio.available_cash
    log.info('函数运行时间(market_open):'+str(context.current_dt.time()))
    security = g.security
    # 获取股票的收盘价
    df = get_price(security, start_date='2020-11-01', end_date=current_date, fields=['open', 'close', 'low', 'high', 'volume'])
    mydf=jqtots(df)
    CLOSE=mydf['close']
    LOW=mydf['low']
    HIGH=mydf['high']
    OPEN=mydf['open']
    VOL=mydf['volume']
    mydf['s80']=80
    
    k,d,j=KDJ()
    mydf['k']=k
    mydf['d']=d
    mydf['j']=k
    
    mydf['buy']=CROSS(k,d)   #k上穿d
    mydf['sell']=CROSS(mydf['s80'],k)  #k下穿80
    log.info(mydf)
    buy=list(mydf['buy'])
    sell=list(mydf['sell'])
    if buy[-1]>0:
        log.info('买')
    if sell[-1]>0:
        log.info('卖')

    # 如果上一时间点价格高出五天平均价1%, 则全仓买入
    if (buy[-1]>0) and (cash > 0):
        # 记录这次买入
        log.info("价格高于均价 1%%, 买入 %s" % (security))
        # 用所有 cash 买入股票
        order_value(security, cash)
    # 如果上一时间点价格低于五天平均价, 则空仓卖出
    elif (sell[-1]>0) and context.portfolio.positions[security].closeable_amount > 0:
        # 记录这次卖出
        log.info("价格低于均价, 卖出 %s" % (security))
        # 卖出所有股票,使这只股票的最终持有量为0
        order_target(security, 0)


## 收盘后运行函数
def after_market_close(context):
    log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))
    #得到当天所有成交记录
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交记录:'+str(_trade))
    log.info('一天结束')
    log.info('##############################################################')

程序运行结果如下图。

此篇文章,说明小白量化的金融模块的广泛用途,如果有空,我再给出其他量化平台依赖小白量化模块实现仿大智慧和仿通达信指标的实现示例代码。

请持续关注我的博客,我的进步,就是你的进步!

自己做量化交易软件(45)小白量化实战18--直接使用通达信自编指标公式进行分析绘图和回测(代码片段)

自己做量化交易软件(45)小白量化实战18–直接使用通达信自编指标公式进行分析绘图和回测小白量化一代提供了Python公式算法模式来写量化程序。小白量化二代提供了仿通达信公式的模式来写量化程序。小白量化三代除了仿通达... 查看详情

自己做量化交易软件(45)小白量化实战18--直接使用通达信自编指标公式进行分析绘图和回测(代码片段)

自己做量化交易软件(45)小白量化实战18–直接使用通达信自编指标公式进行分析绘图和回测小白量化一代提供了Python公式算法模式来写量化程序。小白量化二代提供了仿通达信公式的模式来写量化程序。小白量化三代除了仿通达... 查看详情

自己做量化交易软件(43)小白量化实战16--利用小白量化金融模块在恒生ptrade交易系统(交易端)上仿大智慧指标回测及实战交易设计(代码片段)

自己做量化交易软件(43)小白量化实战16–利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计量化产品PTrade(PersonaliseTrade)交易系统采用事件驱动式回测平台,与聚宽量化平台类似的量化框... 查看详情

自己做量化交易软件(44)小白量化实战17--利用小白量化金融模块在迅投qmt极速策略交易系统上仿大智慧指标回测及实战交易设计(代码片段)

自己做量化交易软件(44)小白量化实战17–利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计小白量化平台是由若干小白金融模块构成。其中包含行情接收模块,仿通达信大智慧公式计算模... 查看详情

小白量化《穿云箭集群量化》指标公式写策略(代码片段)

...个月(只需要看懂,能复制粘贴修改,不需要自己从头写代码)。很快就能实现全自动交易。走其他路线学量化,大学文化,全职学会Python要一学期,学会数据结构和算法要一学期,还要学习其他... 查看详情

量化交易实战之市值中性化选股

可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。1.获取市值和市净率因子数据因子:极值,标准化,中性化处理2.选定股票池(根据方向权重)市净率小的某些股票fromsklearn.linear_modelimportLinearRegression在这个方法中编写... 查看详情

小白量化《穿云箭集群量化》小白草根超级量化软件介绍

小白量化《穿云箭集群量化》(1)小白草根超级量化软件介绍这是一个系列课程,教授大家编写高级量化策略以及实现全自动交易。Python有很多优点,跨平台,跨操作系统,支持大数据、人工智能等等ÿ... 查看详情

机器学习与量化交易项目班[从零搭建自动交易系统]

...:回测,自动交易,策略建模,常见平台使用第三课搭建自己的量化数据库知识点1:软件需求,数据获取方式,数据存储方式实战项目:金融数据的存储,读取第四课用Python进行金融数据分析知识点1:数据清理与特征选择实战... 查看详情

小白量化《穿云箭集群量化》小白草根超级量化软件介绍

小白量化《穿云箭集群量化》(1)小白草根超级量化软件介绍这是一个系列课程,教授大家编写高级量化策略以及实现全自动交易。Python有很多优点,跨平台,跨操作系统,支持大数据、人工智能等等ÿ... 查看详情

小白量化《穿云箭集群量化》小白草根超级量化软件介绍

小白量化《穿云箭集群量化》(1)小白草根超级量化软件介绍这是一个系列课程,教授大家编写高级量化策略以及实现全自动交易。Python有很多优点,跨平台,跨操作系统,支持大数据、人工智能等等ÿ... 查看详情

python量化交易实战:获取股票数据并做分析处理(代码片段)

...买、网络爬取、免费开源数据等)和内部来源(自己企业销售数据、财务数据等)。因为我们不生产数据,所以只能从外部获取数据。其获取途径是第三方开源库tushare。使用tushare获取历史股票数据tushare是一个免... 查看详情

个人量化交易者的自由之路

...做量化交易的个人交易者来说,需要以下几步;第一、有自己根据接口独立开发的交易系统。文华财经、交易开拓者、金字塔除外。第二、有自己完备的交易策略,根据自己的喜好,进行开发CTA、高频交易、套利交易等。 目... 查看详情

个人量化交易者的自由之路(转)

...做量化交易的个人交易者来说,需要以下几步;第一、有自己根据接口独立开发的交易系统。文华财经、交易开拓者、金字塔除外。第二、有自己完备的交易策略,根据自己的喜好,进行开发CTA、高频交易、套利交易等。 目... 查看详情

小白量化彩票实战彩票号码中六保五缩水和旋转矩阵(代码片段)

小白量化彩票实战(6)彩票号码中六保五缩水和旋转矩阵我写彩票的博客,不是鼓励大家去买彩票,读者要以学习编程和娱乐的思想来看待。兴趣是学习最大的动力!我编写彩票软件都有近十多年时间,一直没... 查看详情

量化机器人系统开发_量化交易机器人软件app搭建

量化交易机器人app已成最火爆的项目,而关于量化机器人的开发研究,有不少可以给大家分享的东西量化机器人的功能分享:1.软件的前端界面选择交易平台、API授权、选择交易对品类;2.交易策略的选择、参数的设置  ... 查看详情

量化智能对冲搬砖交易系统开发,自动交易软件开发

...得滋润。而作为平台则需要开发API为他们提供渠道,这样自己平台的交易量也会被拉升,有了交易量,平台收益自然得到了解决。量化智能对冲搬砖交易系统作为一种智能化的软件,能够在熊市为更多的用户提供一定的帮助。量... 查看详情

视频教程-从编程小白到量化宗师之路---backtrader从数据采集到实盘交易-python

从编程小白到量化宗师之路---BackTrader从数据采集到实盘交易20年企业以及互联网软件开发经验,开发过互联网广告、大型企业组织项目资产管理、股票期货数字货币高频自动化交易系统、全市场数据流图式分析系统等,... 查看详情

量化交易项目怎么做

**同学们前面两期量化交易内容:**Python量化交易入门量化交易的历史文章目录学习目标:1、量化交易研究流程1.1分析结果1.2什么是策略1.3流程包含的内容二、量化开发和研究岗位的要求学习目标:1、说明量化交易的... 查看详情