写点什么

Python 金融量化 随机指标交易策略,闭关 60 天学懂 NDK+Flutter

作者:程序媛可鸥
  • 2022 年 3 月 18 日
  • 本文字数:2860 字

    阅读完需:约 9 分钟

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')


4. 计算 RSV


===============================================================================


若以 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 值进行平滑得到的结果。


5. 计算 K、D 指标值


==================================================================================


5.1 K 值、D 值指标概述




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 程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!最后祝你好运!!!

用户头像

Python编程资料加Q群免费领取:419829237 2022.03.14 加入

还未添加个人简介

评论

发布
暂无评论
Python 金融量化 随机指标交易策略,闭关60天学懂NDK+Flutter_Python_程序媛可鸥_InfoQ写作平台