我的交易工具之价格反转图

摘要:使用Python绘制价格反转图

我与反转图


我第一次了解到反转图,是在购买的交易书籍上看到的。 当时就被它直观的视觉方式惊呆了,感觉它在揭示趋势的延续和趋势的反转方面的能力,堪称一绝。

可惜,国内的交易平台,不论是股票还是期货平台,都不能展示反转图。 当时,我还没有学习过Python,甚至一点都不了解Python。 于是只能在文华财经和通达信里使劲折腾,费了极大的精力和功夫, 也不过弄了个凑乎能用的东西出来,距离真正的反转图还是差得太远。

再后来,开始做量化交易,了解到了一款国外的软件,叫MultiCharts,里面有自带的反转图。 可惜,MultiCharts把自带的反转图称为新价线,对反转图有了大概90%的还原度,也是勉强能用了。

为此,我不惜注册、开户,绑定了MultiCharts的账号。然后发现MultiCharts的问题是真多, 其指标的编写方式,直到现在我依旧不喜欢。其次,因为是外国的软件,用的人很少, 在网络上几乎搜索不到任何有用的资料。所以,如果你有编写一个稍微复杂些的指标,如果在某一步卡住了, 那么很抱歉,你可能会不得不停止了。当然,这些都不算什么,总归是可以克服的。 最后让我不得不放弃它的原因是,频繁掉线。

是的,频繁掉线!不论是白天还是夜盘,平均每隔一分钟就掉线一次。联系了MultiCharts的客服,反复检查, 还远程操作了我的电脑,也没能解决问题。同样的账号,登录其他的交易软件,如文华、博易云等都没有问题, 可以排除是期货公司的原因。

两个星期后,我终于还是放弃了。MultiCharts并不支持云端条件单,因此如果掉线,所有的下单指令都会失效。 这简直太可怕了!

举个例子:比如,我交易10手沥青,可能前10秒,还盈利5000,但是因为掉线, 导致平仓慢了那么几秒,就从浮盈5000变成了浮亏5000。这损失难道MultiCharts会赔我吗?

你叫我怎么用?怎么能用?又怎么敢用? 所以,我最终还是和MultiCharts说了再见!

后来,因为接触到量化交易,于是学习了Python,从此打开了量化交易的另一扇门,进入了新的世界!

以上,是为缘起。

不多言,我们一起来看下反转图的魅力吧!

—————————————————————–

首先,导入必要的模块!

# 导入K线和指标绘制模块 from MyKlines import * # 系统模块,用于自动打开文件 import os

然后,我们获取股票的数据。

之前的文章有讲过怎么获取免费的股票数据,这里就不再重复了。 这里,我们选择凯莱英来作为示例。

data = get_data(code="sz.002821", start_date="2020-09-01", end_date="2021-05-29", frequency="d", adjust='2')

获取到的数据如下所示

 open close high low volume 2020-09-01 273.89 273.00 276.50 267.00 1658140 2020-09-02 272.99 270.00 273.99 268.30 1726549 2020-09-03 270.76 272.70 279.77 269.08 1778923 2020-09-04 267.30 267.68 271.97 262.80 2368819 2020-09-07 263.50 247.95 270.47 247.07 3500664 ... ... ... ... ... ... 2021-05-24 362.94 365.00 365.76 351.00 1561655 2021-05-25 363.48 369.13 371.00 362.13 2050934 2021-05-26 367.10 366.31 369.60 361.00 1321955 2021-05-27 366.35 366.66 370.80 358.00 1173571 2021-05-28 367.02 357.02 371.11 350.21 2582885 [178 rows x 5 columns] 

下面就是绘制反转图了。

这里,我们用到kbreak()函数,相关的参数如下所示:


  • 参数:
  • ax:绘图的区域
  • data:pandas数据:包括时间和价格
  • n=3, 反转的柱体
  • width:float格式,柱体的宽度
  • edgecolor_up=’red’, 上涨的边框颜色
  • facecolor_up=’white’, 上涨的填充颜色
  • edgecolor_down=’green’, 下跌的边框颜色
  • facecolor_down=’green’, 下跌的填充颜色
  • count_show=False, 是否显示趋势计数
  • grid_show=True, 是否显示网格

# 设置画布 fig = plt.figure(figsize=(12, 9), dpi=300) # 添加绘图区域 ax = fig.add_subplot(111)

先来个三线反转图

默认的反转图,上涨趋势是红色空心的,下跌趋势是绿色实心的。

# 画反转图 kbreak(ax, data, grid_show=False) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

也可以改成都是实心的柱体,柱体的颜色都是可以随意调整的,改为自己喜欢的颜色即可。

# 画图前清除绘图区域 plt.cla() kbreak( ax, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 width=0.5, # 柱体的宽度 edgecolor_up='red', # 上涨的边框颜色 facecolor_up='red', # 上涨的填充颜色 edgecolor_down='green', # 下跌的边框颜色 facecolor_down='green', # 下跌的填充颜色 count_show=False, # 是否显示趋势计数 draw_start=0, # 为了避免缺失值,从哪一项开始绘制 grid_show=False, # 是否显示网格 ) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

为了更好地观察和对比价格,我们可以为反转图添加网格。

