Heiken Ashi 使用 pandas python

2024-03-05

enter image description here I was defining a function Heiken Ashi which is one of the popular chart type in Technical Analysis. I was writing a function on it using Pandas but finding little difficulty. This is how Heiken Ashi [HA] looks like-

                 Heikin-Ashi Candle Calculations
           HA_Close = (Open + High + Low + Close) / 4
           HA_Open = (previous HA_Open + previous HA_Close) / 2
           HA_Low = minimum of Low, HA_Open, and HA_Close
           HA_High = maximum of High, HA_Open, and HA_Close

               Heikin-Ashi Calculations on First Run
            HA_Close = (Open + High + Low + Close) / 4
                   HA_Open = (Open + Close) / 2
                           HA_Low = Low
                           HA_High = High

各种网站上有很多使用 for 循环和纯 python 的东西,但我认为 Pandas 也可以做得很好。 这就是我的进步——

   def HA(df):

       df['HA_Close']=(df['Open']+ df['High']+ df['Low']+ df['Close'])/4

       ha_o=df['Open']+df['Close']  #Creating a Variable
       #(for 1st row)

       HA_O=df['HA_Open'].shift(1)+df['HA_Close'].shift(1) #Another variable
       #(for subsequent rows)

       df['HA_Open']=[ha_o/2 if df['HA_Open']='nan' else HA_O/2]     
       #(error Part Where am i going wrong?)

       df['HA_High']=df[['HA_Open','HA_Close','High']].max(axis=1)

       df['HA_Low']=df[['HA_Open','HA_Close','Low']].min(axis=1)

       return df

有人可以帮我吗? 这不起作用...... 我尝试过这个-

  import pandas_datareader.data as web 
  import HA
  import pandas as pd
  start='2016-1-1'
  end='2016-10-30'
  DAX=web.DataReader('^GDAXI','yahoo',start,end)

这是我写的新代码

    def HA(df):
            df['HA_Close']=(df['Open']+ df['High']+ df['Low']+df['Close'])/4
...:        ha_o=df['Open']+df['Close']
...:        df['HA_Open']=0.0
...:        HA_O=df['HA_Open'].shift(1)+df['HA_Close'].shift(1)
...:        df['HA_Open']= np.where( df['HA_Open']==np.nan, ha_o/2, HA_O/2 )
...:        df['HA_High']=df[['HA_Open','HA_Close','High']].max(axis=1)
...:        df['HA_Low']=df[['HA_Open','HA_Close','Low']].min(axis=1)
...:        return df

但HA_Open结果仍然不理想


根据我的测试,这是最快、准确和高效的实现:

def HA(df):
    df['HA_Close']=(df['Open']+ df['High']+ df['Low']+df['Close'])/4

    idx = df.index.name
    df.reset_index(inplace=True)

    for i in range(0, len(df)):
        if i == 0:
            df.set_value(i, 'HA_Open', ((df.get_value(i, 'Open') + df.get_value(i, 'Close')) / 2))
        else:
            df.set_value(i, 'HA_Open', ((df.get_value(i - 1, 'HA_Open') + df.get_value(i - 1, 'HA_Close')) / 2))

    if idx:
        df.set_index(idx, inplace=True)

    df['HA_High']=df[['HA_Open','HA_Close','High']].max(axis=1)
    df['HA_Low']=df[['HA_Open','HA_Close','Low']].min(axis=1)
    return df

这是我的测试算法(基本上我使用了本文中提供的算法来对速度结果进行基准测试):

import quandl
import time

df = quandl.get("NSE/NIFTY_50", start_date='1997-01-01')

def test_HA():
    print('HA Test')
    start = time.time()
    HA(df)
    end = time.time()
    print('Time taken by set and get value functions for HA {}'.format(end-start))

    start = time.time()
    df['HA_Close_t']=(df['Open']+ df['High']+ df['Low']+df['Close'])/4

    from collections import namedtuple
    nt = namedtuple('nt', ['Open','Close'])
    previous_row = nt(df.ix[0,'Open'],df.ix[0,'Close'])
    i = 0
    for row in df.itertuples():
        ha_open = (previous_row.Open + previous_row.Close) / 2
        df.ix[i,'HA_Open_t'] = ha_open
        previous_row = nt(ha_open, row.Close)
        i += 1

    df['HA_High_t']=df[['HA_Open_t','HA_Close_t','High']].max(axis=1)
    df['HA_Low_t']=df[['HA_Open_t','HA_Close_t','Low']].min(axis=1)
    end = time.time()
    print('Time taken by ix (iloc, loc) functions for HA {}'.format(end-start))

这是我在 i7 处理器上得到的输出(请注意,结果可能会根据您的处理器速度而有所不同,但我假设结果会类似):

HA Test
Time taken by set and get value functions for HA 0.05005788803100586
Time taken by ix (iloc, loc) functions for HA 0.9360761642456055

我对 Pandas 的经验表明,其功能类似于ix, loc, iloc相比之下较慢set_value and get_value功能。此外,使用以下方法计算列本身的值shift函数给出错误的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Heiken Ashi 使用 pandas python 的相关文章

  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce

