首页 > 解决方案 > 如何从 TA-lib 结果中列出一个列表?

问题描述

这是关于如何从 TA-lib 移动平均线的最后六个结果中制作一个有用的列表。

这是我的平均代码:

closes_TREND = []
MOVING_AVERAGES = []

klines_TREND = client.get_historical_klines(TRADE_SYMBOL, Client.KLINE_INTERVAL_1HOUR, "20 hours ago UTC")

for data in klines_TREND:
        closes = data[4]
        closes_TREND.append(float(closes))
       
        np_closes_TREND = np.array(closes_TREND)
        moving_average = talib.MA(np_closes_TREND, SMA_PERIOD)

给出这个结果:

[nan]
[nan nan]
[nan nan nan]
[nan nan nan nan]
[nan nan nan nan nan]
[nan nan nan nan nan nan]
[           nan            nan            nan            nan 
            nan            nan 49083.85571429]
[           nan            nan            nan            nan 
            nan            nan 49083.85571429 49056.04857143]
[           nan            nan            nan            nan 
            nan            nan 49083.85571429 49056.04857143 
 49062.34142857]
[           nan            nan            nan            nan 
            nan            nan 49083.85571429 49056.04857143 
 49062.34142857 49103.36142857]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8       ]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8        50040.02142857]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8        50040.02142857 50210.48285714]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8        50040.02142857 50210.48285714
 50386.27285714]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8        50040.02142857 50210.48285714
 50386.27285714 50509.12285714]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8        50040.02142857 50210.48285714
 50386.27285714 50509.12285714 50483.18714286]
[           nan            nan            nan            nan
            nan            nan 49083.85571429 49056.04857143
 49062.34142857 49103.36142857 49182.70857143 49406.18142857
 49649.40285714 49842.8        50040.02142857 50210.48285714
 50386.27285714 50509.12285714 50483.18714286 50467.02571429]

我需要的是列表中的最后六个值,如下所示:

[50040.02, 50210.48, 50386.27, 50509.12, 50483.18, 50467.02]

我已经尝试了很多,这是最接近的:

test = [round(num, 2) for num in moving_average]
       y  = test[14:]

它给了我这个:

[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[50040.02]
[50040.02, 50210.48]
[50040.02, 50210.48, 50386.27]
[50040.02, 50210.48, 50386.27, 50509.12]
[50040.02, 50210.48, 50386.27, 50509.12, 50483.19]
[50040.02, 50210.48, 50386.27, 50509.12, 50483.19, 50467.02]

我需要多项式拟合的列表,现在我遇到了在 x 和 y 中具有相同长度的问题,这可能是因为列表 y 的构建方式。

在 de 多项式拟合中,x = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] 尝试得到 y = [50040.02, 50210.48, 50386.27, 50509.12, 50483.19, 50467.02]

有什么建议么?

PS编辑了我的问题以回答评论。

12-4-21 第二次编辑:

y = test[-6:], 给了我这个:它即将接近,但仍然不适合多项式拟合。

[nan]
[nan, nan]
[nan, nan, nan]
[nan, nan, nan, nan]
[nan, nan, nan, nan, nan]
[nan, nan, nan, nan, nan, nan]
[nan, nan, nan, nan, nan, 50058.15]
[nan, nan, nan, nan, 50058.15, 50115.52]
[nan, nan, nan, 50058.15, 50115.52, 50134.18]
[nan, nan, 50058.15, 50115.52, 50134.18, 50205.48]
[nan, 50058.15, 50115.52, 50134.18, 50205.48, 50262.16]
[50058.15, 50115.52, 50134.18, 50205.48, 50262.16, 50257.04]
[50115.52, 50134.18, 50205.48, 50262.16, 50257.04, 50262.79]
[50134.18, 50205.48, 50262.16, 50257.04, 50262.79, 50258.97]
[50205.48, 50262.16, 50257.04, 50262.79, 50258.97, 50317.7]
[50262.16, 50257.04, 50262.79, 50258.97, 50317.7, 50361.69]
[50257.04, 50262.79, 50258.97, 50317.7, 50361.69, 50371.85]
[50262.79, 50258.97, 50317.7, 50361.69, 50371.85, 50463.78]
[50258.97, 50317.7, 50361.69, 50371.85, 50463.78, 50585.92]
[50317.7, 50361.69, 50371.85, 50463.78, 50585.92, 50704.61]

