Oracle存储过程实现BOLL(布林线)计算

BOLL公式

首先我们要了解布林线的计算公式,可以去百度百科或者维基百科上看
这是我整理的布林线公式:

布林线(BOLL):
上轨线(UP): MB + 2 * MD
中轨线(MB): N日的MA
下轨线(DN): MB – 2 * MD
MA: N日均值
MD: 平方根N日的(C – MA)的两次方和除以N

可以看到布林线的计算公式还是很简单的,中轨线(MB)就是当天的N日均值,一般都会使用20日作为参数,其中比较有难度的就是MD这个标准差的计算,C是N日内每日对应的收盘价,或者更直观一点

这个σ就是MD,xi就是N日内每日的均值, ̅x就是MA,n就是参数,一般为20,把对应的数据代进去,我们就能算出MD了;

数据准备

了解公式后没有数据也不能计算,大家可以去下面这篇文章看数据准备,而且布林线的计算也需要20日均线:
https://blog.csdn.net/qq_16186465/article/details/118059033

表准备

我是单独把数据存在一个独立的表里,所以要新建一个BOLL表,大家也可以在原数据表创建对应字段也行:

--创建BOLL表
create table BOLL (dates date, BOLLUP number, BOLLMB number, BOLLDN number);
--把STOCKDATA表中的日期复制给BOLL表
insert into BOLL(dates) select dates from STOCKDATA;

里面这个STOCKDATA表就是上面数据准备的表,所以我这个关联性还是挺大的

存储过程

CREATE OR REPLACE PROCEDURE GETBOLL
ASvar_MD number; -- 近20日收盘价标准差var_MB number; -- 中轨线, 也是当天20日均线值var_UP number; -- 上轨线var_DN number; -- 下轨线var_count number := 0; -- 用作数组长度,或下标var_sum number := 0; -- 用作标准差求和部分type arr_num is table of number index by BINARY_INTEGER; -- 定义一个一维数组arr_close arr_num; -- 用于存放近20日内收盘价cursor stockdata is -- 声明游标stockdataselect dates, closingratefrom STOCKDATAorder by dates asc;
BEGIN -- 开始存储过程for i in stockdata loop -- 游标FOR循环var_count := var_count + 1; -- 数组下标var_MB := GETMA(i.dates, 20); -- 调用GETMA函数,传入:当前日期,20日 意为获取当天的20日均线值arr_close(var_count) := i.closingrate; -- 将当前收盘价存入数组if var_count = 20 then -- 当数组长度达20时执行for j in 1 .. 20 loop -- FOR循环从1到20,将数组中的数据求和,此处为计算标准差求和部分var_sum := var_sum + power((arr_close(j) - var_MB), 2);end loop; -- 结束循环for j in 1 .. 19 loop -- 数组中全部数据往前移动一个元素,留最后一个位置给下次的收盘价arr_close(j) := arr_close(j + 1);end loop; -- 结束循环var_MD := sqrt(var_sum / 20); -- 计算完整的标准差var_UP := var_MB + 2 * var_MD; -- 公式 UP = MB + 2 * MDvar_DN := var_MB - 2 * var_MD; -- 公式 DN = MB - 2 * MDvar_count := 19; -- 数组长度变为19var_sum := 0; -- 清空数据,方便下次求和update BOLL set BOLLUP = round(var_UP,2), BOLLDN = round(var_DN,2), BOLLMB = var_MB -- 更新数据where dates = i.dates;end if; -- 结束判断end loop; -- 结束游标FOR循环commit; -- 提交,使用update、delete、insert、alter时一定要提交
END; -- 结束存储过程

计算布林线的时候只要解决计算MD这个方差,其他都很容易就能代入公式计算了
其中我封装了一个GETMA获取均值的函数:

