自己做量化交易软件(4)通通量化分析框架构成2

通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中。
我们接着上一篇介绍。

五、基础窗口画面框架 HP_view.py
HP_view.py文件中存放了关于窗口构成,绘图的主要模块。
因程序比较长,读者可自己看源代码。
主要模块的功能如下.
class plotFrame3(Frame): # 继承Frame类
这个是构成K线图的模块,数字3表示3指标图形,K线,成交量,自定义指标。

class MainFrame(Frame): # 继承Frame类
是主图类,用于输入选择股票,日期区间,指标类型的功能。
其中st3()是确定按钮,用于切换股票图形画面。

这个文件引入的主要py模块如下:

import HP_zwdata as sd
import HP_lib as mylib
import HP_draw as mydraw

HP_zwdata.py 主要是处理zwDat字王股票历史数据使用的模块。我们基本用不上,就不介绍了,有兴趣去看源代码了。

六、自定义指标绘图模块 HP_draw.py
这个模块主要存放图形最下面的指标绘图函数,我们设计了KDJ,MACD,KDJ,OBV等指标绘图函数,用户可以参考设计自己的新指标。

import HP_zwdata as sd
from HP_global import *
from HP_set import *
import HP_lib as mylibdef draw_OBV(ax1,days,x,y):rsiCol = '#c1f9f7'posCol = '#386d13'negCol = '#8f2020'df=mylib.OBVX(days,x,y)ax2 = plt.subplot2grid((7,4), (5,0), sharex=ax1, rowspan=2, colspan=4, axisbg='#07000d')fillcolor = '#00ffe8'ax2.plot(df.date.values, df.OBV_6.values, color=rsiCol, lw=2)ax2.plot(df.date.values, df.OBV_12.values, color=posCol, lw=2)plt.gca().yaxis.set_major_locator(mticker.MaxNLocator(prune='upper'))ax2.spines['bottom'].set_color("#5998ff")ax2.spines['top'].set_color("#5998ff")ax2.spines['left'].set_color("#5998ff")ax2.spines['right'].set_color("#5998ff")ax2.tick_params(axis='x', colors='w')ax2.tick_params(axis='y', colors='w')ax2.grid(True, color='r')plt.ylabel('OBV', color='w')ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=6, prune='upper'))returndef draw_RSI(ax1,days,x,y,z):rsiCol = '#c1f9f7'posCol = '#386d13'negCol = '#8f2020'df=mylib.RSIX(days,x,'RSI1')df=mylib.RSIX(df,y,'RSI2')df=mylib.RSIX(df,z,'RSI3')ax2 = plt.subplot2grid((7,4), (5,0), sharex=ax1, rowspan=2, colspan=4, axisbg='#07000d')fillcolor = '#00ffe8'ax2.plot(df.date.values, df.RSI1.values, color=rsiCol, lw=2)ax2.plot(df.date.values, df.RSI2.values, color=posCol, lw=2)ax2.plot(df.date.values, df.RSI3.values, color=negCol, lw=2)plt.gca().yaxis.set_major_locator(mticker.MaxNLocator(prune='upper'))ax2.spines['bottom'].set_color("#5998ff")ax2.spines['top'].set_color("#5998ff")ax2.spines['left'].set_color("#5998ff")ax2.spines['right'].set_color("#5998ff")ax2.tick_params(axis='x', colors='w')ax2.tick_params(axis='y', colors='w')ax2.axhline(80, color=negCol)ax2.axhline(20, color=posCol)plt.ylabel('RSI', color='w')ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=6, prune='upper'))returndef draw_KDJ(ax1,days,x,y,z):rsiCol = '#c1f9f7'posCol = '#386d13'negCol = '#8f2020'df=mylib.KDJ(days,x,y,z)ax2 = plt.subplot2grid((7,4), (5,0), sharex=ax1, rowspan=2, colspan=4, axisbg='#07000d')fillcolor = '#00ffe8'ax2.plot(df.date.values, df.K.values, color=rsiCol, lw=2)ax2.plot(df.date.values, df.D.values, color=posCol, lw=2)ax2.plot(df.date.values, df.J.values, color=negCol, lw=2)plt.gca().yaxis.set_major_locator(mticker.MaxNLocator(prune='upper'))ax2.spines['bottom'].set_color("#5998ff")ax2.spines['top'].set_color("#5998ff")ax2.spines['left'].set_color("#5998ff")ax2.spines['right'].set_color("#5998ff")ax2.tick_params(axis='x', colors='w')ax2.tick_params(axis='y', colors='w')ax2.axhline(80, color=negCol)ax2.axhline(20, color=posCol)plt.ylabel('KDJ', color='w')ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=6, prune='upper'))returndef draw_MACD(ax1,days,x,y,z):rsiCol = '#c1f9f7'posCol = '#386d13'negCol = '#8f2020'df=mylib.MACD(days,x,y)ax2 = plt.subplot2grid((7,4), (5,0), sharex=ax1, rowspan=2, colspan=4, axisbg='#07000d')fillcolor = '#00ffe8'ax2.plot(df.date.values, df.MACDsign_12_26.values, color=rsiCol, lw=1)ax2.plot(df.date.values, df.MACD_12_26.values, color=negCol, lw=1)ax2.fill_between(df.date.values, df.MACDdiff_12_26.values, 0, alpha=0.5, facecolor=fillcolor, edgecolor=fillcolor)plt.gca().yaxis.set_major_locator(mticker.MaxNLocator(prune='upper'))ax2.spines['bottom'].set_color("#5998ff")ax2.spines['top'].set_color("#5998ff")ax2.spines['left'].set_color("#5998ff")ax2.spines['right'].set_color("#5998ff")ax2.tick_params(axis='x', colors='w')ax2.tick_params(axis='y', colors='w')ax2.axhline(0, color=negCol)plt.ylabel('MACD', color='w')ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=3, prune='upper'))return     

