Python 金融量化 随机指标交易策略(上)

简介: Python 金融量化 随机指标交易策略(上)

1.随机指标概述

随机指标(KDJ)又称为随机指数(The Random Index),是一种用来分析市场中超买或者超卖现象的指标。它最早应用于期货市场,后来在股票市场中被众多投资者广泛使用。
KDJ最基础的交易思想建立在威廉指标 (Williams %R,简称W%R)的基础上,威廉指标分析资产的价格时,除了考虑每天的收盘价以外,还有综合分析资产从开市到收市期间价格的变化情况。威廉指标的计算首先选择一个时间跨度(比如14日),然后找出这一特定区间的最高价和最低价,构成一个价格变化区间;然后分析这一事件跨度最后一个时间点的收盘价与期间最高价的相对位置,再根据此相对位置来衡量市场的超买或者超卖现象。
W%R指标可以表述为:
在这里插入图片描述
随机指标的最早雏形是芝加哥期货交易商George Lane提出的KD指标,也称随机震荡指标。KD指标的分析思想与威廉指标类似,均使用特定时间跨度中的最后收盘价与该时间段跨度内的最高价和最低价的相对位置来推测市场的超买和超卖情况。与威廉指标不同的地方在于,随机震荡指标在收盘价与最高价和最低价的相对位置的比值上,又融入了移动平均思想,用更多的信息来捕捉市场的超买和超卖现象。
KDJ指标则是在随机震荡指标K先和D线的基础上增添1一条J线,进一步提高了随机震荡指标对市场买卖信号捕捉的周延。


2.随机指标原理

KDJ指标由K线,D线,和J线三条线组成,根据特定的周期(通常为9天,9周等)内资产的最高价、最低价、最后一个计算时点的收盘价以及这三种价格的比例关系,来计算最后一个时点的未成熟随机值RSV(Raw Stochastic Value),进而通过移动平均法来计算K值、D值和J值。然后将各时点的K值,D值,J值描点连线,即得到K线,D线和J线。

计算RSV的值是求KDJ指标的第一步,RSV的计算公式为:
在这里插入图片描述

3.获取数据

数据照常从tushare获取 平安银行股价数据

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

目录
相关文章
|
1月前
|
数据可视化 数据处理 Python
如何使用Python实现一个基于均线的交易策略
【10月更文挑战第9天】本文介绍了如何使用Python实现一个基于均线的交易策略。主要步骤包括导入所需库(如`pandas`、`numpy`和`matplotlib`),加载股票或期货的历史数据,计算均线和其他指标,实现交易策略逻辑,以及可视化交易结果。示例代码展示了如何根据均线交叉点进行开仓、止损和止盈操作,并提供了注意事项,如数据来源、交易成本和风险管理。
70 7
|
1月前
|
运维 负载均衡 安全
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
97 0
|
1月前
|
机器学习/深度学习 数据采集 TensorFlow
智能市场营销策略优化:使用Python实现深度学习模型
【10月更文挑战第1天】 智能市场营销策略优化:使用Python实现深度学习模型
167 63
|
16天前
|
算法 数据处理 开发者
超越传统:Python二分查找的变种策略,让搜索效率再上新台阶!
本文介绍了二分查找及其几种Python实现的变种策略,包括经典二分查找、查找第一个等于给定值的元素、查找最后一个等于给定值的元素以及旋转有序数组的搜索。通过调整搜索条件和边界处理,这些变种策略能够适应更复杂的搜索场景,提升搜索效率和应用灵活性。
28 5
|
16天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
33 4
|
18天前
|
算法 IDE API
Python编码规范与代码可读性提升策略####
本文探讨了Python编码规范的重要性,并深入分析了如何通过遵循PEP 8等标准来提高代码的可读性和可维护性。文章首先概述了Python编码规范的基本要求,包括命名约定、缩进风格、注释使用等,接着详细阐述了这些规范如何影响代码的理解和维护。此外,文章还提供了一些实用的技巧和建议,帮助开发者在日常开发中更好地应用这些规范,从而编写出更加清晰、简洁且易于理解的Python代码。 ####
|
21天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
25天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
49 5
|
1月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
75 1
|
1月前
|
设计模式 机器学习/深度学习 算法
现代 Python:编写高效代码的模式、功能和策略(第 1 部分)
现代 Python:编写高效代码的模式、功能和策略(第 1 部分)
28 0
下一篇
无影云桌面