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

自己做量化交易软件(45)小白量化实战18–直接使用通达信自编指标公式进行分析绘图和回测
小白量化一代提供了Python公式算法模式来写量化程序。
小白量化二代提供了仿通达信公式的模式来写量化程序。
小白量化三代除了仿通达信公式的模式来写量化程序外(见前几篇博客),还支持股票指标直接运算模式。这篇介绍直接使用通达信公式进行回测。
运行公式需要使用小白通达信公式库HP_tdxgs。

import HP_tdxgs as hgs  #小白通达信公式库
tgs1=hgs.Tdxgs()   #创建公式类对象
tgs1.loaddf(df)    #加载行情表
mydf=tgs1.rungs(gs)  #运行公式文本
tgs1.brawline(ax1)   #简单绘制公式指标

其中df是行情库,gs是通达信公式文本。返回包含公式变量的行情库mydf。
tgs1.bl属性是公式中的所有变量名
tgs1.bl2属性是公式中的所有要输出变量名
tgs1.brawline(ax1) #简单绘制公式指标
tgs1.drw属性可以用来自己设计复杂的指标绘图。
tgs1.df属性是运行公式后的mydf表。
下面看KDJ,MACD公式运算的演示程序。

import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
import HP_tdx as htdx#小白通达信行情库 
from HP_formula import *   #小白股票指标公式函数库
import HP_tdxgs as hgs  #小白通达信公式库plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号tdxapi=htdx.TdxInit(ip='180.153.18.171')
df=hgs.get_security_bars()#KDJ指标
gs='''
N:=9;
M1:=3;
M2:=3;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1), CIRCLEDOT,COLORFF0000,LINETHICK2;
D:SMA(K,M2,1), LINETHICK3 , COLOR00FF00 ;
J:3*K-2*D, LINETHICK2, COLOR0000FF;
'''#MACD指标
gs2='''
SHORT:=12;
LONG:=26;
MID:=9;
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD2:(DIF-DEA)*2,COLORSTICK;
'''#LHXJ 猎狐先觉
gs3='''
VAR1=(CLOSE*2+HIGH+LOW)/4;
VAR2=EMA(VAR1,13)-EMA(VAR1,34);
VAR3=EMA(VAR2,5);
zlqp:(-2)*(VAR2-VAR3)*3.8;
zlkp:2*(VAR2-VAR3)*3.8;
'''#绘制图形
plt.figure(1,figsize=(10,6), dpi=100)
#绘制主图指标
ax1=plt.subplot(311)
#绘制副图指标
ax2=plt.subplot(312)
#绘制副图指标
ax3=plt.subplot(313)tgs1=hgs.Tdxgs()
tgs1.loaddf(df)
mydf=tgs1.rungs(gs)
print('KDJ指标:\n',gs)
print('公式变量:',tgs1.bl)
print('输出变量:',tgs1.bl2)
tgs1.brawline(ax1)#print(gs2)
tgs2=hgs.Tdxgs()
tgs2.loaddf(df)
mydf=tgs2.rungs(gs2)
tgs2.brawline(ax2)#print(gs2)
tgs3=hgs.Tdxgs()
tgs3.loaddf(df)
mydf=tgs3.rungs(gs3)
tgs3.brawline(ax3)    
plt.show()

程序运行结果。
在这里插入图片描述
下面看看如何利用KDJ指标进行回测。

