Python dataframe绘制饼图_Python股票期货交易利器,砖型图详细绘制教程!

一、砖型图简介。

在所有行情软件中,记录价格波动轨迹的几乎都是K线图,只有在很少的程序化量化软件中才有砖型图的身影。

2a36bcc4cb7155ad93eb69c42f22f89e.png

热卷hc2005

砖型图顾名思义,相当于是用砖头一块一块地拼凑而成记录价格波动轨迹的图形,称之为“砖型图”。

每一块砖的尺寸都一致,这里的尺寸是指行情每上涨或下跌一定距离,就绘制下一块砖型图,如果行情没有达到这个尺寸,无论行情走了多久,我们都不会更新砖型图。因此,砖型图的走势始终就只有上涨和下跌两个方向。

二、砖型图的优势。

(一)让行情走势结构更加的清晰。

在k线图中,行情如果遇到小幅的盘整,行情在一个很小的区间内来回突突,迷惑你,并且看上去走了很长的一段时间,实际上它并没有上涨或下跌多少。

但是,采用砖型图看行情的话,如果将这个区间设置成砖型图的尺寸,那么在这个区间只绘制一块砖,从而减少交易者在此区间的错误判断。

e359026b3e92cb56ab792fb4c6fbc76b.png
12e7334064811edafc0c1c5d0aa7e87f.png

tick行情走势

7675107d5490205d5819630412360212.png

尺寸=2,砖型图

(二)降低周期参数对整个公式或指标计算的影响。

我们都知道,k线是按照时间周期来进行绘制的,因此每到一个时间节点它都会进行切换并重新绘制,这样的话如果在横盘期间价格一直不怎么动,指标一样要滚动计算。

拿均线来说,这样计算出来的值很可能就是一根横向整理的线条,但如果采用砖型图进行绘制均线或计算其他指标的话,就会降低这样的影响程度。如下图所示:

0d9fee0a3b61375baf4917d11aad274c.png

一旦采用砖型图,就没有时间概念了,只有空间的概念。

三、砖型图代码编写。

砖型图我们可以也看做没有影线的k线,砖的最顶部我称作最高价,最底部我称为最低价。绘制砖型图之前,首先我们要了解单块砖型图的构造和多块砖型图如何组合。

假设,下列行情的开盘价为3555。

(一)单块砖型图。

5e51b1ede06b1ed3b3cda2c652ec6ced.png

假设,上图是开盘前5分钟的走势,开盘下跌。当价格下跌到5跳的时候,第一块砖的最高价就是开盘价,最低价就是开盘价-尺寸(5跳),如果开盘价=3555。

砖的最高价就是3555

砖最低价就是3555-5=3550。

如果开盘后上涨了5跳,那么砖最低价就是开盘价3555,最高价就是3560。

6b87c65b3275b72ca6a96015184ad568.png

这是第一块砖型图的画法。但是,最重要的是组合砖型图的画法,组合方式只有4种。

(二)组合砖型图画法。

1.上涨行情的组合。如果市场一开盘就往上走并且超过了2个尺寸,也就是10跳。当第一块绘制完成之后,价格回调并没有达到5跳,进而继续上扬上涨了5跳,那此时砖型图的最高最低价如何确定。

d11bcb57211d2dbba52a05d02834fa27.png

最高价:上一块的最高价+5跳 ,即:3560+5 = 3565。

最低价:上一块的最高价,即:3565。

如果行情继续往上,同时回调不够5跳,那么继续按照此逻辑绘制。

2.下跌行情组合。如果市场一开盘就往下走并且超过了2个尺寸,也就是10跳。当第一块绘制完成之后,价格回调并没有达到5跳,进而继续下跌了5跳,那此时砖型图的最高最低价如何确定。

b551764bf7d18d7ad46a968bb719f802.png

开盘价:3555

最高价:上一块的最低价 ,即:3550。

最低价:上一块的最低价-5跳,即:3550-5 = 3545。

如果行情继续往下,同时回调不够5跳,那么继续按照此逻辑绘制。

3.上涨后反转组合。当市场已经走了两块砖了,此时遇到阻力位掉头并向下跌了5跳,此时的最高价最低价如何确定。

fcb48002eb58f4f778a97c32743cd81b.png

