Python如何循环遍历字符串列表逐个打印每个币种对应的指标数据
问题根因
你写的币种列表遍历逻辑仅执行了赋值操作,没有把后续的接口请求、指标计算、结果打印逻辑包含在循环内。遍历结束后pair变量仅保留了列表最后一个值BTCUSDT,后续的死循环全程复用这个固定值发起请求,自然只会输出最后一个币种的指标。
修改方案
将币种遍历逻辑移到while死循环内部,每次轮询时依次处理所有币种即可。另外原代码里的>是HTML转义字符,要替换为正常的大于号>才能正常运行,修改后的完整代码如下:
import time import numpy as np # 请确保以下依赖已正确导入 from binance.client import Client import config if __name__ == '__main__': # 初始化币安客户端 client = Client(config.API_KEY, config.API_SECRET) coinlist = ['XRPUSDT', 'ETHUSDT', 'BTCUSDT'] limit = 500 interval = '5m' # 可切换为EMA ortalama_tipi = 'VAR' while 1: # 全局每次轮询等待10秒,避免触发接口限流 time.sleep(10) # 每次轮询遍历所有币种处理 for pair in coinlist: try: klines = client.get_klines(symbol=pair, interval=interval, limit=limit) except Exception as exp: msg = f'获取{pair}K线出错: {str(exp)}' print(msg, flush=True) time.sleep(10) client = Client(config.API_KEY, config.API_SECRET) # 单个币种出错跳过,继续处理下一个币种 continue open_time = [int(entry[0]) for entry in klines] open_klines = [float(entry[1]) for entry in klines] high = [float(entry[2]) for entry in klines] low = [float(entry[3]) for entry in klines] close = [float(entry[4]) for entry in klines] close_array1 = np.asarray(close) close_array = close_array1[:-1] high_array1 = np.asarray(high) high_array = high_array1[:-1] low_array1 = np.asarray(low) low_array = low_array1[:-1] open_array1 = np.asarray(open_klines) open_array = open_array1[:-1] if ortalama_tipi == 'VAR': var_arr = generateVar(high_array, low_array, moving_average_length=10) pmax = generatePMax(var_arr, close_array, high_array, low_array, 10, 3) last_var = var_arr[-1] previous_var = var_arr[-2] last_pmax = pmax[-1] previous_pmax = pmax[-2] # 按需求格式打印 print(f'{pair} ——————START——————') print('last var:', last_var, 'last pmax', last_pmax, flush=True) if last_var > last_pmax and previous_var < previous_pmax: msg = f'buy signal for {pair}' print(msg, flush=True) if last_var < last_pmax and previous_var > previous_pmax: msg = f'sell signal for {pair}' print(msg, flush=True) elif ortalama_tipi == 'EMA': ema_arr = generateEma(high_array, low_array, moving_average_length=10) pmax = generatePMax(ema_arr, close_array, high_array, low_array, 10, 3) last_ema = ema_arr[-1] previous_ema = ema_arr[-2] last_pmax = pmax[-1] previous_pmax = pmax[-2] print(f'{pair} ——————START——————') print('last ema:', last_ema, 'last pmax', last_pmax, flush=True) if last_ema > last_pmax and previous_ema < previous_pmax: msg = f'buy signal for {pair}' print(msg, flush=True) if last_ema < last_pmax and previous_ema > previous_pmax: msg = f'sell signal for {pair}' print(msg, flush=True)
内容的提问来源于stack exchange,提问作者Mehmet Reşat Demir
相关产品推荐
相关产品推荐

