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().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:')

View File

@ -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)

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
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())
# 如果需要将时间格式转换为可读格式
data.index = pd.to_datetime(data.index)
# 打印前几行数据
print(data.head())