ema20 = EMA(klines, 20) a = ema20.iloc[-2]['ema'] b = ema20.iloc[-3]['ema'] print(a,b)
为什么每次循环输出的a,b都是不一样的呢
正常不应该是本次输出的 b 和上一次的 a 值是一样的吗
其他都不变,测试替换成使用ma指标是正常的
这边测试是正常的,可以检查下代码逻辑或者提供一个最小复现代码
SYMBOL = “KQ.m@SHFE.rb” # 合约代码 klines = api.get_kline_serial(SYMBOL, 24*60*60, data_length=40) quote = api.get_quote(SYMBOL)
while True: api.wait_update() if api.is_changing(klines.iloc[-1], “datetime”): short_avg = ema(klines[“close”], 20) print(quote.datetime, round(short_avg.iloc[-1]),round(short_avg.iloc[-2]))
输出结果 2024-01-03 18:00:00.000000 3992 3985 2024-01-04 18:00:00.000000 3996 3991 2024-01-05 18:00:00.000000 3989 3990
我理解的正确的输出不应该是今天的short_avg.iloc[-2] 和上一次输出的short_avg.iloc[-1] 是相同的值吗
是这样的,ema每个位置的值都是根据前面的值递推出来的。比如一个K线序列是[1,2,3,4,5],在新来一根K线后序列变为[2,3,4,5,6],可以发现这个序列更新了,比如算5这个位置,前面的值不是1,2,3,4而是2,3,4,所以递推出来的值会和之前不一样
SYMBOL = “KQ.m@SHFE.rb” # 合约代码
klines = api.get_kline_serial(SYMBOL, 24*60*60, data_length=40)
quote = api.get_quote(SYMBOL)
while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], “datetime”):
short_avg = ema(klines[“close”], 20)
print(quote.datetime, round(short_avg.iloc[-1]),round(short_avg.iloc[-2]))
输出结果
2024-01-03 18:00:00.000000 3992 3985
2024-01-04 18:00:00.000000 3996 3991
2024-01-05 18:00:00.000000 3989 3990
我理解的正确的输出不应该是今天的short_avg.iloc[-2] 和上一次输出的short_avg.iloc[-1] 是相同的值吗