import talib import time,setting import telegram_sender from datasource import crypto import dingding import discord_sender import setting # crossover 函数:检测上穿信号 def crossover(series1, series2): return (series1 > series2) and (series1.shift(1) <= series2.shift(1)) # crossunder 函数:检测下穿信号 def crossunder(series1, series2): return (series1 < series2) and (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) df['shortDiff'] = abs(df['ema5'] - df['ema10']) / df['ema10'] df['midDiff'] = abs(df['ema10'] - df['ema30']) / df['ema30'] df['longDiff'] = abs(df['ema30'] - df['ema144']) / df['ema144'] df['priceCheck'] = ((df['longDiff'] <= maxDifference) & (df['midDiff'] <= maxDifference) & (df['shortDiff'] <= maxDifference)) df['isLongArrangement'] = ((df['ema5'] > df['ema10']) & (df['ema10'] > df['ema30']) & (df['ema30'] > df['ema144'])) df['isShortArrangement'] = ((df['ema5'] < df['ema10']) & (df['ema10'] < df['ema30']) & (df['ema30'] < df['ema144'])) d1 = df.iloc[-1] d2 = df.iloc[-2] d3 = df.iloc[-3] maxDiff = max(d1['shortDiff'], d1['midDiff'], d1['longDiff']) minDiff = min(d1['shortDiff'], d1['midDiff'], d1['longDiff']) isbullish = d1['isLongArrangement'] == True and d2['isLongArrangement'] == True and d3['isLongArrangement'] == False isBear = d1['isShortArrangement'] == True and d2['isShortArrangement'] == True and d3['isShortArrangement'] == False print(f"{symbol} - {interval} bullish: {isbullish} | bear : {isBear} | LongArrangement: {d1['isLongArrangement']} | ShortArrangement: {d1['isShortArrangement']}") if(isbullish | isBear): message = f"策略:【均线排列信号】\r\n" message += f"品种: {symbol}\r\n" message += f"周期: {interval}\r\n" message += f"信号: 【{'多' if isbullish else '空'}】\r\n" message += f"收盘价: {d1['close']}\r\n" url = 'https://discordapp.com/api/webhooks/1285867836454998077/JNAFUyur_ygOJIh6C4beUAVYMpm1TZf4IEeMn8Q1p0TglO1Hjyiu2LQqiU5AxVovWyiO' discord_sender.send_message(url,'🦄信号提醒🦄',message) def run_crypto(interval, debug=False): for s in setting.symbols: df = crypto.get_klines(s, interval) stratergy_run(s,interval, df, debug) time.sleep(1)