diff --git a/bn.py b/bn.py index 61bde16..fd0e0af 100644 --- a/bn.py +++ b/bn.py @@ -8,6 +8,10 @@ def klines(symbol, interval, limit=1000): lines = cm.klines(symbol,interval, limit=limit) return lines +def ticker_price(symbol): + prices = cm.ticker_price(symbol) + return prices[0]['price'] if len(prices)>0 else 0 + # Get Symbols def symbols(): info = cm.exchange_info() diff --git a/main.py b/main.py index a4ebb81..748b65e 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,7 @@ import schedule import bn import setting import time -import signals.ma_arrangement as maa +import signals.ema_arrangement as maa import monitors.large_transfer as lt # symbols = ['BTCUSDT','ETHUSDT','FILUSDT','MASKUSDT','DOGEUSDT','CFXUSDT','LTCUSDT'] diff --git a/signals/ma_arrangement.py b/signals/ema_arrangement.py similarity index 71% rename from signals/ma_arrangement.py rename to signals/ema_arrangement.py index 41d9d3a..baece76 100644 --- a/signals/ma_arrangement.py +++ b/signals/ema_arrangement.py @@ -8,7 +8,7 @@ import db flags = {} -def check_ma_arrange(data): +def check_ema_arrange(data): # 提取收盘价 close_prices = np.array([float(entry[4]) for entry in data]) @@ -28,19 +28,21 @@ def run(symbol, interval): # 获取kline数据 data = bn.klines(symbol, interval) - bullish, bearish = check_ma_arrange(data) + ticker_price = bn.ticker_price(symbol) + + bullish, bearish = check_ema_arrange(data) flag_name = symbol + '_' + interval text = "" data = {} if bullish and (flag_name not in flags or flags[flag_name] == False): flags[flag_name] = True - text = f'📶信号预警📶\r\n\r\n品种:【${symbol}】\r\n周期:{interval}\r\n信号:【多头】排列\r\n\r\n{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' + text = f'📶信号预警📶\r\n\r\n品种:【{symbol}】\r\n当前价格:{ticker_price}\r\n周期:{interval}\r\n信号类型:EMA排列\r\n信号:多头\r\n\r\n{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' data = {"type" : 1, "symbol": symbol, "interval" : interval, "signal": 1} if bearish and (flag_name not in flags or flags[flag_name] == True): flags[flag_name] = False - text = f'📶信号预警📶\r\n\r\n品种:【${symbol}】\r\n周期:{interval}\r\n信号:【空头】排列\r\n\r\n{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' + text = f'📶信号预警📶\r\n\r\n品种:【{symbol}】\r\n当前价格:{ticker_price}\r\n周期:{interval}\r\n信号类型:EMA排列\r\n信号:空头\r\n\r\n{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' data = {"type" : 1, "symbol": symbol, "interval" : interval, "signal": 3} if text != "": signals = db.get_list('signals', f'symbol="{symbol}" and `interval`="{interval}"') diff --git a/signals/volume_growing.py b/signals/volume_growing.py new file mode 100644 index 0000000..8e5fa9f --- /dev/null +++ b/signals/volume_growing.py @@ -0,0 +1,37 @@ +import talib +import numpy as np +import bn +import tg +import datetime +import setting +import db + +def check_volume_growing(data): + # 提取收盘价 + close_prices = np.array([float(entry[4]) for entry in data]) + + # 提取交易量 + volumes = np.array([float(entry[5]) for entry in data]) + + # 计算量能指标 + obv = talib.OBV(close_prices, volumes) + + return obv[-1] > obv[-2] + + +def run(symbol, interval): + # 获取kline数据 + data = bn.klines(symbol, interval) + + is_growing= check_volume_growing(data) + + if is_growing: + text = f'📶信号预警📶\r\n\r\n品种:【{symbol}】\r\n周期:{interval}\r\n信号名称:量能监控\r\n信号:量能上升\r\n\r\n{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' + print(text) + tg.send_message(setting.chat_id, text) + else: + print(f'{symbol} - {interval} 量能上升: {is_growing}') + + + + diff --git a/strategy_test.py b/strategy_test.py index 3a62440..c6da030 100644 --- a/strategy_test.py +++ b/strategy_test.py @@ -1,8 +1,14 @@ import monitors.large_transfer as lt import bn -import signals.ma_arrangement as maa +import signals.ema_arrangement as maa +import signals.volume_growing as vg # symbols = bn.symbols() # for s in symbols: -maa.run('LINKUSDT', '1h') \ No newline at end of file +# maa.run('LINKUSDT', '1h') + +symbols = bn.symbols() + +for s in symbols: + vg.run(s, '1h') \ No newline at end of file diff --git a/test.py b/test.py index d9f9cf8..ab9cbf3 100644 --- a/test.py +++ b/test.py @@ -4,9 +4,11 @@ import mplfinance as mpf import datetime as dt import monitors.large_transfer as lt from binance.spot import Spot -import signals.ma_arrangement as maa +import signals.ema_arrangement as maa from binance.cm_futures import CMFutures -# maa.run('BTCUSD_PERP', '1h') +maa.run('MANAUSD_PERP', '1h') -print(len(bn.symbols())) +# print(len(bn.symbols())) + +# print(bn.ticker_price('BTCUSD_PERP'))