From e2c8ee15941ef000f432e6d4a965ef6d57d4518f Mon Sep 17 00:00:00 2001 From: aaron <> Date: Fri, 7 Jun 2024 10:55:50 +0800 Subject: [PATCH] 1 --- datasource/crypto.py | 91 ++++++++++++++++++++++++++++++++++++++++++++ main.py | 4 +- monitors/vegas.py | 64 +++++-------------------------- test.py | 37 ++++++++++-------- 4 files changed, 124 insertions(+), 72 deletions(-) create mode 100644 datasource/crypto.py diff --git a/datasource/crypto.py b/datasource/crypto.py new file mode 100644 index 0000000..505fcaf --- /dev/null +++ b/datasource/crypto.py @@ -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 \ No newline at end of file diff --git a/main.py b/main.py index 52af958..28081c0 100644 --- a/main.py +++ b/main.py @@ -8,8 +8,8 @@ import utils # 监控 schedule.every(setting.whaleAlert_minutes).minutes.do(lt.run) -schedule.every().hour.at(":00").do(vegas.run, interval = '1h') -schedule.every().hour.at(":00").do(vegas.run, interval = '4h') +schedule.every().hour.at(":01").do(vegas.run_crypto, interval = '1h') +schedule.every().hour.at(":01").do(vegas.run_crypto, interval = '4h') print(f'Running... V1.0') print(f'Pairs:') diff --git a/monitors/vegas.py b/monitors/vegas.py index d6edfe4..19b01db 100644 --- a/monitors/vegas.py +++ b/monitors/vegas.py @@ -2,54 +2,10 @@ from binance.spot import Spot import talib import numpy as np import pandas as pd +import datasource.crypto import time,setting import telegram_sender -import utils - - -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 +from datasource import crypto # crossover 函数:检测上穿信号 def crossover(series1, series2): @@ -60,7 +16,7 @@ def crossunder(series1, series2): return (series1 < series2) & (series1.shift(1) >= series2.shift(1)) ## 检查信号 -def check_signal(symbol, interval,df): +def stratergy_run(symbol, interval,df): ## 计算 ema df['ema13'] = talib.EMA(df['close'], timeperiod=13) df['ema144'] = talib.EMA(df['close'], timeperiod=144) @@ -97,13 +53,13 @@ def check_signal(symbol, interval,df): if direction != "": telegram_sender.send_message(setting.chat_id, message) -def run(interval): + +def run_crypto(interval): print('Vegas策略运行....') - symbols = utils.get_top_binance_usdt_pairs(20) + + symbols = crypto.get_top_binance_usdt_pairs(10) for s in symbols: - df = get_dataFrame(s, interval) - check_signal(s,interval, df) + df = crypto.get_klines(s, interval) + stratergy_run(s,interval, df) - time.sleep(1) - - + time.sleep(1) \ No newline at end of file diff --git a/test.py b/test.py index 17b0bd8..9d814f9 100644 --- a/test.py +++ b/test.py @@ -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 -api_url = "https://api.exness.com/v1/ohlc" -params = { - 'symbol': 'XAUUSDm', - 'interval': '1d', - 'start': '2020-01-01', - 'end': '2023-01-01' -} +# 定义股票代码(例如苹果公司的股票代码为AAPL) +ticker = 'AAPL' -# 发起HTTP请求 -response = requests.get(api_url, params=params) -data = response.json() +# 下载日线数据 +data = yf.download(ticker, interval='1d', period='2y') # 过去一年的数据 -# 转换为DataFrame -df = pd.DataFrame(data['ohlc'], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) -df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s') +# 打印数据 +print(data) -# 打印前五行数据 -print(df.head()) \ No newline at end of file +# 如果需要将时间格式转换为可读格式 +data.index = pd.to_datetime(data.index) + +# 打印前几行数据 +print(data.head())