首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在列SQL中运行(平均True Range)计算

在SQL中计算平均真实范围(Average True Range,ATR)是一种常用的技术分析方法,主要用于金融市场的价格波动分析。ATR可以帮助交易者了解市场波动性和潜在的风险水平。

基础概念

真实范围(True Range)是指在某一天的最高价、最低价和前一天的收盘价之间的最大差值。计算公式如下: [ \text{True Range} = \max(High - Low, |High - PreviousClose|, |Low - PreviousClose|) ]

平均真实范围(Average True Range,ATR)是对真实范围的平均值进行计算,通常使用简单移动平均(SMA)或指数移动平均(EMA)。

相关优势

  1. 波动性测量:ATR能够有效衡量市场的波动性,帮助交易者制定止损和止盈策略。
  2. 无方向性:ATR不依赖于价格的涨跌方向,因此可以用于任何类型的交易策略。
  3. 适应性:ATR能够自动调整以反映市场条件的变化。

类型

  • 简单移动平均(SMA)ATR:使用固定时间窗口内的真实范围的平均值。
  • 指数移动平均(EMA)ATR:给予最近数据更高的权重,反应更快。

应用场景

  • 设置止损和止盈:根据ATR的值来确定止损和止盈的水平。
  • 仓位管理:根据ATR调整每次交易的仓位大小。
  • 趋势跟踪:结合其他指标使用,辅助判断市场趋势。

示例SQL代码

假设我们有一个名为stock_prices的表,包含以下列:date, high, low, close。我们将计算过去14天的ATR(使用SMA)。

代码语言:txt
复制
WITH TrueRange AS (
    SELECT
        date,
        High - Low AS Range1,
        ABS(High - LAG(Close) OVER (ORDER BY date)) AS Range2,
        ABS(Low - LAG(Close) OVER (ORDER BY date)) AS Range3
    FROM stock_prices
),
TrueRanges AS (
    SELECT
        date,
        GREATEST(Range1, Range2, Range3) AS TrueRange
    FROM TrueRange
)
SELECT
    date,
    AVG(TrueRange) OVER (ORDER BY date ROWS BETWEEN 13 PRECEDING AND CURRENT ROW) AS ATR_14
FROM TrueRanges;

可能遇到的问题及解决方法

问题1:数据缺失或不连续

  • 原因:数据库中可能缺少某些日期的数据,导致计算不准确。
  • 解决方法:在计算前进行数据清洗,确保所有日期都有数据,或者使用插值方法填补缺失值。

问题2:计算效率低下

  • 原因:如果数据量非常大,复杂的窗口函数可能导致查询速度慢。
  • 解决方法:优化SQL查询,例如使用物化视图预先计算好中间结果,或者分批次处理数据。

