如何使用 Ta-Lib 获取 STOCHRSI 的最后值?
How can I get last value of STOCHRSI with Ta-Lib?
我实现了它,但它打印了所有内容。
print(ta.STOCHRSI(df["close"], 14, 5, 3, 0)[-1])
2022-04-20 17:00:00 NaN
2022-04-20 18:00:00 NaN
2022-04-20 19:00:00 NaN
2022-04-20 20:00:00 NaN
2022-04-20 21:00:00 NaN
...
2022-04-28 20:00:00 79.700101
2022-04-28 21:00:00 0.000000
2022-04-28 22:00:00 0.000000
2022-04-28 23:00:00 44.877738
2022-04-29 00:00:00 65.792554
Length: 200, dtype: float64
我只想获取 STOCHRSI 的最新值,只有一个浮点值。我怎样才能得到它?
或者如果我想获取最近 3 个值的平均值,我该如何实现?
如果你真的是指图书馆 TA-Lib.enter link description here
据我所知,那里的语法和你的不一样。
Streaming API:“添加了实验性 Streaming API,允许用户计算指标的最新值。这比使用函数 API 更快,因为接收流数据并只想知道最新更新的指标值的应用程序中的示例
Streaming API
这适用于 'SMA',但如果我在 'assert' 中的差异小于 5,则 'STOCHRSI' 会失败。
要计算指标,您需要报价历史记录。您可能看到第一个值是空的,因为指标周期不需要数据。
您可以尝试以下方法:确定正确计算指标需要多少数据。然后只提供这个数组长度。
如果资源允许,那么您可以计算所有值并保存它们的变量,只取最后一个变量 fastk[-1]。
import talib
from talib import stream
sma = talib.SMA(df["close"], timeperiod=14)
latest = stream.SMA(df["close"], timeperiod=14)
assert (sma[-1] - latest) < 0.00001
print(sma[-1], latest)#1.6180066666666686 1.6180066666666668
fastk, fastd = talib.STOCHRSI(df["close"], timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
f, fd = stream.STOCHRSI(df["close"], timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
print(fastk[-1], f)
assert (fastk[-1] - f) < 5#64.32089013974793 59.52628987038199
print(fastk[-1], f)
使用自下而上穿过主信号线的条件
if fastd[100] < fastk[100] and fastd[101] > fastk[101]:
pass#pass replace your code
我还在主图下面画了一个指标,看看它长什么样子。
import matplotlib.pyplot as plt
import pandas as pd
import talib
date = df.iloc[:, 0].index.date
x = len(df)
fig, ax = plt.subplots(2)
ax[0].plot(date[x-100:], df.iloc[x-100:, 3])
ax[1].plot(date[x-100:], fastk[x-100:])
ax[1].plot(date[x-100:], fastd[x-100:])
fig.autofmt_xdate()
plt.show()
我编写了一个代码来确定正确计算指标的数据长度的最小大小。
x = len(df["C"])
fastk, fastd = talib.STOCHRSI(df["C"].values, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
fk = np.round(fastk[x - 3:], 5)
fd = np.round(fastd[x - 3:], 5)
print('fk', fk, 'fd', fd)
输出
fk [100. 32.52114 0. ] fd [43.27353 54.11391 44.17371]
接下来,我们找到想要的数组长度。
for depth in range(10, 250, 5):
fastk, fastd = talib.STOCHRSI(df["C"].values[x - depth:], timeperiod=14, fastk_period=5, fastd_period=3,
fastd_matype=0)
if (fk == np.round(fastk[depth - 3:], 5)).all() and (fd == np.round(fastd[depth - 3:], 5)).all():
print('fastk[depth-3:]', fastk[depth - 3:], 'fastd[depth-3:]', fastd[depth - 3:])
print('stop iteration required length', depth)
break
输出
fastk[depth-3:] [100. 32.52113882 0. ] fastd[depth-3:] [43.27353345 54.11391306 44.17371294]
stop iteration required length 190
我实现了它,但它打印了所有内容。
print(ta.STOCHRSI(df["close"], 14, 5, 3, 0)[-1])
2022-04-20 17:00:00 NaN
2022-04-20 18:00:00 NaN
2022-04-20 19:00:00 NaN
2022-04-20 20:00:00 NaN
2022-04-20 21:00:00 NaN
...
2022-04-28 20:00:00 79.700101
2022-04-28 21:00:00 0.000000
2022-04-28 22:00:00 0.000000
2022-04-28 23:00:00 44.877738
2022-04-29 00:00:00 65.792554
Length: 200, dtype: float64
我只想获取 STOCHRSI 的最新值,只有一个浮点值。我怎样才能得到它?
或者如果我想获取最近 3 个值的平均值,我该如何实现?
如果你真的是指图书馆 TA-Lib.enter link description here
据我所知,那里的语法和你的不一样。
Streaming API:“添加了实验性 Streaming API,允许用户计算指标的最新值。这比使用函数 API 更快,因为接收流数据并只想知道最新更新的指标值的应用程序中的示例 Streaming API
这适用于 'SMA',但如果我在 'assert' 中的差异小于 5,则 'STOCHRSI' 会失败。 要计算指标,您需要报价历史记录。您可能看到第一个值是空的,因为指标周期不需要数据。
您可以尝试以下方法:确定正确计算指标需要多少数据。然后只提供这个数组长度。
如果资源允许,那么您可以计算所有值并保存它们的变量,只取最后一个变量 fastk[-1]。
import talib
from talib import stream
sma = talib.SMA(df["close"], timeperiod=14)
latest = stream.SMA(df["close"], timeperiod=14)
assert (sma[-1] - latest) < 0.00001
print(sma[-1], latest)#1.6180066666666686 1.6180066666666668
fastk, fastd = talib.STOCHRSI(df["close"], timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
f, fd = stream.STOCHRSI(df["close"], timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
print(fastk[-1], f)
assert (fastk[-1] - f) < 5#64.32089013974793 59.52628987038199
print(fastk[-1], f)
使用自下而上穿过主信号线的条件
if fastd[100] < fastk[100] and fastd[101] > fastk[101]:
pass#pass replace your code
我还在主图下面画了一个指标,看看它长什么样子。
import matplotlib.pyplot as plt
import pandas as pd
import talib
date = df.iloc[:, 0].index.date
x = len(df)
fig, ax = plt.subplots(2)
ax[0].plot(date[x-100:], df.iloc[x-100:, 3])
ax[1].plot(date[x-100:], fastk[x-100:])
ax[1].plot(date[x-100:], fastd[x-100:])
fig.autofmt_xdate()
plt.show()
我编写了一个代码来确定正确计算指标的数据长度的最小大小。
x = len(df["C"])
fastk, fastd = talib.STOCHRSI(df["C"].values, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0)
fk = np.round(fastk[x - 3:], 5)
fd = np.round(fastd[x - 3:], 5)
print('fk', fk, 'fd', fd)
输出
fk [100. 32.52114 0. ] fd [43.27353 54.11391 44.17371]
接下来,我们找到想要的数组长度。
for depth in range(10, 250, 5):
fastk, fastd = talib.STOCHRSI(df["C"].values[x - depth:], timeperiod=14, fastk_period=5, fastd_period=3,
fastd_matype=0)
if (fk == np.round(fastk[depth - 3:], 5)).all() and (fd == np.round(fastd[depth - 3:], 5)).all():
print('fastk[depth-3:]', fastk[depth - 3:], 'fastd[depth-3:]', fastd[depth - 3:])
print('stop iteration required length', depth)
break
输出
fastk[depth-3:] [100. 32.52113882 0. ] fastd[depth-3:] [43.27353345 54.11391306 44.17371294]
stop iteration required length 190