七、股票数据处理函数库 HP_lib.py
这个文件中存放了一些常用数据函数,用户可以自己根据例子来扩充自己的函数库。
下面是部分程序代码,完整代码请阅读源程序。

###################基本函数库##############################
使用说明
df 指标序列
tp 指标字段,例如close
n  周期数
al 字段别名,可以省略
----------------------------------------------------
import hplibx as mylib
平均移动线函数
def MA(df,tp, n)        #移动平均,Moving Average
使用 df=(df,'close',5)def EMA(df,tp, n)   #指数移动平均.Exponential Moving Average      上穿函数
def CROSS(df,tp1,tp2)#取前n周期数值函数
def REF(df,tp,n)    #取后n周期数值函数
def REFX(df,tp, n)#Standard Deviation#标准偏差
def STDDEV(df,tp,n):  #取前n周期数值的最高价
def HHV(df,tp, n,al=''):     #取前n周期数值的最低价
def LLV(df,tp, n,al=''):  #取前n周期数值大于0的次数
def COUNT(df,tp, n,al=''):  #求前n周期数值和
def SUM(df,tp, n,al=''):  #Winner当前价格获利率
def WINNER(df,price, tp1,al=''):  #求动态移动平均。
#DMA(X,A),求X的A日动态移动平均。
def DMA(df,tp1,tp2,al=''):     #大于等于函数
def EGT(df,tp1,tp2,al=''): #小于等于函数
def ELT(df,tp1,tp2,al=''):  #等于函数
def EQUAL(df,tp1,tp2,al=''): #大于函数
def GT(df,tp1,tp2,al=''):  #小于函数
def LT(df,tp1,tp2,al=''):  #并且函数
def AND(df,tp1,tp2,al=''): #或者函数
def OR(df,tp1,tp2,al=''):
###################指标库########################
def ACCDIST(df, n):             #积累/分配,Accumulation/Distribution
def ADX(df, n, n_ADX):      #定向运动平均指数,Average Directional Movement Index
def ATR(df, n):                     #平均真实范围.Average True Range
def BBANDS(df, n):              #布林带.Bollinger Bands
def CCI(df, n):                     #商品通道指数,Commodity Channel Index
def COPP(df, n):                #COPPOCK曲线,Coppock Curve
def Chaikin(df):                    #蔡金振荡器,Chaikin Oscillator
def DONCH(df, n):               #奇安通道,Donchian Channel
def EOM(df, n):                     #缓解运动,Ease of Movement
def FORCE(df, n):                   #力指数,Force Index
def KELCH(df, n):               #Keltner通道,Keltner Channel
def KST(df, r1, r2, r3, r4, n1, n2, n3, n4):  # KST振荡器,KST Oscillator
def MACD(df, n_fast, n_slow): #MACD指标信号和MACD的区别, MACD Signal and MACD difference   def MFI(df, n):                     #资金流量指标和比率,Money Flow Index and Ratio
def MOM(df, n):                     #动量.Momentum
def MassI(df):                      #质量指数,Mass Index
def OBV(df, n):                     #平衡量,On-balance volume
def PPSR(df):                       #支点,支撑和阻力.Pivot Points, Supports and Resistances
def ROC(df, n):                     #变化率.Rate of Change
def RSI(df, n):                     #相对强弱指标,Relative Strength Index
def STDDEV(df, n):              #标准偏差,#Standard Deviation
def STO(df, n):                     #随机指标D,Stochastic oscillator %D
def STOK(df):                       #随机指标K,Stochastic oscillator %K
def TRIX(df, n):                #矩阵,#Trix
def TSI(df, r, s):              #真实强度指数,True Strength Index
def ULTOSC(df):                     #最终振荡器,Ultimate Oscillator
def Vortex(df, n):              #涡指标,#Vortex Indicator     """
import platform
import pandas as pd
import numpy
import math as m
#from HP_global import *
import HP_global#版本号
def VER():return 1.00#版本号
def Ver():return 1.00#聚宽股票代码转换
def jqsn(s):if (len(s)<6 and len(s)>0):s=s.zfill(6)+'.XSHE'if len(s)==6:if s[0:1]=='0':s=s+'.XSHE'else:s=s+'.XSHG'return s##############内部函数库########################
def ema(c_list,n=12):y_list=[]_n = 1    for c in c_list: if c == c_list[0]:y = celif _n<n:y= c*2/(_n+1) + (1- 2/(_n+1))*y_list[-1] else:y=c*2/(n+1)+(1-2/(n+1))*y_list[-1]y_list.append(y)_n = _n+1        return y_list##############基本函数库#########################
def G_MA(Series,n):G_pyver=int(platform.python_version()[0:1])G_ma=Noneif G_pyver==2:G_MAstr='pd.rolling_mean(Series,n)'G_ma=eval(G_MAstr)else :G_MAstr='Series.rolling(window=n,center=False).mean()'G_ma=eval(G_MAstr)return G_ma#通用STD计算
def G_STD(Series,n):G_pyver=int(platform.python_version()[0:1])G_ma=Noneif G_pyver==2:G_MAstr='pd.rolling_std(Series,n)'G_ma=eval(G_MAstr)else :G_MAstr='Series.rolling(window=n,center=False).std()'G_ma=eval(G_MAstr)return G_ma

