This commit is contained in:
aaron 2024-06-07 10:55:50 +08:00
parent b8180a843b
commit e2c8ee1594
4 changed files with 124 additions and 72 deletions

91
datasource/crypto.py Normal file
View File

@ -0,0 +1,91 @@
import requests
from binance.spot import Spot
import pandas as pd
api_key = "HCpeel8g6fsTK2630b7BvGBcS09Z3qfXkLVcAY2JkpaiMm1J6DWRvoQZBQlElDJg"
api_secret= "TySs6onlHOTrGzV8fMdDxLKTWWYnQ4rCHVAmjrcHby17acKflmo7xVTWVsbqtxe7"
client = Spot(api_key, api_secret)
# 获取市值前10的币种
def _get_top_coins_by_market_cap(top):
coingecko_url = "https://api.coingecko.com/api/v3/coins/markets"
params = {
'vs_currency': 'usd',
'order': 'market_cap_desc',
'per_page': top,
'page': 1
}
response = requests.get(coingecko_url, params=params)
coins = response.json()
return coins
# 获取Binance上的USDT交易对信息
def _get_binance_usdt_pairs():
url = "https://api.binance.com/api/v3/exchangeInfo"
response = requests.get(url)
data = response.json()
usdt_pairs = [symbol['symbol'] for symbol in data['symbols'] if (symbol['quoteAsset'] == 'USDT' and symbol['status'] == 'TRADING')]
return usdt_pairs
def get_top_binance_usdt_pairs(top):
# 获取市值前10的币种
top_coins = _get_top_coins_by_market_cap(top)
# 获取Binance上的USDT交易对
usdt_pairs = _get_binance_usdt_pairs()
# 筛选出前10币种中与USDT有交易对的币种
top_pairs = []
for coin in top_coins:
coin_symbol = coin['symbol'].upper()
pair = f"{coin_symbol}USDT"
if pair in usdt_pairs:
top_pairs.append(pair)
return top_pairs
## 获取所有现货交易对
def get_symbols():
data = client.exchange_info()["symbols"]
# 创建DataFrame
columns = ['symbol', 'status', 'baseAsset', 'quoteAsset']
df = pd.DataFrame(data, columns=columns)
# 过滤出在架交易对
df_in_trade = df[df['status'] == 'TRADING']
df_in_USDT = df_in_trade[df_in_trade['quoteAsset'] == 'USDT']
return df_in_USDT['symbol']
## 根据交易对和周期获取数据集
def get_klines(symbol,interval):
# 获取 k 线数据
data = client.klines(symbol, interval,limit=500)
# 将数据转换为DataFrame
columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume',
'close_time', 'quote_asset_volume', 'number_of_trades',
'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore']
df = pd.DataFrame(data, columns=columns)
# 转化成 float
df['open'] = df['open'].astype('float64')
df['high'] = df['high'].astype('float64')
df['low'] = df['low'].astype('float64')
df['close'] = df['close'].astype('float64')
df['volume'] = df['volume'].astype('float64')
# 将时间戳转换为日期时间格式
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df['close_time'] = pd.to_datetime(df['close_time'], unit='ms')
return df

View File

@ -8,8 +8,8 @@ import utils
# 监控 # 监控
schedule.every(setting.whaleAlert_minutes).minutes.do(lt.run) schedule.every(setting.whaleAlert_minutes).minutes.do(lt.run)
schedule.every().hour.at(":00").do(vegas.run, interval = '1h') schedule.every().hour.at(":01").do(vegas.run_crypto, interval = '1h')
schedule.every().hour.at(":00").do(vegas.run, interval = '4h') schedule.every().hour.at(":01").do(vegas.run_crypto, interval = '4h')
print(f'Running... V1.0') print(f'Running... V1.0')
print(f'Pairs:') print(f'Pairs:')

View File

