215 浏览
0

ema20 = EMA(klines, 20)
a = ema20.iloc[-2]['ema']
b = ema20.iloc[-3]['ema']
print(a,b)

为什么每次循环输出的a,b都是不一样的呢

正常不应该是本次输出的 b 和上一次的 a 值是一样的吗

其他都不变,测试替换成使用ma指标是正常的

laot1999 未选择答案 3天 前
0

这边测试是正常的,可以检查下代码逻辑或者提供一个最小复现代码

chaos 编辑评论 24小时 前

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,所以递推出来的值会和之前不一样