trading-quant/signals/ema_arrangement.py
2023-07-02 22:50:31 +08:00

57 lines
1.7 KiB
Python

import talib
import numpy as np
import bn
import tg
import datetime
import setting
import db
import signal_builder
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 = signal_builder.signal_text(symbol, interval, "EMA排列","【多】")
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 = signal_builder.signal_text(symbol, interval, "EMA排列","【空】")
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)