@ -2,54 +2,10 @@ from binance.spot import Spot
import talib import talib
import numpy as np import numpy as np
import pandas as pd import pandas as pd
import datasource.crypto
import time,setting import time,setting
import telegram_sender import telegram_sender
import utils from datasource import crypto
api_key = "HCpeel8g6fsTK2630b7BvGBcS09Z3qfXkLVcAY2JkpaiMm1J6DWRvoQZBQlElDJg"
api_secret= "TySs6onlHOTrGzV8fMdDxLKTWWYnQ4rCHVAmjrcHby17acKflmo7xVTWVsbqtxe7"
client = Spot(api_key, api_secret)
## 获取所有现货交易对
def get_symbols():
data = client.exchange_info()["symbols"]
# 创建DataFrame
columns = ['symbol', 'status', 'baseAsset', 'quoteAsset']
df = pd.DataFrame(data, columns=columns)
# 过滤出在架交易对
df_in_trade = df[df['status'] == 'TRADING']
df_in_USDT = df_in_trade[df_in_trade['quoteAsset'] == 'USDT']
return df_in_USDT['symbol']
## 根据交易对和周期获取数据集
def get_dataFrame(symbol,interval):
# 获取 k 线数据
data = client.klines(symbol, interval,limit=500)
# 将数据转换为DataFrame
columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume',
'close_time', 'quote_asset_volume', 'number_of_trades',
'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore']
df = pd.DataFrame(data, columns=columns)
# 转化成 float
df['open'] = df['open'].astype('float64')
df['high'] = df['high'].astype('float64')
df['low'] = df['low'].astype('float64')
df['close'] = df['close'].astype('float64')
df['volume'] = df['volume'].astype('float64')
# 将时间戳转换为日期时间格式
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df['close_time'] = pd.to_datetime(df['close_time'], unit='ms')
return df
# crossover 函数:检测上穿信号 # crossover 函数:检测上穿信号
def crossover(series1, series2): def crossover(series1, series2):
@ -60,7 +16,7 @@ def crossunder(series1, series2):
return (series1 < series2) & (series1.shift(1) >= series2.shift(1)) return (series1 < series2) & (series1.shift(1) >= series2.shift(1))
## 检查信号 ## 检查信号
def check_signal(symbol, interval,df): def stratergy_run(symbol, interval,df):
## 计算 ema ## 计算 ema
df['ema13'] = talib.EMA(df['close'], timeperiod=13) df['ema13'] = talib.EMA(df['close'], timeperiod=13)
df['ema144'] = talib.EMA(df['close'], timeperiod=144) df['ema144'] = talib.EMA(df['close'], timeperiod=144)
@ -97,13 +53,13 @@ def check_signal(symbol, interval,df):
if direction != "": if direction != "":
telegram_sender.send_message(setting.chat_id, message) telegram_sender.send_message(setting.chat_id, message)
def run(interval):
def run_crypto(interval):
print('Vegas策略运行....') print('Vegas策略运行....')
symbols = utils.get_top_binance_usdt_pairs(20)
symbols = crypto.get_top_binance_usdt_pairs(10)
for s in symbols: for s in symbols:
df = get_dataFrame(s, interval) df = crypto.get_klines(s, interval)
check_signal(s,interval, df) stratergy_run(s,interval, df)
time.sleep(1) time.sleep(1)

37
test.py
View File

@ -1,21 +1,26 @@
import requests import yfinance as yf
import pandas as pd
import monitors
import monitors.vegas
# monitors.vegas.run('1d')
import yfinance as yf
import pandas as pd import pandas as pd
api_url = "https://api.exness.com/v1/ohlc" # 定义股票代码例如苹果公司的股票代码为AAPL
params = { ticker = 'AAPL'
'symbol': 'XAUUSDm',
'interval': '1d',
'start': '2020-01-01',
'end': '2023-01-01'
}
# 发起HTTP请求 # 下载日线数据
response = requests.get(api_url, params=params) data = yf.download(ticker, interval='1d', period='2y') # 过去一年的数据
data = response.json()
# 转换为DataFrame # 打印数据
df = pd.DataFrame(data['ohlc'], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) print(data)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
# 打印前五行数据 # 如果需要将时间格式转换为可读格式
print(df.head()) data.index = pd.to_datetime(data.index)
# 打印前几行数据
print(data.head())