乐趣区

关于python:基于Python构建自定义图形和指标一

一般来说券商 APP 曾经提供了十分丰盛的图表和数据,然而架不住老手各种天马行空的想像,以及对于能够寻找到圣杯的迷之自信,所以有必要介绍一下对于自定义图形和指标的实现形式。

数据源

比拟常见的几种数据源:财经网站、数据平台、数据接口。

财经网站

西方财产、新浪财经等等,此类网站很多,只是须要本人编写爬虫解析网页。

数据平台

大多为提供 PythonAPI,比方 Tushare、baostock 等,不过要么须要积分要么数据涵盖补全。

数据接口

雅虎财经相比国内的财经网站,特地提供了获取数据的接口服务,防止了编写爬虫和相熟各个数据平台的 API。

获取数据

由以下网址能够拜访苹果的历史数据:

https://au.finance.yahoo.com/quote/AAPL/history?p=AAPL

由图中 Download 的链接能够失去下载历史数据的接口,格局如下:

https://query1.finance.yahoo.com/v7/finance/download/AAPL?period1=1615556170&period2=1647092170&interval=1d&events=history&includeAdjustedClose=true

因而,咱们能够构建下载某个股票在指定工夫范畴内、指定工夫周期的历史数据。

#!/bin/bash
#
# Author: greedy_alpha@163.com
#
# 基于雅虎 API 获取股票历史数据
# 需传入要获取的股票代码、起止工夫、工夫周期等参数


###############################
# 参数校验
###############################

if [$# -lt 3]; then
    echo "Error: Please enter correct parameters"
    exit 1
else
    code=$1
    sday=$2
    eday=$3
    if [$# -gt 3]; then
        inte=$4
    else
        inte="1d"
    fi
fi


###############################
# 根底配置
###############################

HOME=$(cd "$(dirname"$0")" || exit; pwd)
cd "$HOME" || exit;

s_tms=$(date -d ${sday} +%s)
e_tms=$(date -d ${eday} +%s)

api="https://query1.finance.yahoo.com/v7/finance/download"
args="events=history&includeAdjustedClose=true"

data_path=../../data
file_name=${code}-${sday}-${eday}-${inte}.csv

###############################
# 函数实现
###############################

get_data() {url="${api}/${code}?period1=${s_tms}&period2=${e_tms}&interval=${inte}&${args}"
    curl -k ${url} > ${data_path}/${file_name}
}


###############################
# 数据处理
###############################

main() {get_data}

main

获取苹果 2022 年 1 月到 2 月的交易数据

sh get_history.sh AAPL 20220101 20220228

2022-02-14,167.369995,169.580002,166.559998,168.880005,168.880005,86185500

2022-02-15,170.970001,172.949997,170.250000,172.789993,172.789993,62527400

2022-02-16,171.850006,173.339996,170.050003,172.550003,172.550003,61177400

2022-02-17,171.029999,171.910004,168.470001,168.880005,168.880005,69589300

2022-02-18,169.820007,170.539993,166.190002,167.300003,167.300003,82772700

自定义图形和指标

有了数据,接下来就能够绘制自定义的图形和指标。

对于指标,TA-Lib 库提供了相当丰盛的技术剖析指标。
对于图形,mplfinance 库提供了金融数据可视化的基本功能。

这里以 KAMA- 考夫曼均线为例进行绘图。相比于一般均线,KAMA 增加了平滑系数,在肯定水平上缓解了一般均线在短时间周期时过于灵活、长时间周期又过于机灵的问题。

def indicators_kama():
    data["kama"] = talib.KAMA(data["Close"], timeperiod=30)

画图时按三行一列的布局。

fig = plt.figure()
fig.set_size_inches((20, 16))
ax_main = fig.add_subplot(3, 1, 1)
# 前面两个图应用与 ax_main 雷同的 X 轴
ax_macd = fig.add_subplot(3, 1, 2, sharex=ax_main)
ax_vol = fig.add_subplot(3, 1, 3, sharex=ax_main)

为防止非交易日造成图形不间断, 将索引与日期做映射

def format_date(x, pos):
    if x < 0 or x > len(data.index) - 1:
        return ''
    return data.index[int(x)]
ax_main.xaxis.set_major_formatter(tk.FuncFormatter(format_date))
# X 轴五天一个距离显示
ax_main.xaxis.set_major_locator(tk.MultipleLocator(5))

显示 MACD 指标时对零轴高低按不同色彩显示

ax_macd.plot(data.index, data["macd"], label="macd", color='y')
ax_macd.plot(data.index, data["macd_signal"], label="signal", color='b')
macd_hist = data[data.macd_hist >= 0].macd_hist
ax_macd.bar(macd_hist.index.tolist(), macd_hist, color='r')
macd_hist = data[data.macd_hist < 0].macd_hist
ax_macd.bar(macd_hist.index.tolist(), macd_hist, color='g')
ax_macd.get_xaxis().set_visible(False)
ax_macd.legend()

对于大于二十日均值的交易量按红色显示, 其它则按绿色显示

volume = data[data.Volume >= data.mavol].Volume
ax_vol.bar(volume.index.tolist(), volume, color='r')
volume = data[data.Volume < data.mavol].Volume
ax_vol.bar(volume.index.tolist(), volume, color='g')
ax_vol.get_xaxis().set_visible(False)

最终成果

退出移动版