如何从 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,50386.27]
[50040.02,50509.12]
[50040.02,50483.19]
[50040.02,50483.19,50467.02]

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

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

有什么建议吗?

附注 编辑了我的问题以回答评论

12-4-21 秒编辑:

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

[nan]
[nan,nan]
[nan,nan,50058.15]
[nan,50058.15,50115.52]
[nan,50115.52,50134.18]
[nan,50134.18,50205.48]
[nan,50205.48,50262.16]
[50058.15,50262.16,50257.04]
[50115.52,50257.04,50262.79]
[50134.18,50262.79,50258.97]
[50205.48,50258.97,50317.7]
[50262.16,50317.7,50361.69]
[50257.04,50361.69,50371.85]
[50262.79,50371.85,50463.78]
[50258.97,50463.78,50585.92]
[50317.7,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,5.0]
y = :
[41676.59,41223.05,40937.1,40708.92,40627.29,40770.61]
polyn. fit = :
[ -187.01028571 41458.11904762]
x = :
[0.0,5.0]
y = :
[41223.05,40770.61,40747.72]
polyn. fit = :
[  -84.50714286 41047.04952381]
x = :
[0.0,5.0]
y = :
[40937.1,40747.72,40770.06]
polyn. fit = :
[-1.64422857e+01  4.08013890e+04]
x = :
[0.0,5.0]
y = :
[40708.92,40770.06,41008.3]
polyn. fit = :
[   54.352 40636.27 ]
x = :
[0.0,5.0]
y = :
[40627.29,41008.3,41136.19]
polyn. fit = :
[   93.71171429 40609.08238095]
x = :
[0.0,5.0]
y = :
[40770.61,41136.19,41329.56]
polyn. fit = :
[  119.95428571 40660.52095238]
x = :
[0.0,5.0]
y = :
[40747.72,41329.56,41339.63]
polyn. fit = :
[  136.16971429 40714.81904762]
x = :
[0.0,5.0]
y = :
[40770.06,41339.63,41358.35]
polyn. fit = :
[  117.966 40862.1  ]
x = :
[0.0,5.0]
y = :
[41008.3,41358.35,41526.3]
polyn. fit = :
[   93.33 41049.73] #>> this is the correct value!

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

解决方法

抱歉回复延迟。我认为由于 moving_average 并不总是返回长度为 6 的 numpy 数组,因此在继续之前,您需要有一个 if 语句来检查 y 的长度何时等于 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 循环之外,这样它只会对最后一个 {{1} 执行一次多项式拟合} 列表

y