# -*- coding: utf-8 -*-
"""
##  小白量化事件回测程序--A股回测
#购买<零基础搭建量化投资系统>正版书,送小白一、二代量化软件源代码。
# https://item.jd.com/61567375505.html
#独狼荷蒲qq:2775205
#通通python量化群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析
#最后修改日期:20210923"""
import pandas as pd  
import numpy  as np
import datetime as dt
import time
import matplotlib.pyplot as pltimport HP_tdx as htdx#小白通达信行情库 
from HP_formula import *   #小白股票指标公式函数库
import HP_tdxgs as hgs  #小白通达信公式库
import HP_quant as hqu   #小白量化事件回测plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号code='600030'tdxapi=htdx.TdxInit(ip='180.153.18.171')
df=hgs.get_security_bars(code=code,nCount=800)#KDJ指标
gs='''
N:=22;
M1:=11;
M2:=22;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1), CIRCLEDOT,COLORFF0000,LINETHICK2;
D:SMA(K,M2,1), LINETHICK3 , COLOR00FF00 ;
J:3*K-2*D, LINETHICK2, COLOR0000FF;
B:CROSS(K,D);
S:=CROSS(D,K);
'''tgs1=hgs.Tdxgs()
tgs1.loaddf(df)
mydf=tgs1.rungs(gs)G=hqu.GlobalVars()   #用户全局变量
context = hqu.Context()  #创建回测句柄
data = hqu.Data()  #创建交易数据data.code=code   #回测品种
data.price=0.0  #成本价def initialize(context,df):print('回测初始化')context.f1=0.001   #买入佣金context.f2=0.001   #卖出佣金context.f3=0.001   #买入印花税context.f4=0.00   #卖出印花税context.f5=0.00005   #交易费(香港)context.f6=0.000027   #交易征费(香港)context.f7=0.00002   #交收费(香港)context.lot=100   #每手股数# 定义一个全局变量, 保存要操作的证券                                                                                           context.stocks = []   #股票池context.cash=1000000.00    #初始现金context.cash2=context.cash    #初始现金context.i=0        #i是起始位置context.start=0        #i是起始位置context.end=1500        #i是结束位置df['mode']=0  #买卖状态df['yl']=0   #盈利df['jz']=context.cash  #净值context.mydf=df    #df数据context.yingli=5.0   #基准盈利context.kuisun=-10.0  #基准亏损context.volume=0.00   #持仓量context.mode=0   #买单状态0:空仓,1:多单,2:空单context.end=len(context.mydf)  #结束位置context.start=0        #i是起始位置context.dc=0.5   #点差context.price=0.0   #成本价context.s1=0   #买多次数context.s2=0   #买空次数context.s3=0   #平仓次数context.s4=0   #止损次数#买
def buy(context, data,volume=0.1):cash=context.cashlot=int(cash/(data.close*(1+context.f1+context.f3))/context.lot)context.volume=lotcontext.cash=cash-lot*context.lot*data.close*(1+context.f1+context.f3+context.f5+context.f6+context.f7)data.price=data.close*(1+context.f1+context.f3)context.mode=1context.price=data.pricecontext.s1=context.s1+1print('买入',lot,data.price)#卖    
def sell(context, data,volume=0.1):cash=data.close*(1-context.f2-context.f4)*context.lot*context.volumecontext.cash=context.cash+cashdata.price=data.close*(1-context.f2-context.f4)lot=context.volumecontext.price=data.pricecontext.mode=0context.volume=0.0context.s2=context.s2+1print('卖出',lot,data.price)mydf['HL']=0.00  #获利比例#策略初始化
initialize(context,mydf)
context.end=len(mydf)
print(mydf)#用户策略
def handle_data(context,data):i=context.i#获取每个数据的值df3=context.mydfdata.high=df3.at[i,'high']data.low=df3.at[i,'low']data.open=df3.at[i,'open']data.close=df3.at[i,'close']B=df3.at[i,'B']S=df3.at[i,'S']#计算买卖if context.mode==0 and B==1:  #买多buy(context, data)elif context.mode==1 and S==1:  #买空sell(context, data)#计算获利率context.mydf.at[i,'HL']=(context.cash+context.volume*context.lot*data.close-context.cash2)/context.cash2*100context.i=i+1   #继续下一个周期#开始回测
m=context.end-context.start
#循环回测
for i in range(context.start,context.end):context.i=ihandle_data(context,data)print('当前进度:',(i*100/m),'资金: ',context.cash)print('买多:',context.s1,'买空:',context.s2,'止损:',context.s4,'资金:',context.cash)    
print('持仓:', context.volume*context.lot,'现价:',data.close)
print('初始资产:',context.cash2)
print('当前资产:',round(context.cash+context.volume*context.lot*data.close,2))
print('涨幅:',round(((context.cash+context.volume*context.lot*data.close)-context.cash2)*100/context.cash2,2),"%")######下面是绘图
mydf=context.mydf#绘制图形
plt.figure(1,figsize=(12,8), dpi=80)#绘制主图指标
ax1=plt.subplot(311)
mydf['K'].plot.line(legend=True)
mydf['D'].plot.line(legend=True)
mydf['J'].plot.line(legend=True)#绘制副图指标
ax2=plt.subplot(312)
mydf['B'].plot.line(legend=True)
mydf['S'].plot.line(legend=True)#绘制副图指标
ax2=plt.subplot(313)
mydf.HL.plot(color='orange', grid='on',legend=True)
mydf.B.plot(color='blue',legend=True)
mydf.S.plot(color='green',legend=True)
#添加标题
plt.title(code+'  获利')
plt.show()

程序运行结果:

当前进度: 99.25 资金:  1004.8229200041387
当前进度: 99.375 资金:  1004.8229200041387
当前进度: 99.5 资金:  1004.8229200041387
当前进度: 99.625 资金:  1004.8229200041387
当前进度: 99.75 资金:  1004.8229200041387
当前进度: 99.875 资金:  1004.8229200041387
买多: 16 买空: 15 止损: 0 资金: 1004.8229200041387
持仓: 76400 现价: 26.2
初始资产: 1000000.0
当前资产: 2002684.82
涨幅: 100.27 %

在这里插入图片描述
我们正在设计第三代小白量化平台,这篇介绍了其中的工作进展。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20099.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己做量化交易软件(16)用小白通通量化AI框架打造自己的量化平台

最近一段时间&#xff0c;我主要学习python3和tkinter的窗口开发&#xff0c;对tkinter编程逐步了解。 此外&#xff0c;应广大朋友要求&#xff0c;我写了 一本学习python3学习书籍<小白学Python3实战搭建量化投资平台>. <小白学Python3实战搭建量化投资平台>内容…

Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么

