失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python绘图黄金螺旋_量化投资常用技能——绘图篇:绘制黄金分割线

python绘图黄金螺旋_量化投资常用技能——绘图篇:绘制黄金分割线

时间:2021-11-10 06:42:55

相关推荐

python绘图黄金螺旋_量化投资常用技能——绘图篇:绘制黄金分割线

前言

之前的文章已经介绍了如何绘制收盘价折线图、烛状图、基于收盘价绘制移动平均线,接下来介绍如何绘制黄金分割线

大家可以关注我们的抖音号:“金融观察”(JRGC8888)了解更多

黄金分割线

黄金分割线也就是我们熟知的 0.382,0.618 分割线

视觉上的0.382和视觉上的0.618

计算方法如下:

sp382 = (max - min) * 0.382 + min

sp618 = (max - min) * 0.618 + min

统计上的0.382和统计上的0.618

我们需要使用scipy库下的stats类的scoreatpercentile()方法,使用pip即可安装scipy

pip install scipy

使用方法如下

stats.scoreatpercentile(arr, per)

arr为输入的数据,可以为列表或者DataFrame

per需要得到的百分比,参与计算的值为per/100,故0.628应该输入per=62.8

sp382_stats = stats.scoreatpercentile(data, 38.2)

sp618_stats = stats.scoreatpercentile(data, 61.8)

划定黄金分割线分割的范围

黄金分割线划定的范围是两条0.382分割线和两条0.618之间的范围,因此我们采用下面函数计算范围

above618 = np.maximum(sp618, sp618_stats) # 从视觉0.618和统计0.618中筛选更大的值

below618 = np.minimum(sp618, sp618_stats) # 从视觉0.618和统计0.618中筛选更小的值

above382 = np.maximum(sp382, sp382_stats) # 从视觉0.382和统计0.382中筛选更大的值

below382 = np.minimum(sp382, sp382_stats) # 从视觉0.382和统计0.382中筛选更小的值

绘制黄金分割线

我们使用的数据为通过abupy库导入的tsla的历史数据,结合之前介绍的绘制烛状图的方法,绘制黄金分割线代码如下

import abupy

import numpy as np

import matplotlib.pyplot as plt

import mpl_finance as mpf

from scipy import stats

from matplotlib.dates import date2num

from abupy import ABuSymbolPd, pd_rolling_mean, nd

# ———————————————————— #

# ———— 默认参数设置 ———— #

# ———————————————————— #

__colorup__ = "red"

__colordown__ = "green"

abupy.env.enable_example_env_ipython() # 使用沙盒数据,目的是和书中一样的数据环境,不使用会报错

tsla_df = ABuSymbolPd.make_kl_df('usTSLA', n_folds=2) # 固定导入tsla的行情数据

tsla_df = tsla_df[:50] # 选取前50个,数据过多不易观察

print(tsla_df[:10])

# ———————————————————— #

def plot_ochl(data_df=tsla_df, axs=None, show=False):

'''

绘制烛状图

:param data_df: 输入的数据,默认采用tsla的历史行情数据,输入的数据类型目前只支持DataFrame类型

:param axs: 是否在子图上绘制

:param show: 是否显示图像

:return:

'''

drawer = plt if axs is None else axs

fig, ax = drawer.subplots(figsize=(14, 7))

qutotes = []

for index, (d, o, c, h, l) in enumerate(

zip(data_df.index, data_df.open, data_df.close,

data_df.high, data_df.low)):

d = date2num(d) # 蜡烛图的日期要使用matplotlib.finance.date2num进行转换为特有的数字值

val = (d, o, c, h, l) # 日期,开盘,收盘,最高,最低组成tuple对象val

qutotes.append(val) # 加val加入qutotes

# 使用mpf.candlestick_ochl进行蜡烛绘制,ochl代表:open,close,high,low

mpf.candlestick_ochl(ax, qutotes, width=0.6, colorup=__colorup__, colordown=__colordown__)

ax.autoscale_view()

ax.xaxis_date()

if show:

plt.show()

def plot_goldline(data_df=tsla_df, axs=None, show=False):

'''

绘制黄金分割线

:param data_df: 输入的数据,默认采用tsla的历史行情数据,输入的数据类型目前只支持DataFrame类型

:param axs: 是否在子图上绘制

:param show: 是否显示图像

:return:

'''

cs_max = data_df.close.max() # 收盘价格序列中的最大值

cs_min = data_df.close.min() # 收盘价格序列中的最小值

# 视觉上的0.382和视觉上的0.618

sp382 = (cs_max - cs_min) * 0.382 + cs_min

sp618 = (cs_max - cs_min) * 0.618 + cs_min

# 统计上的0.382和统计上的0.618

sp382_stats = stats.scoreatpercentile(data_df.close, 38.2)

sp618_stats = stats.scoreatpercentile(data_df.close, 61.8)

above618 = np.maximum(sp618, sp618_stats) # 从视觉0.618和统计0.618中筛选更大的值

below618 = np.minimum(sp618, sp618_stats) # 从视觉0.618和统计0.618中筛选更小的值

above382 = np.maximum(sp382, sp382_stats) # 从视觉0.382和统计0.382中筛选更大的值

below382 = np.minimum(sp382, sp382_stats) # 从视觉0.382和统计0.382中筛选更小的值

plt.axhline(sp382, c='r') # 水平线视觉0.382

plt.axhline(sp382_stats, c='m') # 水平线统计0.382

plt.axhline(sp618, c='g') # 水平线视觉0.618

plt.axhline(sp618_stats, c='k') # 水平线统计0.618

plt.fill_between(data_df.index, above618, below618, alpha=0.5, color="r") # 填充0.618 red

plt.fill_between(data_df.index, above382, below382, alpha=0.5, color="g") # 填充0.382 green

plt.legend(['close', 'sp382', 'sp382_stats', 'sp618', 'sp618_stats'], loc='best') # 根据绘制顺序标注名称

if show:

plt.show()

if __name__ == '__main__':

plot_ochl() # 绘制烛状图,会新建画布

plot_goldline(show=True) # 绘制黄金分割线

输出图像如下:

欢迎大家关注我们

我们的抖音号:金融观察(JRGC8888)

本文地址:/weixin_41782172/article/details/110421345

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

如果觉得《python绘图黄金螺旋_量化投资常用技能——绘图篇:绘制黄金分割线》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。