最高价:上一块的最低价 ,即:3560。

最低价:上一块的最低价-5跳,即:3560-5 = 3555。最低价又回到开盘价位置。

如果行情继续往下,同时回调不够5跳,那么继续按照此逻辑绘制。

4.下跌后反转组合。当市场已经走了两块砖了,此时遇到支撑位掉头并向上涨了5跳,此时的最高价最低价如何确定。

3c916d7dfbbea952cd47992678ff8bbb.png

最高价:上一块的最高价+5跳 ,即:3550+5 = 3555。

最低价:上一块的最高价,即:3550。最高价又回到开盘价位置。

如果行情继续往上,同时回调不够5跳,那么继续按照此逻辑绘制。

5.震荡反转组合。如果出现以下行情,绘制方法是和上面的三种绘制方法是一致的。主要出现在行情在某个区间内上涨5跳后突然反转下跌5跳,反转结束之后紧接着有反方向涨5跳,如此反复触发设定的尺寸。

e443daddfa2820f3508f55573e5f22aa.png

6.一个tick多次触发多个尺寸组合。这种情况,是比较少见的,比如一笔超级大单子突然出现,将行情一次就推了100跳,那么此时应该怎么绘制。

f4929433daea80e7421614a1ce3133fc.png

如果出现这种情况,用100/5=20个尺寸,直接循环绘制20次,最高价和最低价按照上面4个方法进行绘制,下跌100跳也是按照这样的思路。

a48bcd5b0814360499e6acacc4f4c5d0.png

(三)代码实现。

1.总的绘制逻辑:

(1)计算最新一个tick与上一个tick的差值,然后除以尺寸,得出需要绘制的次数。

(2)当出现余数时,当前这块砖绘制完成后,将余数传回下一个tick继续累加。

(3)绘制完一块时,通过count = count +1 的方式作为砖型图的x轴,y轴是最高价和最低价。

2.代码绘制逻辑。

(1)导入模块并获取8000个tick数据,品种使用rb2005。

import pandas as pdfrom tqsdk import TqApifrom datetime import timedeltafrom matplotlib.path import Pathfrom matplotlib.patches import PathPatchimport matplotlib.pyplot as pltimport numpy as npapi = TqApi()ticks = api.get_tick_serial("SHFE.rb2005",8000)

(2)首先我们要计算最新一个tick与上一个tick的差值,然后除以尺寸,得出需要绘制的次数和需要传回继续累加的余数。

参数变量设置

def renko_charts():    dis_sum = 0       # 每更新一个tick都将涨跌幅累加,直到至少满5跳绘制后,将余数传回继续累加    dis_sum_list = [] # 涨跌幅累加一次,就将当时的累计涨跌幅存入,方便后续判断上一根是否亏损。    Renko_h = []      # 记录每块砖的最高价,用于计算均线。    location = []     # 存储每一块砖的坐标,后面绘制。    dot = 5           # 砖的尺寸    count = 0         # X轴坐标    k_list = []       # 用于存储砖的最高价最低价

如果变动了至少1个尺寸,计算绘制次数和余数。decimals 代表余数(需要传回继续累加),integer代表整数(需要绘制的次数)

    for i in range(len(ticks)):        last_price = ticks['last_price'].iloc[i]        last_time  = pd.to_datetime(ticks.datetime.iloc[i]) + timedelta(hours=8)        if i ==0:            k_list.append(last_price)            Renko_h.append(last_price)        else:            "统计换线阀值 >= 5,换线"            dis_sum = dis_sum + (last_price - ticks['last_price'].iloc[i-1])            "如果变动了5个点,就换线"            if abs(dis_sum) >= dot:                "计算循环绘制次数-阀值的倍数,下一个Tick继续累加"                if dis_sum / dot<0:                    decimals = float('-0.' + str(dis_sum / dot).split('.')[1])                else:                    decimals = float('0.' + str(dis_sum / dot).split('.')[1])                integer = int(float(str(abs(dis_sum) / dot).split('.')[0]))

首先我们要计算出第一块是阴还是阳,然后在根据前一块的阴阳和当前阴阳情况进行绘制最新的一块砖。

275c58aa1301fb654a024ecb113ef044.png

绘制第一块:也就是说只判断第一次统计等于或超过尺寸的情况。

