使用 pandas 管理包装器中的 args 和 kwargs 以进行 StochRSI 计算

问题描述

我已经设法编写了一个函数,该函数扫描 Binance 上的加密市场,并在 15 分钟的时间内为我提供那些具有 StochRSI 交叉的市场作为输出。 但是我遇到了一个问题,因为在正确打印了很多市场后,程序停止给我这个错误

Traceback (most recent call last):
File "/Users/Marti/Downloads/CryptoBots/RSImachine/selection.py",line 506,in <module>
main()
File "/Users/Marti/Downloads/CryptoBots/RSImachine/selection.py",line 488,in main
selectedMarkets = selectMarkets(client,selectedCoins,numpy,talib,settings)
File "/Users/Marti/Downloads/CryptoBots/RSImachine/selection.py",line 194,in selectMarkets
K = numpy.around(talib.MA(numpy.array(stochRSI[0]),3),decimals=4,out=None)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/sitepackages/talib/__init__.py",line 27,in wrapper
return func(*args,**kwargs)
File "talib/_func.pxi",line 3413,in talib._ta_lib.MA
File "talib/_func.pxi",line 68,in talib._ta_lib.check_begidx1
Exception: inputs are all NaN

这是计算StochRSI(正确)的函数,一段时间后给出错误

def selectMarkets(client,coins,settings):
    
    selectedMarkets = []

    # Get Last Price for all markets

    allTickers = client.get_all_tickers()
    coinPriceTuples = []

    # Obtain pairname 

    for c in coins:
        sym = '%sBTC' % c
        for t in allTickers:
            if t['symbol'] == sym:
                coinPriceTuples.append((sym,float(t['price'])))            

    ## load settings
    
    ccp = settings['marketSelection']['consecutiveCandlesPeriod']
    for t in coinPriceTuples:
    
        klines = client.get_historical_klines(t[0],'15m',"%s days ago" % ccp)

        # StochRSI CALculaTION #

        allClose = [float(k[4]) for k in klines]
        closePrice = numpy.array(allClose)
        rsi = talib.RSI(closePrice,timeperiod=14)
        rsi = pd.DataFrame(rsi)
        LLV = rsi.rolling(14).min()
        HHV = rsi.rolling(14).max()
        stochRSI = (rsi - LLV) / (HHV - LLV) * 100
        K = numpy.around(talib.MA(numpy.array(stochRSI[0]),out=None)
        D = numpy.around(talib.MA(numpy.array(K),out=None)
            
        if K[-2] <= D[-2] and K[-1] > D[-1]:
            cross = True
            print(t[0])
        else:
            cross = False

        conditions = [cross]

        if all(conditions):
            selectedMarkets.append((t[0],K[-1],D[-1]))
            

    return selectedMarkets
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)