python Pyti模块资金流指数(MFI)技术分析

2024-05-19 11:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我用pandas,gdax和pyti来计算比特币的货币流量指数(MFI)。在

代码如下:

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

while True:
    public_client = gdax.PublicClient()
    historic = public_client.get_product_historic_rates('BTC-USD', granularity=60)
    pd.set_option('display.max_rows', 28)
    df = pd.DataFrame(historic)
    df.columns = ['Time', 'Low', 'High', 'Open', 'Close', 'Volume']
    df = df.head(n=28)

    for i in range(len(df['Time'])):
        df['Time'][i] = datetime.fromtimestamp(df['Time'][i]).strftime('%Y-%m-%d %H:%M:%S')
    print(df, '\n')
    close_data = df['Close']
    high_data = df['High']
    low_data = df['Low']
    volume_data = df['Volume']
    period = 14

    mfiDf = pd.DataFrame(mfi(close_data, high_data, low_data, volume_data, period))
    print(mfiDf)
    time.sleep(60)

数据帧有28行,因为我要计算14个周期。 但是,当我运行这个程序时,我得到的是。在

^{pr2}$

不太清楚怎么读这个。我的猜测是——它根据0-13之间的14分钟周期进行MFI计算,以提供14-27的值。在

我需要这样做,因为我的原始数据帧是按时间递减排序的。在

下面是计算如何在资金流中工作_索引.py以下内容:

def money_flow_index(close_data, high_data, low_data, volume, period):
    """
    Money Flow Index.
    Formula:
    MFI = 100 - (100 / (1 + PMF / NMF))
    """
    catch_errors.check_for_input_len_diff(
        close_data, high_data, low_data, volume
        )
    catch_errors.check_for_period_error(close_data, period)

    mf = money_flow(close_data, high_data, low_data, volume)
    tp = typical_price(close_data, high_data, low_data)

    flow = [tp[idx] > tp[idx-1] for idx in range(1, len(tp))]
    pf = [mf[idx] if flow[idx] else 0 for idx in range(0, len(flow))]
    nf = [mf[idx] if not flow[idx] else 0 for idx in range(0, len(flow))]

    pmf = [sum(pf[idx+1-period:idx+1]) for idx in range(period-1, len(pf))]
    nmf = [sum(nf[idx+1-period:idx+1]) for idx in range(period-1, len(nf))]

    # Dividing by 0 is not an issue, it turns the value into NaN which we would
    # want in that case
    with warnings.catch_warnings():
        warnings.simplefilter("ignore", category=RuntimeWarning)
        money_ratio = np.array(pmf) / np.array(nmf)

    mfi = 100 - (100 / (1 + money_ratio))

    mfi = fill_for_noncomputable_vals(close_data, mfi)

return mfi

Tags: inimportdfforclosedatalenrange
1条回答
网友
1楼 · 发布于 2024-05-19 11:30:20

看来颠倒测向顺序才是解决办法。我从tradingview和cryptowatch得到的值的差别似乎来自于它们处理实时数据——很可能是web套接字。我处理的是历史数据,但有点滞后。谢谢彼得·莱姆比格勒!

相关问题 更多 >

    热门问题