from binance.spot import Spot import talib import numpy as np import pandas as pd import datasource.crypto import time,setting import telegram_sender from datasource import crypto from datetime import datetime import dingding # crossover 函数:检测上穿信号 def crossover(series1, series2): return (series1 > series2) & (series1.shift(1) <= series2.shift(1)) # crossunder 函数:检测下穿信号 def crossunder(series1, series2): return (series1 < series2) & (series1.shift(1) >= series2.shift(1)) ## 检查信号 def stratergy_run(symbol, interval, df, debug): maxDifference = 0.005 ## 计算 ema df['ema5'] = talib.EMA(df['close'], timeperiod=5) df['ema10'] = talib.EMA(df['close'], timeperiod=10) df['ema30'] = talib.EMA(df['close'], timeperiod=30) df['ema144'] = talib.EMA(df['close'], timeperiod=144) shortDiff = abs(df['ema5'] - df['ema10']) / df['ema10'] midDiff = abs(df['ema10'] - df['ema30']) / df['ema30'] longDiff = abs(df['ema30'] - df['ema144']) / df['ema144'] df['priceCheck'] = (longDiff <= maxDifference) & (midDiff <= maxDifference) & (shortDiff <= maxDifference) df['isLongArrangement'] = (df['ema5'] > df['ema10']) & (df['ema10'] > df['ema30']) & (df['ema30'] > df['ema144']) d1 = df.iloc[-1] d2 = df.iloc[-2] d3 = df.iloc[-3] isbullish = d1['isLongArrangement'] == True & d2['isLongArrangement'] == False & d1['priceCheck'] == True print(f"{symbol} bullish: {isbullish} | isLongArrangement: {d1['isLongArrangement']} | priceCheck: {d1['priceCheck']}") if(isbullish == True): message = f"🦄 信 号 提 醒 🦄\r\n\r\n" message += f"策略:【趋势追踪V1.0】\r\n" message += f"品种: {symbol}\r\n" message += f"周期: {interval}\r\n" message += f"信号: 【多头排列】\r\n" dingding.send_message(message, isAtAll=True) telegram_sender.send_message(setting.chat_id, message) def run_crypto(interval, debug=False): symbols = datasource.crypto.get_top_binance_usdt_pairs(100) for s in symbols: df = crypto.get_klines(s, interval) stratergy_run(s,interval, df, debug) time.sleep(1)