# 画图前清除绘图区域 plt.cla() kbreak( ax, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 facecolor_up='red', # 上涨的填充颜色 grid_show=True, # 是否显示网格 ) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

为了更明显地展示趋势的延续情况,可以在柱体上添加趋势的计数。

# 画图前清除绘图区域 plt.cla() kbreak( ax, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 facecolor_up='red', # 上涨的填充颜色 count_show=True, # 是否显示趋势计数 grid_show=True, # 是否显示网格 ) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

反转图的特点,就是可以过滤掉震荡,把握住每一次的趋势。

如果不反转就不清仓,那么就绝不会过早止盈,从而提高盈亏比,吃掉趋势的绝大部分利润。 利用反转图,我们可以清楚地看到趋势的发展情况。 趋势是刚开始?还是已经延续了一段时间?趋势反转了吗? 关于趋势的问题,没有必反转图更好的可视化工具了!

我是真的太喜欢反转图了!

我们还可以调大反转图的反转参数,过滤掉一些较小的震荡。

比如,从三线反转,调整为六线反转,我们来看一下凯莱英的六线反转图:

data2 = get_data(code="sz.002821", start_date="2020-01-01", end_date="2021-05-29", frequency="d", adjust='2') # 画图前清除绘图区域 plt.cla() kbreak( ax, #绘图的区域 data2, # 绘图数据,包括时间和价格 n=6, #反转的柱体 facecolor_up='red', # 上涨的填充颜色 count_show=True, # 是否显示趋势计数 grid_show=False, # 是否显示网格 ) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

日线的数据+六线反转,适用于揭示长期的趋势。

就凯莱英的六线反转图而言,趋势十分明显,就一个字,涨!

当然,我们也是可以把反转图用于更小的周期。

比如60分钟、15分钟,乃至tick数据都没有任何问题。

还是凯莱英,我们使用60分钟数据,看下它的近期走势如何。

data3 = get_data(code="sz.002821", start_date="2021-01-01", end_date="2021-05-29", frequency="60", adjust='2') # 画图前清除绘图区域 plt.cla() kbreak( ax, #绘图的区域 data3, # 绘图数据,包括时间和价格 n=3, #反转的柱体 facecolor_up='red', # 上涨的填充颜色 count_show=True, # 是否显示趋势计数 grid_show=False, # 是否显示网格 ) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

把各个周期和不同反转柱体的反转图画到一起

为了更好地比较,我们可以把日线和分钟数据的反转图,画到一起。

# 画图前清除画布 plt.clf() ax1 = fig.add_subplot(211) ax2 = fig.add_subplot(212) kbreak( ax1, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 facecolor_up='r', # 上涨的填充颜色 grid_show=False, # 是否显示网格 ) ax1.set_title('凯莱英三线反转图(日线) 2020-09-01至2021-05-29') kbreak( ax2, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 facecolor_up='r', # 上涨的填充颜色 grid_show=False, # 是否显示网格 ) ax2.set_title('凯莱英三线反转图(60分钟) 2021-01-01至2021-05-29') # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

顺便提一下,我发现其他颜色和风格的反转图,也是很酷!

# 画图前清除画布 plt.clf() ax1 = fig.add_subplot(221) ax2 = fig.add_subplot(222) ax3 = fig.add_subplot(223) ax4 = fig.add_subplot(224) kbreak( ax1, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 draw_start=60, edgecolor_up='r', # 上涨的边框颜色 facecolor_up='w', # 上涨的填充颜色 edgecolor_down='g', # 下跌的边框颜色 facecolor_down='g', # 下跌的填充颜色 grid_show=False, # 是否显示网格 ) ax1.set_title('凯莱英三线反转图(日线) 2020-09-01至2021-05-29') kbreak( ax2, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 draw_start=60, edgecolor_up='g', # 上涨的边框颜色 facecolor_up='g', # 上涨的填充颜色 edgecolor_down='r', # 下跌的边框颜色 facecolor_down='r', # 下跌的填充颜色 grid_show=False, # 是否显示网格 ) kbreak( ax3, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 draw_start=60, edgecolor_up='k', # 上涨的边框颜色 facecolor_up='w', # 上涨的填充颜色 edgecolor_down='k', # 下跌的边框颜色 facecolor_down='k', # 下跌的填充颜色 grid_show=False, # 是否显示网格 ) kbreak( ax4, #绘图的区域 data, # 绘图数据,包括时间和价格 n=3, #反转的柱体 draw_start=60, edgecolor_up='r', # 上涨的边框颜色 facecolor_up='r', # 上涨的填充颜色 edgecolor_down='b', # 下跌的边框颜色 facecolor_down='b', # 下跌的填充颜色 grid_show=False, # 是否显示网格 ) # 调整图片的边缘空白大小,取值0-1. # 注意:right > left, top > bottom plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) 

  • 随便写了下,就是几个小时过去了。
  • 分享这东西,实在是太费时间了。
  • 我忍不住又问,我为什么要分享给你们呢?
  • 我自己一个人悄悄地割韭菜,不亦悦乎?
  • 想了想,或许是我希望遇到更多的志同道合者?
  • 毕竟,如我这般,以交易为生者,在中国、乃至全世界,都是极少数、极少数的。
  • 欢迎在评论区留下你的见解,我期待与你一起交流!

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注