Python 金融量化 随机指标交易策略,闭关 60 天学懂 NDK+Flutter
import tushare as ts
import pandas as pd
token = 'Your token' # 输入你的接口密匙,获取方式及相关权限见 Tushare 官网。这句话不能照抄!
pro = ts.pro_api(token)
def get_data(tscode):
df = pro.daily(ts_code=tscode)
df = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close', 'vol']]
df.rename(
columns={
'trade_date': 'Date', 'open': 'Open',
'high': 'High', 'low': 'Low',
'close': 'Close', 'vol': 'Volume'},
inplace=True) # 重定义列名,方便统一规范操作。
df['Date'] = pd.to_datetime(df['Date']) # 转换日期列的格式,便于作图
df.set_index(['Date'], inplace=True) # 将日期列作为行索引
df = df.sort_index() # 倒序以便作图
return df
df = get_data('000001.SZ')
===============================================================================
若以 9 日为时间跨度:
import numpy as np
import matplotlib.pyplot as plt
close = df.Close
high = df.High
low = df.Low
获取日期数据
date = close.index.to_series()
ndate = len(date)
定义初始变量最高价 High,取值均为 0
periodHigh = pd.Series(np.zeros(ndate-8),index=date.index[8:])
定义初始变量最低价为 Low,取值均为 0
periodLow = pd.Series(np.zeros(ndate-8),index=date.index[8:])
定义初始变量 RSV,取值均为 0
RSV = pd.Series(np.zeros(ndate-8), index=date.index[8:])
计算 9 日未成熟随机指标 RSV 的值
for j in range(8,ndate):
period = date[j-8:j+1]
i = date[j]
periodHigh[i] = high[period].max()
periodLow[i] = low[period].min()
RSV[i] = 100 * (close[i]-periodLow[i])/(periodHigh[i]-periodLow[i])
periodHigh.name = 'periodHigh'
periodLow.name = 'periodLow'
RSV.name = 'RSV'
写到这里,查看一下生成的数据:
对 RSV 作简要描述性分析
RSV.describe()
然后,我们绘制平安银行 2020 年数据的收盘价曲线图和 RSV 曲线图
提取数据
C_RSV=pd.DataFrame([close['2020'],RSV['2020']]).transpose()
绘图
plt.rcParams['font.sans-serif'] = ['SimHei']
C_RSV.plot(subplots=True, title='未成熟随机指标 RSV')
RSV 的取值在 0~100 之间,且波动范围较大。且有很多时候 RSV 取值接近或等于 0 或者 100。
接下来,再绘制其 K 线图进一步对照:
import mplfinance as mpf
s = mpf.make_mpf_style(base_mpf_style='blueskies', rc={'font.family': 'SimHei'})
add_plot=[mpf.make_addplot(RSV['2020'])]
mpf.plot(df['2020'],type='candle', style=s, title='平安银行 2020 年 K 线图及未成熟随机指标 RSV', addplot=add_plot,volume=True)
图像效果如下:
分析图像可知,处于上涨行情时,蜡烛图的上影线较短或者没有上影线,在部分交易日中收盘价接近或等于最高价。
由 RSV 计算公式和 n=9 可推知,若收盘价等于 9 日最高价,RSV 取值则为 100。
在下跌行情时,蜡烛图的下影线较短或者几乎没有,收盘价很有可能等于 9 日最低价,当收盘价接近或等于等于 9 日最低价的时候,RSV 取值接近或为 0。
当市场处于连续上涨行期的时候,未成熟随机指标 RSV 取值也逐渐增大,并且可能在较多日期中取值为 100;当市场处于连续下跌行期的时候,RSV 取值可能在较多行期中取值为 0。
当 RSV 连续多期取值为 0 或 100 的时候,RSV 则会出现所谓“钝化”的现象。
例如当收盘价在上涨行情高位变化的时候,RSV 一段时间的取值均为 100,不随收盘价的变化而波动,则失去了捕捉收盘价变化的作用。
需要注意的是,RSV 的波动幅度较大,也可能会造成“假信号”。一种可能的情况是,在上涨行期中收盘价上涨幅度稍微增大,则可能造成 RSV 取值过大,进而释放出“超买”行期的假信号。
为了解决 RSV 波动幅度较大的问题,我们引入 K 指标。它是对 RSV 值进行平滑得到的结果。
==================================================================================
K 值由前一日的 K 值和当期 RSV 值经过一定权重调整后相加得到,一般来说,K 值的计算为:
K 值 = 2 3 × 前 一 日 K 值 + 1 3 × 当 日 R S V \displaystyle K 值=\frac{2}{3}×前一日 K 值+\frac{1}{3}×当日 RSV K 值=32?×前一日 K 值+31?×当日 RSV
即 K t = 2 3 × K t ? 1 + 1 3 × R S V t \displaystyle K_t=\frac{2}{3}×K_{t-1}+\frac{1}{3}×RSV_t Kt?=32?×Kt?1?+31?×RSVt?
D 值是由前一日的 D 值和当期 K 值经过一定权重相加而得到。一般来说,D 值的计算为:
D 值 = 2 3 × 前 一 日 D 值 + 1 3 × 当 日 K 值 \displaystyle D 值=\frac{2}{3}×前一日 D 值+\frac{1}{3}×当日 K 值 D 值=32?×前一日 D 值+31?×当日 K 值
即 D t = 2 3 × D t ? 1 + 1 3 × K t \displaystyle D_t=\frac{2}{3}×D_{t-1}+\frac{1}{3}×K_t Dt?=32?×Dt?1?+31?×Kt?
此外,在计算第一期 K 和 D 值时,如果没有指定,则 K 值和 D 值都默认取值为 50。在 K 值和 D 值的求解过程中,平滑权重 2/3 和 1/3 是较为常用的权重,这两个权重也可以根据股价走势的特点进行适当修改。
(通过递归和迭代,我们可以发现 K 值是由未成熟随机指标 RSV 通过指数移动平均而得到的。D 值是 K 值的指数移动平均数。)
og.csdn.net/article/details/116328265)5.2 计算代码
计算 K 值
KValue = pd.Series(0.0, index=RSV.index)
KValue[0] = 50
for i in range(1,len(RSV)):
KValue[i] = 2/3*KValue[i-1] + RSV[i]/3
KValue.name = 'KValue'
接着计算 D 值
DValue = pd.Series(0.0, index=RSV.index)
DValue[0] = 50
for i in range(1, len(RSV)):
DValue[i] = 2/3*DValue[i-1] + KValue[i]/3
DValue.name = 'DValue'
KValue = KValue[1:]
DValue = DValue[1:]
如果你也是看准了 Python,想自学 Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析 Python 兼职、就业行情前景的这些事儿。
一、Python 所有方向的学习路线
Python 所有方向路线就是把 Python 常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其必先利其器。学习 Python 常用的开发软件都在这里了,给大家节省了很多时间。
三、全套 PDF 电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习 Python 必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
成为一个 Python 程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!最后祝你好运!!!
评论