58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
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'])
|
|
df['preLongArrangement'] = (df['ema5'].shift(1) > df['ema10'].shift(1)) & (df['ema10'].shift(1) > df['ema30'].shift(1)) & (df['ema30'].shift(1) > df['ema144'].shift(1))
|
|
|
|
latest = df.iloc[-1]
|
|
isbullish = latest['preLongArrangement'] == False & latest['isLongArrangement'] == True & latest['priceCheck'] ==True
|
|
print(f"{symbol} bullish: {isbullish}")
|
|
if(isbullish):
|
|
message = f"⭐️信号策略⭐️\r\n\r\n"
|
|
message += f"策略:【趋势追踪V1.0】\r\n"
|
|
message += f"品种: {symbol}\r\n"
|
|
message += f"周期: {interval}\r\n\r\n"
|
|
message += f"信号: 【启动】\r\n\r\n"
|
|
|
|
dingding.send_message(message)
|
|
|
|
|
|
def run_crypto(interval, debug=False):
|
|
symbols = ['BTCUSDT',"ETHUSDT",'LTCUSDT','DOGEUSDT','FTMUSDT','FILUSDT','OPUSDT','SOLUSDT','BNBUSDT','BCHUSDT','ETCUSDT','ARUSDT']
|
|
for s in symbols:
|
|
df = crypto.get_klines(s, interval)
|
|
stratergy_run(s,interval, df, debug)
|
|
|
|
time.sleep(1) |