You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的Pyti、Pandas、GDAX计算比特币MFI的技术问询

完善比特币资金流量指标(MFI)计算的代码方案

我来帮你补全并优化这段计算比特币MFI的代码,顺便梳理下关键的处理细节:

先说说原代码的几个待完善点

  • 代码写到df = df.he就截断了,应该是要处理数据结构或预览数据
  • GDAX(现Coinbase Pro)返回的历史数据是倒序排列(最新数据在前),不处理的话会导致时间序列逻辑混乱
  • 计算MFI需要先做好数据预处理,pyti的money_flow_index函数需要特定格式的输入

完整可运行代码示例

import gdax
import pandas as pd
from pyti.money_flow_index import money_flow_index as mfi
from datetime import datetime
import time

# 设置请求间隔(和K线粒度保持一致,避免触发API限流)
REQUEST_INTERVAL = 60

while True:
    try:
        # 初始化Coinbase Pro公共客户端
        public_client = gdax.PublicClient()
        # 获取BTC-USD的1分钟K线数据(默认返回最近200条)
        historic = public_client.get_product_historic_rates('BTC-USD', granularity=60)
        
        # 处理空数据情况
        if not historic:
            print("未获取到数据,等待重试...")
            time.sleep(REQUEST_INTERVAL)
            continue
            
        # 转换为DataFrame并设置列名
        df = pd.DataFrame(historic)
        df.columns = ['Time', 'Low', 'High', 'Open', 'Close', 'Volume']
        
        # 1. 反转数据:把倒序的K线转为时间正序(旧数据在前,新数据在后)
        df = df.iloc[::-1].reset_index(drop=True)
        
        # 2. 把时间戳转换为可读的datetime格式
        df['Time'] = pd.to_datetime(df['Time'], unit='s')
        
        # 3. 计算典型价格(MFI的核心输入,公式:(最高价+最低价+收盘价)/3)
        df['Typical_Price'] = (df['High'] + df['Low'] + df['Close']) / 3
        
        # 4. 计算资金流量:典型价格 × 成交量
        df['Money_Flow'] = df['Typical_Price'] * df['Volume']
        
        # 5. 调用pyti计算MFI,默认周期为14(可根据需求调整,比如改成7或21)
        df['MFI'] = mfi(df[['High', 'Low', 'Close', 'Volume']], period=14)
        
        # 按你设置的行数显示数据
        pd.set_option('display.max_rows', 28)
        print("最新BTC-USD 1分钟K线及MFI数据:")
        print(df[['Time', 'High', 'Low', 'Close', 'Volume', 'MFI']])
        
    except Exception as e:
        print(f"请求或计算出错:{str(e)}")
        
    # 等待下一次请求
    time.sleep(REQUEST_INTERVAL)

关键细节解释

  • 数据反转:Coinbase Pro的历史数据接口默认返回最新K线在前,反转后才能保证MFI计算基于连续的时间序列,顺序错误会导致结果完全失真
  • MFI周期:默认用14周期(行业通用标准),你可以通过修改period参数调整周期长度
  • 异常处理:加入try-except块捕获API请求失败、数据格式异常等问题,避免程序直接崩溃
  • 限流规避:设置和K线粒度一致的请求间隔,避免触发Coinbase Pro的API速率限制

常见问题排查

  • 如果MFI列出现NaN:这是正常现象,因为MFI需要至少period条数据才能计算,前14行的MFI会显示为NaN
  • 遇到API限流错误(429):延长REQUEST_INTERVAL的数值,或者查看Coinbase Pro官方的API速率规则
  • pyti模块报错:确保安装了最新版本,可执行pip install --upgrade pyti更新

内容的提问来源于stack exchange,提问作者This play nay mm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:25:27