Python 量化投资(一):滑动均值、布林带、MACD、RSI、KDJ、OBV

news/2025/1/3 16:46:53/

滑动均值和标准差

为了更好利用向量化来加速,滑动窗口使用np.lib.stride_tricks.sliding_window_view(x, win)提取,它会返回所有x[i]开头并且长度为win的数组的数组。

def rolling(x, win):r = np.lib.stride_tricks.sliding_window_view(x, win)pad = np.zeros([len(x) - len(r), win]) * np.nanreturn np.vstack([pad, r])def rolling_mean(x, win):return rolling(x, win).mean(-1)def rolling_std(x, win):return rolling(x, win).std(-1)

布林带

def bollinger(close, win=10, nstd=2):means = rolling_mean(close, win)stds = rolling_std(close, win)upper = means + nstd * stdslower = means - nstd * stdsreturn upper, means, lower

指数滑动均值

这是原始实现:

# 计算指数平滑 
# y[i] = alpha * x[i] + (1 - alpha) * y[i - 1]
def exp_smooth_naive(x, alpha):y = x.copy()for i in range(1, len(y)):y[i] = y[i] * alpha + y[i - 1] * (1 - alpha)return y

原始公式是递归的,需要改成通项才能向量化,这是推导过程:

y[0] = x[0] = inity[t] = alpha * x[t]  + (1-alpha) * y[t-1]= alpha * x[t]  + (1-alpha) * alpha * x[t-1] + (1-alpha) ** 2 * y[t-2]= alpha * x[t]  + (1-alpha) * alpha * x[t-1] + ... + (1-alpha)** t * init= alpha * x[t]  + (1-alpha) * alpha * x[t-1] + ... + alpha * (1-alpha)** t * init + (1 - alpha) ** (t + 1) * init= Σ(alpha * (1 - alpha) ** i * x[t-i]; i: 0 -> t) + (1 - alpha) ** (t + 1) * initcorr[i] = alpha * (1-alpha) ** i
supl[t] = (1 - alpha) ** (t + 1) * init y[t] = Σ(corr[i] * x(t-i); i: 0 -> t) + supl[t]
y = conv(corr, x) + supl

这就完成了向量化,因为 NumPy 或者 PyTorch 都针对卷积做了特殊优化。

def exp_smooth_vec(x, alpha):init, n = x[0], len(x)corr =  alpha * (1 - alpha) ** np.arange(0, n)supl = (1 - alpha) ** (np.arange(0, n) + 1) * inity = np.convolve(corr, x, 'full')[:n] + suplreturn yexp_smooth = exp_smooth_vecdef rolling_ema(x, win):x = np.asarray(x)alpha = 2 / (win + 1.0)return exp_smooth(x, alpha)

MACD

def macd(close, fast_win=12, slow_win=26, sig_win=9):fast = rolling_ema(close, fast_win)slow = rolling_ema(close, slow_win)dif = fast - slowdea = rolling_ema(dif, sig_win)macd_ = dif - dea * 2return macd_, dif, dea

RSI

def rsi(close, win=3):change = np.diff(close)up = np.where(change > 0, change, 0)down = np.where(change < 0, change, 0)sum_up = rolling(up, win).sum(-1)sum_down = rolling(down, win).sum(-1)eps = 1e-12rs = sum_up / (sum_down + eps)rsi_ = 100 - 100 / (1 + rs)return np.hstack([[np.nan], rsi_])

KDJ

def kdj(close, low, high, n=9):hn = rolling(high, n).max(-1)ln = rolling(low, n).min(-1)rsv = (close - ln) / (hn - ln) * 100rsv = [x for x in rsv if not np.isnan(x)]rsv = np.hstack([[50], rsv])k = exp_smooth(rsv, 2/3)d = exp_smooth(k, 2/3)j = 3 * k - 2 * dpad = [np.nan] * (len(close) - len(k))k = np.hstack([pad, k])d = np.hstack([pad, d])j = np.hstack([pad, j])return k, d, j

OBV

def obv(close, vol):change = np.diff(close)sig = np.hstack([[1], np.sign(change)])obv_ = np.cumsum(vol * sig)return obv_

http://www.ppmy.cn/news/860302.html

相关文章

分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)

目录 分布式锁解决方案_数据库乐观锁实现的分布式锁 分布式锁解决方案_Redis实现的分布式锁原理 分布式锁解决方案_Redis实现的分布式锁 分布式锁解决方案_Redis分布式锁误删除问题 分布式锁解决方案_Redis分布式锁不可重入问题 分布式锁解决方案_基于Redisson实现的分布式…

windows专业版升级企业版

windows专业版升级企业版 秘钥: NPPR9-FWDCX-D2C8J-H872K-2YT43 使用神龙kms激活系统[KMS在线激活windows 10 / 8 / 7和office 2019 / 2016 / 2013 /2010之MicroKMS 神龙版-网络教程与技术 -亦是美网络 (yishimei.cn)](

免费版、专业版、增值版各个版本之间的区别

微软对Power BI目前有三种授权方式&#xff0c;免费版&#xff08;Power BI Free&#xff09;&#xff0c;专业版&#xff08;Power BI Pro&#xff09;&#xff0c;以及增值版&#xff08;Power BI Premium&#xff09;。前两种主要适用于个人以及中小型企业&#xff0c;后一种…

win10哪个版本最好用,推荐win10企业版LTSC

win10企业版LTSC又被称为win10企业版2019长期服务版本&#xff0c;这个版本小编认为是目前最好用的win10版本,在win10企业版2016长期服务版本的基础上&#xff0c;微软做了大量优化和升级。win10企业版LTSC更加快捷和轻便。 现在很多网站上都是有人修改过的win10企业版LTSC安装…

Win10家庭版、专业版、企业版、教育版各版本功能区别对照表

关于Win10系统的版本问题&#xff0c;MS酋长之前曾经分享过Windows10有哪些版本&#xff0c;在这篇文章中简单地介绍了一下Win10各版本的功能区别及适宜用户群&#xff0c;但是并没有对各版本的功能区别做一详细的对比。日前微软发布了一份PDF文档&#xff0c;对Win10家庭版、专…

win10专业版和企业版的区别_win10家庭版和专业版区别

win10家庭版和专业版在兼容性、系统性能上没有任何差别&#xff0c;主要区别在于功能上的不同。专业版比家庭版多了Bitlocker磁盘加密技术、远程桌面、域、组策略、Hyper-V虚拟机等功能。而且&#xff0c;专业版有暂停更新按钮&#xff0c;家庭版没有。不过&#xff0c;其实这些…

win10专业版和企业版的区别_Win10专业版和家庭版有什么区别?Win10家庭版和专业版区别对比...

Windows10共有四个版本&#xff0c;分别为专业版、家庭版、企业版、教育版&#xff0c;可能大家会在选择家庭版和专业版中纠结&#xff0c;不知道如何选择&#xff0c;原因无非就是因为你对两大版本不太了解&#xff0c;当然版本不同&#xff0c;功能可能有所不同。那么Win10专…

w ndows10家庭版和企业版谁好用,Windows10系统哪个版本好?Win10家庭版和专业版的区别介绍...

Win10正式版发布越来越近,相信很多电脑爱好者朋友都想第一时间体验上Windows 10操作系统。不过Win10版本众多,不少小伙伴经常会问到Win10哪个版本好啊。之前脚本之家带来的“Win10有几个版本”一文中详细介绍了Win10共有7个版本,普通个人和大众用户主要可以选择Win10家庭版和…