自己做量化交易软件(42)小白量化实战15–自编股票软件公式历史与聚宽量化平台仿大智慧指标回测设计
2024-10-20 14:02:24发布 浏览374次 信息编号:190086
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
自己做量化交易软件(42)小白量化实战15–自编股票软件公式历史与聚宽量化平台仿大智慧指标回测设计
制作属于你自己的量化交易软件(42)初学者量化实践15——自编股票软件公式历史及巨款量化平台仿大智慧指标回测设计
1997年之前,市场上有很多股票分析软件。大多数软件都集成了一些常用的指标,如千龙股票分析系统、海融股票分析系统、汇金股票分析系统、操盘手等,用户在使用各种股票软件时,只需简单设置参数即可进行股票交易。分析。例如,更改移动平均线指标参数进行分析。
这些指标固定的股票软件并不能满足聪明投资者对股市的分析方法。因此,出现了一些股票软件,允许用户编写自己的股票分析指标。其中比较著名的可以编写自写公式的股票软件有“”和“”股票分析软件。这些软件一出现,就聚集了大量的用户。一些会编写股票分析指标的用户根据自己的经验编写了自己编写的公式,并将其出售给其他投资者。过去,很多和都是自己编制公式,在网上卖到几万人民币。
随着时间的推移,股票行情接收卡(如显卡等)被捆绑销售,并且由于破解原因,出现了大量的“分析师”软件用户。另外,“分析师”自编的股票公式语法最简单,所以很多人都以此为基础开发分析师公式。
由于分析师股票公式系统支持C++公式扩展,因此有很多既懂软件开发又懂投资分析的人,比如合普(百度:合普公式、貔貅公式)等,使用C++开发的指标要受欢迎得多。股票分析应用程序远远超出了分析师软件提供的功能,丰富了股票软件创新。其中,现在股票软件具备的基本功能都是合普在1999年之前发明的。例如股票文字提示、股票评论、信息雷达、横向统计、四方图分析、日周交易量预测、交易机器人等。这些新分析技术的发明以及分析师支持的 C++ 指标扩展的开发至关重要。 C++公式开发增强了分析师现有的分析指标和工具。
1999年底,《飞狐操盘手》测试版发布,何璞受邀加入首席测试员进行测试并提供改进建议。何璞指出 C++实现公式横向统计不方便,希望飞虎能够固化为基础功能。 《飞狐操盘手》吸收了互联网上分析师公式系统的所有创新功能,合普开发的一些C++公式功能也融入到了基础功能中。比如判断是否是最后一个循环,早期的公式系统没有类似的功能函数,而合普采用的是C++公式函数来实现。合浦发展分析师太阳能功能也包含在“飞狐交易者”功能中。此外,《飞狐操盘手》还根据何璞等人的建议,增加了自然日K线分析、周易分析、农历坐标等。另外,根据何璞的建议,增加了指标函数双变量参数的建议。一般情况下,指标的第一个参数是一个序列,第二个参数是一个固定值。例如MA(C,N),N参数是分析师之间的固定值。在《 Fox 》中,它是变异序列。虽然Hepu也用C++实现了第二个可变参数,但是使用起来不够方便。 《飞狐交易者》中的一些函数可以使用第二个可变参数、第三个可变参数等。例如MA(C,INT(C/10))实现了不定移动平均线。
《 Fox 》除了支持“”公式源代码外,还支持的C++公式文件。因此合普的分析指标可以完美移植到“飞狐操盘手”上。 “飞狐交易员”有自己的C++接口,支持公式函数的第二个可变参数、第三个可变参数等。
数据序列移动在投资分析中被称为“引用未来数据”。分析者原来的函数只支持后向参考REF(C,N)函数。何璞用C++开发了前向参考REFX(C,N)函数,即今天指标值的计算取决于明天其他指标的计算数据。我最初的设计并不是为了所谓的欺诈,因为我利用这个功能在分析师身上开发了一个“龙霸指标交易系统”。大庄家可以用它来改变未来市值,提前看到未来市场指标走势,可以给“技术指标派”挖坑骗线。“分析师”软件无法右移绘制K-线,但“飞狐交易者”可以向右移动来绘制K线和指标,因此,通过REFX()函数,预设了未来几天的行情数据,例如CLOSE、HIGH、LOW、VOL。等,并且K线和指标是右移绘制的,并且市场参数是动态调整的,您可以在此处看到用户制作的指标在市场情况下的变化。 、指标交叉等未来结果,这是主力对未来指标走势的准确掌控能力。
2000年以后,出现了一些支持用户自编指标公式的炒股软件,如“同大信”、“同花顺”、“大智慧”等软件。起初,这些软件公司的指标公式语法都是自己新开发的。后来,他们发现它们无法与“”公式语法相媲美。因此,“同大信”和“同花顺”的指标语法后来兼容了“分析师”公式。
“大智慧”软件公司在2006年左右收购了“分析师”,因此新一代大智慧继承了分析师核心,完美支持分析师C++开发的分析师公式和公式。因此,迄今为止只有“飞狐操盘手”和“大智慧”完美支持合普自1997年以来开发的C++指标()。1999年开发的主要进出口C++指标仍然可以在大智慧软件中正常运行。该指标算法至今还没有被很多人破解。看我的博客
2016年,他利用开发的人工智能程序“”围棋软件击败了人类职业棋手。作者用传统的思路编写了围棋软件(百度:合普围棋)并开发了硬件和软件。 100年后,计算机将无法击败人类,因为无法实现2的361次方的递归计算。电脑象棋依赖于小型计算机。海量存储和巨大的计算潜力使其能够击败最优秀的人类国际象棋棋手。这些算法无法在 Go 中复制。
2016年,人工智能围棋软件击败了人类职业棋手,这让笔者看到了一线希望。如果计算机人工智能可以在围棋中击败人类棋手,那么人工智能软件肯定可以用来编程一个完全自动化的赚钱交易“摇钱树”。 。
作者是模仿分析师软件编写指标公式的高手,所以很自然地想到了将分析师软件指标公式的语法格式移植到量化软件中。因此,作者编写的新手量化系统利用一维数组和向量数学计算的特点来实现仿分析师公式指标的计算。
使用小白量化股票公式功能模块,可以轻松将仿分析师公式指标移植到量化环境中。除了在新手量化系统中使用分析师自行编写的公式指数计算外,还可以在其他量化平台上使用。
移植步骤如下:
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('##############################################################')
程序运行结果如下图所示。
本文讲解了小白量化的金融模块的广泛用途。如果有时间我会给出其他量化平台依托小白量化模块实现模仿大智慧和模仿同大信指标的示例代码。
请继续关注我的博客,我的进步就是你的进步!
提醒:请联系我时一定说明是从星空网上看到的!