print(type(y[0]))

给了我这个:

<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>
<class 'numpy.float64'>

编辑 23-4

这就是它为 x、y 和 polyn 打印的内容。适合,我只需要最后一个

x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[41676.59, 41223.05, 40937.1, 40708.92, 40627.29, 40770.61]
polyn. fit = :
[ -187.01028571 41458.11904762]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[41223.05, 40937.1, 40708.92, 40627.29, 40770.61, 40747.72]
polyn. fit = :
[  -84.50714286 41047.04952381]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[40937.1, 40708.92, 40627.29, 40770.61, 40747.72, 40770.06]
polyn. fit = :
[-1.64422857e+01  4.08013890e+04]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[40708.92, 40627.29, 40770.61, 40747.72, 40770.06, 41008.3]
polyn. fit = :
[   54.352 40636.27 ]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[40627.29, 40770.61, 40747.72, 40770.06, 41008.3, 41136.19]
polyn. fit = :
[   93.71171429 40609.08238095]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[40770.61, 40747.72, 40770.06, 41008.3, 41136.19, 41329.56]
polyn. fit = :
[  119.95428571 40660.52095238]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[40747.72, 40770.06, 41008.3, 41136.19, 41329.56, 41339.63]
polyn. fit = :
[  136.16971429 40714.81904762]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[40770.06, 41008.3, 41136.19, 41329.56, 41339.63, 41358.35]
polyn. fit = :
[  117.966 40862.1  ]
x = :
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
y = :
[41008.3, 41136.19, 41329.56, 41339.63, 41358.35, 41526.3]
polyn. fit = :
[   93.33 41049.73] #>> this is the correct value!

每次它执行时,我都会一遍又一遍地得到这些值......

标签: pythonpolynomialsta-lib

解决方案


回复较晚,抱歉。我认为由于moving_average并不总是返回长度为 6 的 numpy 数组,因此y在继续之前,您需要有一个 if 语句来检查长度何时等于 6。您还应该考虑添加行moving_average = moving_average[~np.isnan(moving_average)]以删除其中的nan值,moving_average以便y其列表中没有任何 nan 值。

closes_TREND = []
MOVING_AVERAGES = []

klines_TREND = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_1HOUR, "20 hours ago UTC")

for data in klines_TREND:
    closes = data[4]
    closes_TREND.append(float(closes))

    np_closes_TREND = np.array(closes_TREND)
    SMA_PERIOD = 3
    moving_average = talib.MA(np_closes_TREND, SMA_PERIOD)
    # Filter out nan values in bumpy array
    moving_average = moving_average[~np.isnan(moving_average)]
    test = [round(num, 2) for num in moving_average]
    y = test[-6:]
    if len(y) == 6:
        print(y)
        # Perform de polynomial fit here

编辑:如果您只需要获取最后一个列表,您可以将if语句移到for循环之外,以便它只对最后一个y列表执行多项式拟合

closes_TREND = []
MOVING_AVERAGES = []

klines_TREND = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_1HOUR, "20 hours ago UTC")

for data in klines_TREND:
    closes = data[4]
    closes_TREND.append(float(closes))

    np_closes_TREND = np.array(closes_TREND)
    SMA_PERIOD = 3
    moving_average = talib.MA(np_closes_TREND, SMA_PERIOD)
    # Filter out nan values in bumpy array
    moving_average = moving_average[~np.isnan(moving_average)]
    test = [round(num, 2) for num in moving_average]
    y = test[-6:]

if len(y) == 6:
    print(y)
    # Perform de polynomial fit here

推荐阅读