随机推荐

  • 我的 Windows 窗体应用程序大小在不同笔记本上发生变化

    我的项目编码进展顺利 但今天我注意到一个问题 我的主笔记本电脑具有全高清 1920x1080 分辨率 我正在此处编写我的项目 当我将主笔记本电脑的分辨率更改为 1280x1024 1280x800 或 1024x768 时 没有问题 我的应
  • git - 服务器主机密钥未缓存

    我尝试将更改从本地存储库推送到远程存储库 当我输入 git push origin 我收到以下错误 The server s host key is not cached in the registry You have no guaran
  • Django - 没有名为 app 的模块

    我一直在尝试让 django 编写的应用程序正常工作 但它根本不工作 我也已经工作了一段时间 它在开发服务器上完美运行 但我无法放入生产环境 apahce 我的项目名称是 apstat 应用程序名称是 basic 我尝试按以下方式访问它 块
  • Python 多处理:同步类文件对象

    我正在尝试创建一个类似对象的文件 该对象在测试期间分配给 sys stdout sys stderr 以提供确定性输出 它并不意味着快速 只是可靠 到目前为止我所拥有的almost有效 但我需要一些帮助来消除最后几个边缘情况错误 这是我当前
  • HQL 意外的 AST 节点::

    我的代码无法注入以下存储库 根据堆栈跟踪 我的 HQL 语法似乎无效 但我不确定我做错了什么 Repository public interface JobSetRepository extends JpaRepository
  • 命令“npm install fs”出现问题

    我不习惯使用 Linux 所以也许这是一个愚蠢的问题 在我正在进行的实验室中 系统要求我运行命令 npm install fs 来读取 写入文件 但这是我遇到的错误 我不知道如何解决它 我也找不到类似的问题 PS 我正在 Ubuntu 17
  • 帮助在 Node.js 中需要 npm 模块

    我觉得我在这里缺少一些非常基本的东西 所以我安装了一个 npm 库npm install somelib 根据我读过的内容 我应该能够简单地做一个 var somelib require somelib 但它找不到任何东西 我确实有一个no
  • Chrome 中的 ScriptManager.RegisterHiddenField

    我正在处理一些利用 ScriptManager RegisterHiddenField 来跟踪数据模型修改的代码 它在 IE 和 FF 中运行良好 但在 Chrome 中遇到问题 如果您添加以下内容 就会出现该问题的一个简单示例 prote
  • 如何获取 ClickOnce 应用程序的文件夹路径

    我需要在控制台 ClickOnce 所在的同一文件夹中写入一个文件 application 可执行文件 驻留 它从中启动的文件夹 我尝试使用Application StartupPath Path GetDirectoryName Asse
  • 在C中缩小文件

    如何用 C 语言缩小文件 例如 如果我打开一个 2mb 的文件 做了一些工作并决定只有 1mb 的文件仍然存在 这是如何完成的 我知道如何使用 write fd 写入文件 但是如果我想在文件中间切出某些部分或截断它怎么办 您可能正在寻找tr
  • 组合多个控件的控件子类

    我正在尝试扩展 TextBox 以在其左侧添加一个标签并将其视为一个控件 这样我就不必跟踪它们的大小 位置等 我创建了一个扩展 Control 并具有 TextBox 和 Label 字段的 TextBoxWithLabel 类 但我不太确
  • BASH_REMATCH 不捕获

    我正在尝试捕获 bash 中路径的一部分 Input Users foo virtualenvs venv test server Code bin zsh regex venv if VIRTUAL ENV regex then echo
  • 将图像插入 MySQL 数据库或从 MySQL 数据库查看图像

    我在数据库中插入图像时遇到问题 该表具有以下结构 id gt INT 3 gt 自动增量 名称 gt VARCHAR 30 扩展名 gt VARCHAR 10 可能太短 img gt 中型BLOB 插入图像的PHP代码是 if FILES
  • 通过滚动移动 DIV

    我正在创建一个 jQuery 滚动条 它滚动 中的内容 这就像jQuery 滚动窗格 http jscrollpane kelvinluck com 我已经到了需要移动滚动按钮的地步 我的问题是 在没有任何 UI 插件的情况下 最好的方法是
  • 如果我加载一个包含 (ns my-namespace) 的文件,为什么它不切换我当前的命名空间?

    我有一个这样的文件 ns boston core If I load boston core 然而 从 REPL 来看 我的 ns 没有改变为boston但仍然存在user 为什么是这样 这是因为 load 只是加载指定的文件 到 bost
  • 从 glm 中提取 p 值

    我正在运行许多回归 并且只对一个特定变量的系数和 p 值的影响感兴趣 因此 在我的脚本中 我希望能够从 glm 摘要中提取 p 值 获取系数本身很容易 我知道查看 p 值的唯一方法是使用 summary myReg 还有其他办法吗 e g
  • 如何检测会话何时结束

    有没有办法检测有人离开您的网站 到目前为止我知道如何使用ignore user abort 但据我所知 这就是了 我需要知道这一点的原因是因为我需要一个脚本来在有人离开网站时执行 在数据库中为每个用户记录一个时间戳 并在每次页面加载时 或通
  • 如何暂时禁用“返回值可能未定义”警告?

    我想在代码中禁用特定警告 W1035 因为我认为编译器对此警告是错误的 function TfrmNagScreen Run TOption begin if ShowModal mrOk then Result TOption rdgAc
  • Bootstrap 3 导航栏链接不起作用

    我有一个带有链接的导航栏 品牌 链接有效 但没有任何内容ul做 我读过关于e preventDefault 当它与 ul nav gt li click function e 我也读过它与z index 我没有发现任何这样的情况 除非我找不
  • Heiken Ashi 使用 pandas python

    I was defining a function Heiken Ashi which is one of the popular chart type in Technical Analysis I was writing a funct