Python拉盘检测机器人未触发警报:如何设置涨跌幅与时间参数?
问题原因及解决方法
核心原因
- 缺少涨跌幅阈值与时间窗口的判断逻辑:你的
run_alerts函数未实现「指定时间内涨跌幅达标触发警报」的核心检测逻辑,仅执行了代币列表展示操作。 - 初始数据格式错误:如果
initial_data只是纯代币名称列表,而非包含初始价格的字典,无法计算价格波动幅度。 - 循环检测无条件校验:函数循环中没有对比当前价格与初始价格、检测时间窗口是否符合触发条件的代码。
代码修改与参数设置方法
1. 修改run_alerts函数,添加涨跌幅与时间参数
在函数中新增threshold(涨跌幅阈值,如0.1代表10%)和time_window(检测时间窗口,单位秒)参数,并实现触发逻辑:
def run_alerts(URL, initial_data, sleeptime, vol, threshold=0.1, time_window=60): import time start_time = time.time() # 记录监控起始时间 while True: # 从接口获取当前代币数据(需自行实现get_current_token_data函数) current_data = get_current_token_data(URL) for token_name, token_info in initial_data.items(): initial_price = token_info['price'] current_price = current_data[token_name]['price'] # 计算涨跌幅 price_change_rate = (current_price - initial_price) / initial_price # 计算已流逝时间 elapsed_time = time.time() - start_time # 触发条件:在时间窗口内,涨跌幅绝对值超过阈值 if elapsed_time <= time_window and abs(price_change_rate) >= threshold: print(f"警报:代币{token_name}在{elapsed_time:.2f}秒内涨跌幅达{price_change_rate*100:.2f}%!") play('alert_music.mp3', vol) # 播放警报音 start_time = time.time() # 重置时间窗口,避免重复触发 time.sleep(sleeptime) # 间隔检测
2. 正确初始化initial_data
确保initial_data是包含代币名称与对应初始价格的字典,而非纯名称列表:
import requests def get_initial_token_data(URL): # 从接口拉取初始代币价格数据 resp = requests.get(URL) token_list = resp.json()['tokens'] # 构建初始数据字典 initial_data = {token['name']: {'price': token['price']} for token in token_list} return initial_data # 初始化数据并打印监控列表 initial_data = get_initial_token_data("https://your-token-api-url.com") print("监控代币列表:", list(initial_data.keys()))
3. 调用run_alerts时自定义参数
根据需求传入阈值和时间窗口,示例:
# 每5秒检测一次,音量0.7,15%涨跌幅阈值,30秒时间窗口 run_alerts("https://your-token-api-url.com", initial_data, 5, 0.7, threshold=0.15, time_window=30)
内容的提问来源于stack exchange,提问作者Lacey
相关产品推荐
相关产品推荐

