微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法让 TA-Lib 或 BTA-lib 与 Binance 的 Dataframe 一起使用您如何将 Dataframe 转换为与 TA-Lib 一起使用?

如何解决无法让 TA-Lib 或 BTA-lib 与 Binance 的 Dataframe 一起使用您如何将 Dataframe 转换为与 TA-Lib 一起使用?

在此先感谢您的帮助。几个月来,我一直在尝试匹配币安的 EMA/MACD。我尝试了几种方法,但数据从来没有与移动应用程序上显示的交换内容一致。我读到他们使用 TEMA 而不是 EMA 并且 TA-Lib 的 MACD 的实现与交易所匹配。但是,我一直无法弄清楚如何让它在不出错的情况下读取数据帧。我只用 Python 编程几个月,但这一直困扰着我。如果有人可以请告诉我如何解决这个问题。技术版本适用于数据框,但与交换不匹配。我尝试了很多东西,错误范围从没有索引到无法转换。

问候,杰夫

import talib
import btalib
import numpy
import pandas as pd
import requests
import time
import json
import technic as ta
from datetime import datetime
from os import system,name

api_key = ''
api_secret = ''
from binance.client import Client
client = Client(api_key,api_secret)
sym = "TKOUSDT"
while 1 == 1:

    data = client.get_historical_klines(sym,Client.KLINE_INTERVAL_5MINUTE,"135 mins ago UTC")
    data2 = pd.DataFrame(data,columns = ['timestamp','open','high','low','close','volume','close_time','quote_av','Trades','tb_base_av','tb_quote_av','ignore' ])
    clse = data2['close']
#    print(clse)
    clse2 = clse.to_numpy()
#    print(clse2)
    clse3 = pd.to_numeric(clse2,downcast='float')
#    print(clse3)

    # This one works... Sorta... The values do not match the Binance exchange!  Was told Binance uses TEMA and that the TA-Lib MACD matches the exchange.
    macd1 = ta.tmacd(data2['close'],w_slow=26,w_fast=12,w_signal=9)
    print(macd1)

    # Will not read the Dataframe
    macd,signal,hist = talib.MACD(data2['close'],fastperiod=12,slowperiod=26,signalperiod=9)
#    print(macd,hist)

    # Will not read the Dataframe
    macd2 = btalib.macd(data2['close'],pfast=20,pslow=50,psignal=13)
#    print(macd2)
    
    time.sleep(10)

解决方法

将尝试并简化回答 1)“如何让它读取数据帧而不给出错误”,以及 2) 为什么您可能会看到不同的计算。

对于#1,由于某种原因,btalib 没有接受 RangeIndex(尽管在 documentation 中它声明它应该接受)。处理此类数据时,无论如何设置 DatetimeIndex 或 TimedeltaIndex 通常很有用,因此添加并验证 OHLCV 数据类型可以纠正错误。

作为旁注,btalib 将接受整个数据框,只要它包含 Open/open 等列。

    import pandas as pd
    import talib
    import btalib
    import technic

    from binance.client import Client  # pip install python-binance
    api_key = ''
    api_secret = ''


    client = Client(api_key,api_secret)
    sym = "TKOUSDT"

    client_columns = ['timestamp','open','high','low','close','volume','close_time','quote_av','trades','tb_base_av','tb_quote_av','ignore']
    data = client.get_historical_klines(sym,Client.KLINE_INTERVAL_1MINUTE,"135 mins ago UTC")
    data2 = pd.DataFrame(data,columns=client_columns)
    
    # set time index
    data2['timestamp'] = pd.to_timedelta(data2['timestamp'])
    data2.set_index('timestamp',inplace=True)

    # validate data types for ohlcv columns
    ohlcv_columns = ['open','volume']
    data2[ohlcv_columns] = data2[ohlcv_columns].astype('float')

    # calculate
    technic_macd = technic.tmacd(data2['close'],w_slow=26,w_fast=12,w_signal=9)
    talib_macd = pd.concat(talib.MACD(data2['close'],fastperiod=12,slowperiod=26,signalperiod=9),axis=1)
    btalib_macd = btalib.macd(data2,pfast=12,pslow=26,psignal=9).df

对于 #2,不同的计算基于方法论,其中 btalib 尝试纠正 TA-Lib 的问题(参见 here,其中 MACD 是示例之一)。与 Binance 的差异将取决于 Binance 使用的方法/库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?