零基础搭建量化投资系统—以Python为基础:视频课件及代码(3)

106 篇文章 119 订阅
104 篇文章 107 订阅

零基础搭建量化投资系统—以Python为基础:视频课件及代码(3)
自编股票指标公式及显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import  tkinter  as  tk   #导入Tkinter
import  tkinter.ttk  as  ttk   #导入Tkinter.ttk
import  tkinter.tix  as  tix   #导入Tkinter.tix
import  HP_tk  as  htk   #导入htk
from PIL import Image, ImageTk, ImageDraw, ImageFont
from matplotlib import ticker as mticker
import time
import  HP_view as hpv
import matplotlib.pyplot as plt
from HP_formula import *    #使用HP_formula公式基本函数库
#建立主窗口
root=htk.MainWindow(title='自定义公式演示',x=100,y=200,w=800, h=600)
root.iconbitmap('ico/py.ico')   #设置应用程序图标
root.SetCenter()                         #移动到屏幕中央
#把window划分为左右2个子容器,左为v1,右为v2
v1=tk.Frame(root,width = 200,bg='blue')
v1.pack(side=tk.LEFT,fill=tk.Y)
v2=tk.Frame(root,bg='yellow')
v2.pack(side=tk.RIGHT, fill=tk.BOTH, expand=1)
#《零基础搭建量化投资系统—以Python为基础》树中示例 8-23
tree=ttk.Treeview(v1)
myid=tree.insert("",0,"指标",text="指标",values=("1"),open=True)
myidx1=tree.insert(myid,0,"技术指标",text="技术指标",values=("2"))
myidx2=tree.insert(myid,1,"交易系统",text="交易系统",values=("3"))
myidx3=tree.insert(myid,2,"条件选股",text="条件选股",values=("4"))
myidx4=tree.insert(myid,3,"五彩 K 线",text="五彩 K 线",values=("5"))
myidy=tree.insert("",1,"工具",text="工具",values=("6"),open=True)
myidy1=tree.insert(myidy,0,"系统设置",text="系统设置",values=("7"))
myidy1=tree.insert(myidy,0,"指标排序",text="指标排序",values=("8"))
tree.pack(side=tk.TOP,fill=tk.BOTH, expand=1)
tree.selection_set("指标")

ds='2018-01-01'  #行情开始日期
de=time.strftime('%Y-%m-%d',time.localtime(time.time()))  #行情结束日期
###---------------------------------------------------------------------------
#本部分四选一
#二. #小白离线行情,需要xbdata数据
import tushare as ts    #小白离线行情,需要xbdata数据
#读取股票数据
df2a=ts.get_k_data('300202',ktype='D',start=ds,end=de,index=False,autype='qfq')

#六均线3指标图,K线算一个指标
ax,ax2=hpv.axview3x2(v2,df2a,'300202聚龙股份  六均线K线演示',6)  

#在ax区绘制荷蒲操盘线HPCPX
def draw_HPCPX(ax1,mydf):
    CLOSE=mydf['close']
    LOW=mydf['low']
    HIGH=mydf['high']
    OPEN=mydf['open']
    VOL=mydf['volume']
    df=mydf.copy()

    def HPCPX():
        S0=(CLOSE+OPEN+LOW+HIGH)/4
        S1=EMA(SLOPE(S0,5),60)
        S2=EMA(S1,20)
        S3=IF(S1>=0,S1,DRAWNULL())
        S4=IF(S1>S2 ,S3,DRAWNULL())
        return S1,S2,S4
    #使用KDJ指标,返回K,D,J序列。
    x,y,z=HPCPX()
    
    df = df.join(pd.Series( x,name='CPX'))
    df = df.join(pd.Series( y,name='Y'))
    df = df.join(pd.Series( z,name='Z'))
    df['Y0']=0
    
    
    #开始绘图
    ax1.plot(df.date.values,df.CPX.values, color= 'green', lw=2,label="荷蒲操盘线")
    ax1.plot(df.date.values, df.Z.values, color= 'red', lw=2)
    ax1.plot(df.date.values, df.Y0.values, color= 'yellow', lw=2)
    text = ax1.text(0.05, 0.05, '红线持股!绿线持币!', fontdict={'size': 20},color='yellow')
    plt.ylabel('HPCPW', color='white')
    plt.legend() # 显示图中右上角的提示信息。
    plt.gca().yaxis.set_major_locator(mticker.MaxNLocator(prune='upper'))
    ax1.xaxis.set_major_locator(mticker.MaxNLocator(8))  #x轴分成几等分     
    ax1.yaxis.set_major_locator(mticker.MaxNLocator(nbins=3, prune='upper'))
    ax1.grid(True, color='r')
    ax1.tick_params(axis='x', colors='white')
    ax1.tick_params(axis='y', colors='white')
    plt.subplots_adjust(left=.075, bottom=.08, right=.96, top=.96, wspace=.15, hspace=0.1)
    plt.close() # 关窗口
    return ax1

#调用自定义公式
ax3=draw_HPCPX(ax2,df2a)  
root.mainloop()  	#进入Tkinter消息循环

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
小白量化学习-自创指标设计 一、准备工作 1、首先把“HP_formula.py”文件复制到自己的工程目录中。 2、在新文件开始增加下面4条语句。 import numpy as np import pandas as pd from HP_formula import * import tushare as ts 二、对数据预处理 我们采用与tushare旧股票数据格式。 #首先要对数据预处理 df = ts.get_k_data('600080',ktype='D') mydf=df.copy() CLOSE=mydf['close'] LOW=mydf['low'] HIGH=mydf['high'] OPEN=mydf['open'] VOL=mydf['volume'] C=mydf['close'] L=mydf['low'] H=mydf['high'] O=mydf['open'] V=mydf['volume'] 三、仿通达信或大智慧公式 通达信公式转为python公式的过程。 1.‘:=’为赋值语句,用程序替换‘:=’为python的赋值命令‘='。 2.‘:’为公式的赋值带输出画线命令,再替换‘:’为‘=’,‘:’前为输出变量,顺序写到return 返回参数中。 3.全部命令转为英文大写。 4.删除绘图格式命令。 5.删除掉每行未分号; 。 6.参数可写到函数参数表中.例如: def KDJ(N=9, M1=3, M2=3): 例如通达信 KDJ指标公式描述如下。 参数表 N:=9, M1:=3, M2:=3 RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:SMA(RSV,M1,1); D:SMA(K,M2,1); J:3*K-2*D; # Python的KDJ公式 def KDJ(N=9, M1=3, M2=3): RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100 K = SMA(RSV,M1,1) D = SMA(K,M2,1) J = 3*K-2*D return K, D, J #----------------------------------- #根据上面原理,我们把大智慧RSI指标改 # 为Python代码,如下。 def RSI(N1=6, N2=12, N3=24): """ RSI 相对强弱指标 """ LC = REF(CLOSE, 1) RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100 RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100 RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100 return RSI1, RSI2, RSI3 四、使用公式并绘图 #假定我们使用RSI指标 r1,r2,r3=RSI() mydf = mydf.join(pd.Series( r1,name='RSI1')) mydf = mydf.join(pd.Series( r2,name='RSI2')) mydf = mydf.join(pd.Series( r3,name='RSI3')) mydf['S80']=80 #增加上轨80轨迹线 mydf['X20']=20 #增加下轨20轨迹线 mydf=mydf.tail(100) #显示最后100条数据线 #下面是绘线语句 mydf.S80.plot.line() mydf.X20.plot.line() mydf.RSI1.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) 不懂就看我的博客 https://blog.csdn.net/hepu8/article/details/93378543

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荷蒲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值