"循环绘制-连续出现N条砖"                for j in range(integer):                    dis_sum_list.append(dis_sum)                    count += 1                    print('---------------------------------------------------------')                    print('---------------------------------------------------------')                    "如果是上涨"                    if len(Renko_h) == 1:                        # print('换线了---------------')                        if dis_sum_list[-1] > 0:                            k = k_list[-1] + dot                            "最低价"                            k_list.append(k_list[-1])                            "最高价"                            k_list.append(k)                            dis_sum = decimals  # 将剩余部分传回最新一个tick继续累加涨跌幅                            print("最高价:%s,最低价:%s"%(k_list[-1],k_list[-2]))                            "基准价"                            Renko_h.append(k)                            print(Renko_h)                            "砖形图坐标"                            location.append([(count-1,k_list[-2]) ,(count-1,k_list[-1]),                                              (count,k_list[-1]),(count,k_list[-2]), (count, last_price)])                        elif dis_sum_list[-1] < 0:                            # print('换线了---------------')                            k = k_list[-1] - dot                            "最低价"                            k_list.append(k)                            "最高价"                            k_list.append(k_list[-1])                            dis_sum = decimals  # 将剩余部分传回最新一个tick继续累加涨跌幅                            print("最高价:%s,最低价:%s" % (k_list[-1], k_list[-2]))                            Renko_h.append(k_list[0])                            location.append([(count-1,k_list[-2]) ,(count-1,k_list[-1]),                                              (count,k_list[-1]),(count,k_list[-2]), (count, last_price)])

绘制第N块:在上面代码中,我们已经得到了第一块的最高价最低价,以及坐标。

最高价:k_list[-1]

最低价:k_list[-2]

那么在接下来我们,我们绘制第N块砖。

当上一块是阳,绘制当前阴阳两种情况。

a7e5529b3b534d6efd3d24c4dd0606d0.png
d4659f8deaf9e1116db0fb55c382bb86.png

当上一块是阴,绘制当前阴阳两种情况的思路和上述一致。

绘制砖型图到画布:rb2005合约tick数据,尺寸 = 2跳。

length=10    average = []    for i in range(len(Renko_h)):        if i 0 and dis_sum_list[0]>0:                path = Path(location[i], codes)                pathpatch = PathPatch(path, facecolor='r', edgecolor='black')                ax2.add_patch(pathpatch)                ax2.autoscale_view()            elif location[i][2][1] < 0 and dis_sum_list[0]<0:                path = Path(location[i], codes)                pathpatch = PathPatch(path, facecolor='g', edgecolor='black')                ax2.add_patch(pathpatch)                ax2.autoscale_view()        else:            if location[i][2][1] > location[i-1][2][1]:                path = Path(location[i], codes)                pathpatch = PathPatch(path, facecolor='r', edgecolor='black')                ax2.add_patch(pathpatch)                ax2.autoscale_view()            else:                path = Path(location[i], codes)                pathpatch = PathPatch(path, facecolor='g', edgecolor='black')                ax2.add_patch(pathpatch)                ax2.autoscale_view()    ax2.plot(average)    ax1.plot(ticks['last_price'])    plt.show()if __name__ == '__main__':    renko_charts()

run:

rb2005合约tick数据,尺寸 = 2跳。

3088d8143f9b28199f516a3cda62bbe0.png

尺寸 = 3跳。

cbaf035ce7c7be9b10203697aa72e9bd.png

尺寸 =4跳。

b5e9165f4b97e94e96ba59207dba5dad.png

尺寸 = 5跳。

f37640b8fe7c5d4c719e79bae080b53d.png

6.上面的不同尺寸的砖型图中,我们可以得出,尺寸越大砖的数量就越少。反之,越多。

总结。

本文主要分享了砖型图的简介,算法和代码实现。利用砖型图进行交易的人非常少,但并不意味着用它赚不了钱,因为大部分的行情软件都只有按时间节点来绘制的k线图,并没有按照空间来进行绘制。

其实k线图和砖型图的最大区别是,一个是按照时间绘制,一个是按照空间来绘制,两者的出发点悬殊非常大,思考的方式也不一样。

当然还有另外2种描述价格的算法,量能为阀值的,量能k线,以包含关系的,缠论,这些都值得去研究一下。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值