CREATE OR REPLACE FUNCTION GETMA(var_date in date, days in number)
RETURN number
ASvar_MA number;var_exists number;var_sql varchar(100) := '';
BEGINselect count(*) into var_existsfrom user_tab_cols where table_name= 'STOCKDATA' and column_name= 'MA'||days;if var_exists = 0 thenMA(days);end if;var_sql := 'select MA'||days||' from stockdata where dates = '''||var_date||'''';execute immediate var_sql into var_MA;RETURN var_MA;
END;

这里面又有一个调用存储过程MA,是我之前写的计算日均线存储过程,所以关联性确实很大,大家也可以用自己的方法,我也只是给出一个参考,主要还是学习思路吧

结尾

我相信还有比我更好、更快的计算思路和方法,如果有小伙伴的更好可以分享出来大家互相学习

Oracle存储过程实现BOLL(布林线)计算相关推荐

  1. 策略验证_指标买点分析技法_运用boll布林线指标选择买点

    写在前面: 1. 本文中提到的"股票策略校验工具"的具体使用操作请查看该博文: 2. 文中知识内容来自书籍<同花顺炒股软件从入门到精通> 3. 本系列文章是用来学习技法 ...

  2. Oracle存储过程实现X日均线计算

    Oracle存储过程实现X日均线计算 前期准备 首先我们需要有一个存有股票数据的数据表,我的数据表如下(部分数据,使用的图形界面软件是Navicat): 主要有五个字段,分别对应日期.开盘价.最高价. ...

  3. 量化投资常用技能——指标篇2:详解BOLL(布林线)指标,及其代码实现和绘图

    量化投资常用技能 系列文章目录 我们已经介绍了三篇关于量化投资方面绘图的文章和一篇指标类的推导和介绍的文章,大家有兴趣可以了解一下 绘图篇 量化投资常用技能--绘图篇 1:绘制股票收盘价格曲线和och ...

  4. 常用技术指标之一文读懂BOLL布林线指标

    什么是布林线指标? 布林线BOLL指标(Bollinger Bands)是股市技术分析的常用工具之一,由美国金融分析师John Bollinger根据移动平均线和统计学中的标准差原理于1980年代设计 ...

  5. Python绘制BOLL布林线指标图

    写在前面 布林线(BOLL)技术指标简介 BOLL公式详解 参数设置 用到的主要Python库 Python代码&详解 参考文献 推荐阅读 写在前面 本文代码部分总结自Packt出版社的< ...

  6. BOLL布林线指标-股价的中长期走势

    BOLL指标可用于确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带.BOLL适用于预测股价运动的中长期走势,其"股价信道"对预测未来行情的走势起着重 ...

  7. java 布林线_交易信号---MACD、RSI、Boll、分型等技术信号

    技术指标 在交易决策过程中的简图: 什么是技术指标? 基于行情数据,通过特定数学公式或模型计算得出的.用于辅助交易决策的数值序列 技术指标的分类 三种关系: 趋势线: 股市走势震荡起伏,供需关系被打破 ...

  8. 布林线均值回归(股票)——Python量化

    布林线均值回归策略 目录 布林线均值回归策略 1. 原理 2. 策略思路 3. 策略代码 4. 回测结果与稳健性分析 1. 原理 提起布林线均值回归策略,就不得不提布林带这个概念.布林带是利用统计学中 ...

  9. 【量化策略三】布林线进行均值回归交易策略

    目录 策略逻辑 增量代码 回测结果 结果分析 上一篇用多因子策略回测后,止损效果不明显,这次用布林带突破. 策略逻辑 当价格触及布林线上轨的时候进行卖出,当触及下轨的时候,进行买入. 增量代码 # c ...

最新文章

  1. 通过代码获取Bitmap图片资源
  2. Hugo快速搭建Blog
  3. UVa 10290 - {Sum+=i++} to Reach N
  4. NIOS II spi详解
  5. 分布式锁的实现方式——ACID数据库、缓存或者是zk
  6. python线程检测网段脚本!
  7. matlab中如何提取等高线,在Python或MATLAB中从等高线图中提取数据
  8. linux中python如何调用matlab的数据_特征锦囊:如何在Python中处理不平衡数据
  9. 检测oracle的语句,oracle功能检测sql语句
  10. Java 11新特性_java 11 值得关注的新特性
  11. No.1-Apache IoTDB 随笔 - Time Series DBMS 综述
  12. setResult详解
  13. 在c语言中下面的运算符中优先级最高的是,C语言习题请高手解答急急急1.下列运算符中优先级最高的运算符 爱问知识人...
  14. 花书+吴恩达深度学习(七)优化方法之基本算法(Momentum, Nesterov, AdaGrad, RMSProp, Adam)
  15. Safe handle has been closed异常的原因及解决思路
  16. 2602 最短路径问题
  17. 4、Java 并发编程基础
  18. 微信小程序通过PHP控制云开发数据库的写入,读出,更新,删除
  19. Python函数返回多个值的方法
  20. 2007网吧经营攻略之技术完全篇

热门文章

  1. Matlab MFCC音乐特征匹配与DTW算法识别(含GUI设计)
  2. 面试总结(三)——连连支付
  3. 爱尔兰圣三一大学计算机专业申请,爱尔兰计算机专业申请
  4. linux gtx驱动程序,linux GTX1080TI安装显卡驱动小记
  5. 树 ( 树形结构 + 数学 )
  6. 游戏消息服务器长链接,游戏服务器匹配 长连接
  7. modbus_tk 读取浮点数的处理
  8. Python描述数据结构之图实战篇
  9. asp.net 页面背景音乐
  10. 台湾校长高震东演讲震动国人