八、构建主窗口的程序包 HP_MainPage.py
在介绍HP_Login.py登录窗口代码时,我们看到了引入这个文件包。
from HP_MainPage import *
当用户密码通过验证时,就会执行主画面构建模块MainPage(self.root) 。
HP_MainPage.py部分源代码如下,完整程序请读者阅读源代码。

from PIL import Image, ImageTk
import webbrowser
import os
from HP_view import * #菜单栏对应的各个子页面
from HP_global import *
from HP_set import *class MainPage(object):  def __init__(self, master=None):  HP_init()self.root = master #定义内部变量root  G_root=self.rootself.w = G_winWself.h = G_winHself.root.title(G_title)  self.staIco = '.\jk.ico'self.root.geometry('%dx%d' % (self.w, self.h)) #设置窗口大小  #plotCreat(self.root)self.createUI()self.center()self.loop()# 生成界面def createUI(self):self.createICO()self.createMenu()self.createToolbar()self.createPage()  def loop(self):self.root.resizable(True, True)   #禁止修改窗口大小self.center()                       #窗口居中self.root.mainloop()def _quit(self):#结束事件主循环,并销毁应用程序窗口self.root.quit()self.root.destroy()     def center(self):ws = self.root.winfo_screenwidth()hs = self.root.winfo_screenheight()x = int( (ws/2) - (self.w/2) )y = int( (hs/2) - (self.h/2) )self.root.geometry('{}x{}+{}+{}'.format(self.w, self.h, x, y))self.root.iconbitmap(self.staIco)

主窗口显示画面如下:

这2篇文章大概介绍了通通量化软件总构成。我们后面根据自己程序的完善,逐步介绍给大家,怎么扩种软件功能,来实现自己所要求的功能。