通过上述步骤和示例代码,你应该能够在SQL中有效地计算平均真实范围,并应用于实际的交易策略中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • SQL语句在MYSQL中的运行过程和各个组件的介绍

    连接器: 权限校验,查看登录用户是否有权限访问数据库,如果出错就会出现(Access denied for user)然后运行程序就结束了如果连接成功连接器就会去查看这个用户的权限,即以后的权限逻辑都是依赖于次权限...,在连接过程中如果长时间没有操作则会在默认的时间内进行断开连接(wait_timeout)。...select SQL_CACHE * FROM T WHERE ID =10; 分析器:对SQL语句进行词法分析,查看是否有语法上的问题,并且将对应的表名进行对应在数据库的表,然后分析器会进行语法分析,...在开始执行的时候还是会进行查看是否会有权限(此处的权限是通过)如果没有就会出现权限错误,,如果有权限则会打开表之举引擎的定义,去使用这个引擎提供的接口 连接接口进行查询的操作操作的时候如过这个表中没有索引则执行顺序就是...(ROWS_EXAMINED字段 表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎接口获取数据行的时候累加的)

    1.9K30

    程序在计算机中是如何运行起来的(一)

    来讲讲程序在计算机中是如何运行起来的计算机系统概述计算机系统的组成硬件与软件的关系操作系统的基本功能程序的编写程序设计语言概述从高级语言到机器码的转化编译器与解释器的作用程序的存储与加载存储器的层次结构程序的存储方式可执行文件的格式程序加载器的作用程序的执行...固件:固件是嵌入在硬件中的软件,它提供了硬件的基本控制功能。固件通常存储在只读存储器(ROM)或闪存中,例如计算机的BIOS(基本输入输出系统),它在计算机启动时负责初始化硬件并加载操作系统。...在计算机系统中,程序的存储与加载是一个非常关键的环节,它不仅决定了程序如何被存储在不同层次的存储器中,还涉及到程序从存储设备被加载到内存中以供CPU执行的整个过程。...理解程序的存储与加载有助于我们更好地优化程序的性能,提高系统的运行效率。一、程序的存储方式程序在计算机中以不同的形式存储,主要包括源代码、编译后的二进制文件以及最终的可执行文件。...六、程序的调度与运行时管理在多任务操作系统中,操作系统还负责调度程序的执行,并管理其运行时环境。进程调度:操作系统根据调度算法选择哪个程序或进程可以使用CPU。

    2.4K31

    在 Windows 服务器中检查计算机正常运行时间

    这也是 Windows 用户查找计算机正常运行时间的一种快速且首选的方式。 打开任务管理器,点击性能,点击cpu,就可以看到“正常运行时间”了。 上图显示计算机开机已经3天11小时了。...使用命令行检查计算机正常运行时间 还可以使用命令行选项查看 Windows 正常运行时间。下面使用wmic和systeminfo两个命令来查看windows正常运行时间。 A....使用systeminfo命令 systeminfo 命令显示有关操作系统、计算机软件和硬件组件的详细信息列表。可以用它查询“系统启动时间”的值,以获得计算机的正常运行时间。...以下命令将所有值存储在“$uptime”变量中。...本指南涵盖了任务管理器、命令提示符和 PowerShell 的 3 种方法来获得计算机正常运行时间。

    4.2K30

    Pandas速查卡-Python数据科学

    (col1)[col2] 返回col2中的值的平均值,按col1中的值分组(平均值可以用统计部分中的几乎任何函数替换) df.pivot_table(index=col1,values=[col2,col3...],aggfunc=max) 创建一个数据透视表,按col1分组并计算col2和col3的平均值 df.groupby(col1).agg(np.mean) 查找每个唯一col1组的所有列的平均值 data.apply...(np.mean) 在每个列上应用函数 data.apply(np.max,axis=1) 在每行上应用一个函数 加入/合并 df1.append(df2) 将df1中的行添加到df2的末尾(列数应该相同...) df.concat([df1, df2],axis=1) 将df1中的列添加到df2的末尾(行数应该相同) df1.join(df2,on=col1,how='inner') SQL类型的将df1中的列与...df.describe() 数值列的汇总统计信息 df.mean() 返回所有列的平均值 df.corr() 查找数据框中的列之间的相关性 df.count() 计算每个数据框的列中的非空值的数量 df.max

    9.2K80

    不懂底层的程序员不是好程序员,解密代码在计算机中运行原理

    程序与计算机的关系 还记得Windows的CMD吗?只需向这个黑框框输入指令,计算机即可做出相对应的响应。其实计算机的运行本身就是依靠向CPU下达一条一条的指令,并使计算机按指令运行。...计算机基本架构 想要了解程序如何在计算机中运行,以及C/C++编程中设计的内存、地址、指针等概念,就必须要先了解计算机的基本架构; ?...在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。...在C++程序中向函数在实参传递时会将实参存入寄存器,需要反复重复使用的变量也最好放到寄存器中。...内存主要用于在程序运行时保存指令与数据。它接受来自 CPU 的数据请求,将数据从随机存储器 (RAM) 传输到 CPU,并从 CPU 传输到内存。

    1.4K20

    7.深入TiDB:range 范围计算优化

    优化过程解析 TiDB 在进行表扫描前会对查询条件,也就是 Selection 算子的过滤条件化简, 转为区间扫描。可以尽早的将无关的数据过滤掉,提升整个 SQL 的执行效率。...对于上面我们的 SQL: select * from test1 where b=5 or ( b>5 and (b>6 or b <8) and b<12) ; 首先会生成执行计划: 在执行完 logicalOptimize...排除了不合适的索引之后,会根据下面的规则来选择一个代价最低的索引进行读表: 索引的每行数据在存储层的平均长度。 索引生成的查询范围的行数量。 索引的回表代价。 索引查询时的范围数量。...return res, nil } AND 表达式中,只有当之前的列均为点查的情况下,才会考虑下一个列。...对于条件 a in (1, 2, 3) and b > 1,两个条件均会被选到用来计算 range。

    77620

    一文读懂Impala统计信息相关知识

    在Impala 4.0源码解析之BROADCAST/SHUFFLE代价计算这篇文章中我们提到,Impala在对BROADCAST/SHUFFLE进行代价计算的时候,需要用到表的统计信息。...目前在Impala中主要就是通过COMPUTE STATS 语句来进行统计信息计算,主要分为以下几种情况: 全表统计信息计算:COMPUTE STATS alltypes,这种会对整个表的所有分区、所有列进行统计信息计算...其实,Impala在进行统计信息计算的时候,就是提交了几条SQL来获取相应的信息,然后存储到hms中,我们以COMPUTE INCREMENTAL STATS alltypes PARTITION(year...对于上述不同的情况,SQL也会有所调整,例如对于采样计算,会使用SAMPLED_NDV,对于指定的列,只会选择这些列进行计算等等。...统计信息Web页面提示 在Impala提供的web页面,我们可以查看text plan标签页,来判断表的统计信息是否完整,如下所示: 如果SQL中的多个表,都存在统计信息缺失的情况,也都会在这个

    1.6K20

    PySpark︱DataFrame操作指南:增删改查合并统计与数据处理

    根据c3字段中的空格将字段内容进行分割,分割的内容存储在新的字段c3_中,如下所示 jdbcDF.explode( "c3" , "c3_" ){time: String => time.split(...functions.min(“B”), functions.max(“B”)).show() 整合后GroupedData类型可用的方法(均返回DataFrame类型): avg(*cols) —— 计算每组中一列或多列的平均值...count() —— 计算每组中一共有多少行,返回DataFrame有2列,一列为分组的组名,另一列为行总数 max(*cols) —— 计算每组中一列或多列的最大值...mean(*cols) —— 计算每组中一列或多列的平均值 min(*cols) —— 计算每组中一列或多列的最小值 sum(*cols) —— 计算每组中一列或多列的总和 —...sqlContext.createDataFrame(pandas_df) 转化为pandas,但是该数据要读入内存,如果数据量大的话,很难跑得动 两者的异同: Pyspark DataFrame是在分布式节点上运行一些数据操作

    30.5K10

    第09章_性能分析工具的使用

    我们可以通过观察了解数据库整体的运行状态,通过性能分析工具可以让我们了解执行慢的 SQL 都有哪些,查看具体的 SQL 执行计划,甚至是 SQL 执行中的每一步的成本代价,这样才能定位问题所在,找到了问题...统计 SQL 的查询成本: last_query_cost 一条 SQL 查询语句在执行前需要查询执行计划,如果存在多种执行计划的话,MySQL 会计算每个执行计划所需要的成本,从中选择 成本最小 的一个作为最终执行的执行计划...如果我们想要查看某条 SQL 语句的查询成本,可以在执行完这条 SQL 语句之后,通过查看当前会话中的 last_query_cost 变量值来得到当前查询的成本。...默认情况下处于关闭状态 ,并保存最近 15 次的运行结果。 我们可以在会话级别开启这个功能。...当不具有权限时,该列信息为1且TRACE字段为空,一般在 调用带有SQL SECURITY DEFINER的视图或者是存储过程的情况下,会出现此问题。

    95950
    领券