trading-quant/signals/ema_arrangement.py
2023-06-26 18:32:48 +08:00

55 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import talib
import numpy as np
import bn
import tg
import datetime
import setting
import db
flags = {}
def check_ema_arrange(data):
# 提取收盘价
close_prices = np.array([float(entry[4]) for entry in data])
# 计算移动平均线
ema7 = talib.EMA(close_prices, timeperiod=7)
ema30 = talib.EMA(close_prices, timeperiod=30)
ema100 = talib.EMA(close_prices, timeperiod=100)
ema200 = talib.EMA(close_prices, timeperiod=200)
bullish = ema7[-1] > ema30[-1] > ema100[-1] > ema200[-1]
bearish = ema7[-1] < ema30[-1] < ema100[-1] < ema200[-1]
return bullish, bearish
def run(symbol, interval):
# 获取kline数据
data = bn.klines(symbol, interval)
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当前价格:{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当前价格:{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}"')
for s in signals:
print(s)
db.execute_sql(f'delete from signals where `id`={s["id"]}')
db.insert(data, 'signals')
print(text)
tg.send_message(setting.chat_id, text)