问题描述
这是关于如何从 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