目录 Chat GPT是什么 初学者怎么使用Chat GPT 使用Chat GPT需要注意什么 一些简单的prompt示例 Chat GPT是什么 Chat GPT是由OpenAI开发的一种大型语言模型&#xff0c;它基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构。GPT是一种基于深度学习的…

从GPT到chatGPT(一):GPT1

GPT1 文章目录 GPT1前言正文模型架构无监督学习有监督学习处理不同特定任务 实验训练细节实验结果 分析预训练层参数转移的影响zero-shot的表现消融实验 总结 前言 GPT1&#xff0c;出自于OpenAI的论文《Improving Language Understanding by Generative Pre-Training》&#…

ChatGPT+MindShow快速制作ppt

一、ChatGPT&MindShow简介 1、什么是ChatGPT? ChatGPT是一种基于自然语言处理和深度学习技术的人工智能语言模型&#xff0c;使得人们可以更加方便地与计算机进行交互&#xff0c;如智能问答等。 2、什么是MindShow? MindShow只需要在网页上登录即可&#xff0c;可以…

玩转ChatGPT:回答审稿人问题

一、写在前面 前段时间一篇时间序列预测的文章返修&#xff0c;还挺幸运的&#xff0c;给了个小修。 不过问题也问得有点刁钻&#xff0c;应该是个行家。 想到手头有小Chat&#xff0c;打算使用TA来辅助我回答审稿人问题。 以下展示仅仅提供一个工作流和思路&#xff0c;具体…

Jina AI 创始人肖涵博士:揭秘 Auto-GPT 喧嚣背后的残酷真相

Auto-GPT 究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的 AI 实验&#xff1f;本文为我们揭开了喧嚣背后的真相&#xff0c;并揭示了 Auto-GPT 不适合实际应用的生产局限性。 背景介绍 这两天&#xff0c;Auto-GPT&#xff0c;一款让最强语言模型 GPT-4 能够自主完成…

两款吾爱破解优秀软件,批量查找文本,图像视频画质增强

批量查找文本 By&#xff1a;tuao 我们在电脑中查找文件的方式有很多&#xff0c;只要知道文件名便能很容易找到 但如果只记得文档中的某个关键词&#xff0c;而忘记文件名称的话&#xff0c;找起来就有些费劲了 这款工具便可以批量的在word、wps、excel、pdf和txt中查找文本…

吾爱破解论坛2021年11月11日,光棍节免费开放注册

点击上方蓝字"优派编程"选择“加为星标”&#xff0c;第一时间关注原创干货 官方原话&#xff1a; 吾爱破解论坛从2008年3月13日建立以来&#xff0c;陪伴众多坛友走过了12年艰辛而辉煌的风雨历程&#xff0c;以带领新手走入密界大门为基础&#xff0c;汇集了一大批爱…

吾爱出品,必属精品

前言 吾爱破解论坛是一个非常老牌的软件技术交流地&#xff0c;虽然经过多次整改&#xff0c;人气不如从前了 但也依旧能找到很多好玩好用的东西&#xff0c;小编不少分享的软件都是在这个论坛找到的 今天又收集了4款吾爱上高评霸榜的小工具&#xff0c;都很实用&#xff01…

txt工具吾爱版

每次在网上复制的文本内容都是乱七八糟的&#xff1f;那么可以配合txt工具来处理&#xff0c;这是由吾爱破解pgzzh用户出品的一款非常实用、绿色小巧的电脑排版工具&#xff0c;不要看该软件大小才几百KB&#xff0c;其功能是非常好用的&#xff0c;主要就是为用户们提供了去除…

吾爱studio3T

根本逻辑讲解&#xff1a;通过注册表更改studio3T试用时间到期的两种方 法 本例逻辑为通过不断重置studio 3t的试用时间达成伪永久&#xff0c;此软件少有永久免费版&#xff0c;如有永久的请在评论区我。 第一种方法 第一步&#xff1a;winr输入 regedit打开注册表 第二步&…

吾爱第二课-去除网页弹窗

目录 WindowsAPI实例1实例2修改主页内置广告1 用到的工具RestoratorFix ResourceProcexpProcmon WindowsAPI API函数提供应用程序所需要的窗口管理、图形设备接口、内存管理等服务功能。这些功能以函数库的形式组织在一起&#xff0c;形成了Windows应用程序编程接口。 A代表A…

python安卓吾爱_申请会员ID:吾爱Python

1、申请ID&#xff1a;吾爱Python 2、个人邮箱&#xff1a;792800132qq.com 3、原创技术文章&#xff1a;通过Python来实现网页的自动登录。 原创内容介绍&#xff1a;通过Python中的selenium库实现网页的自动登录&#xff08;以今日头条为例&#xff09; 第一步&#xff1…

HTML和xml有哪些区别?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言HTML和XML的概述HT…

从零开始的Python编程指南:掌握基础语法与实用技巧

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言Python简介准备工作…

技术写作过程:如何写出好的技术文章

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 2020 年&#xff0c;我…

突破传统,AI在加速“孵化”你的数字人

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 背景数字人的定义数字人…