• Admin

量化投资常用技能——绘图篇3:绘制黄金前言

之前的文章已经介绍了如何绘制收盘价折线图、烛状图基于收盘价绘制

移动平均线,接下来介绍如何绘制黄金分割线


大家可以关注我们的抖音号:“金融观察”(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) # 绘制黄金分割线


输出图像如下:




3 views0 comments

A leading day trading platform, specializing in U.S. equity markets with operations worldwide.

CONTACT US:

 

Mon - Fri 9:00 - 17:30 HK

‭+852 55745397

marketing@shewutrade.com

RM06,13A/F, South Tower, World Finance Centre, 17 Canton Road, Tsim Sha Tsui, HK.

Options involve risk and are not suitable for all investors. All investment strategies and investments involve risk of loss. Nothing contained in this website should be construed as investment advice. Any reference to an investment's past or potential performance is not, and should not be construed as, a recommendation or as a guarantee of any specific outcome or profit. Margin borrowing is only for experienced investors with high risk tolerance. You may lose more than your initial investment. Lower investment costs will increase your overall return on investment, but lower costs do not guarantee that your investment will be profitable. Any trading symbols displayed are for illustrative purposes only and are not intended to portray recommendations. Past performance is not necessarily indicative of future results.

  • Facebook
  • LinkedIn
  • Twitter
  • Instagram
  • TikTok
  • YouTube