自己做量化交易软件(4)通通量化分析框架构成2相关推荐

  1. 自己做量化交易软件(1)通通量化分析环境安装使用

    自己做量化交易软件(1) 通通量化分析环境安装使用 (独狼荷蒲 QQ:2775205) 一.安装python Anaconda包含有超过720个关于科学,数据,工程和数据分析的Python和R包,如果 ...

  2. 自己做量化交易软件(3)通通量化分析框架构成1

    自己做量化交易软件(3)通通量化分析框架构成1 通通股票量化分析框架采用模块化设计,每个模块存放在不同的py文件中. 通通股票量化分析框架下载: https://download.csdn.net/d ...

  3. 自己做量化交易软件(9通通量化框架的雏形建立

    自己做量化交易软件(9通通量化框架的雏形建立 前面我们做了各种学习尝试,现在开始逐步搭建一个通通量化框架.我做了一部分工作,但是很多朋友有python知识,也想自己能快速搭建程序.因此我放出了全部的开 ...

  4. 自己做量化交易软件(10)通通量化AI框架的数据获取与格式

    自己做量化交易软件(10)通通量化AI框架的数据获取与格式 我与2018年07月08日开始学习python编程和设计通通量化AI框架,到昨天晚上2018年10月30日,基本框架已经完成.能够显示K线图 ...

  5. 自己做量化交易软件(6)通通量化历史交易回测设计1

    前面我们介绍的通通量化软件的一些程序设计. 自己做量化交易软件(1)通通量化分析环境安装使用 https://blog.csdn.net/hepu8/article/details/81866694 ...

  6. 自己做量化交易软件(15)通通量化AI框架的选股器设计1

    自己做量化交易软件(15)通通量化AI框架的选股器设计 前面我们学会了单只股票的分析,回测功能.下面我们开始设计选股器和量化分析的功能. 在设计选股器之前,我们先要学习一些python基本操作技巧. ...

  7. 自己做量化交易软件(11)通通量化AI框架的核心--框架结构

    自己做量化交易软件(11)通通量化AI框架的核心–框架结构 既然我说了要开源通通量化AI框架,就算大家得到了代码,也不清楚怎么去改进和修改.因此我在最后完善框架的空闲,逐步介绍框架的核心设计思想,大家 ...

  8. 自己做量化交易软件(5)通通量化中创作的布林指标BOLL线

    自己做量化交易软件(5)通通量化中创作的布林指标BOLL线 我们读者下载了通通量化演示框架的源代码.在这个代码中没有发现BOLL指标线的算法和绘图函数,我在这篇文章中,假设用户自己创作了新指标BOLL ...

  9. 自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天

    自己做量化交易软件(12)通通量化AI框架的使用1-与通通AI对话聊天 到今天为止,通通AI量化框架基本完成了.下来要做的工作是进行完善,另外打算做macbook版本软件,我对macbook不熟悉,有 ...

最新文章

  1. C语言项目--教师信息/学生成绩管理系统
  2. 20165231 2017-2018-2 《Java程序设计》第5周学习总结
  3. npm 下载 依赖包时出错的解决方式
  4. Office365 PowerShell打开邮箱审计功能
  5. HDFS完全分布式集群搭建
  6. 基于matlab的数字水印技术研究,MATLAB在数字水印技术研究中的应用
  7. JAVA入门到精通(3)IDEA开发工具的使用
  8. webview播放php音乐,android webview中的音乐的暂停与播放
  9. [软件工程] 面向对象方法学引论
  10. Oracle 重置过期密码,Oracle重置过期的密码
  11. ps放大素色图标(黑色特别有效)
  12. 源码 源代码下载 - www.pudn.com 程序员联合开发网
  13. 2台计算机网线连接无法ping通,两台电脑PING不通怎么办?
  14. vim设置(非常全面),即.vimrc文件的配置
  15. hdu 2087 剪花布条 kmp小水
  16. 计算机网络会议和期刊
  17. NLP 前置知识2 —— 深度学习算法
  18. MuMu模拟器开发者文档
  19. c++中的构造数据类型----结构体
  20. Python绘制某图片(LOL)

热门文章

  1. 02、分析主程序live555MediaServer.cpp
  2. DIY无线网卡天线大集合
  3. Qt助手(assistant):方便查找Qt类
  4. 欧尼酱讲JVM(18)——对象实例化内存布局与访问定位
  5. 手机如何批量给视频添加片头效果
  6. 追踪电脑或手机(已知目标IP或mac)进行物理定位
  7. ippbx出现单通故障解决过程总结
  8. 7. 反向代理-快速入门
  9. 基于机器学习的【肺癌风险分析预测】
  10. python-猜字小游戏