crypto_quant/monitor_main.py

83 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from time import sleep
from core.data_monitor import DataMonitor
from core.db_manager import insert_market_data_to_mysql, query_latest_data
from config import API_KEY, SECRET_KEY, PASSPHRASE, SANDBOX, \
MONITOR_CONFIG, MYSQL_CONFIG
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
class MonitorMain:
def __init__(self):
self.data_monitor = DataMonitor(
api_key=API_KEY,
secret_key=SECRET_KEY,
passphrase=PASSPHRASE,
sandbox=SANDBOX,
)
self.symbols = MONITOR_CONFIG.get("volume_monitor", {}).get("symbols", ["XCH-USDT"])
self.intervals = MONITOR_CONFIG.get("volume_monitor", {}).get("intervals", ["5m", "15m", "1H", "4H", "1D"])
self.initial_date = MONITOR_CONFIG.get("volume_monitor", {}).get("initial_date", "2025-07-01 00:00:00")
mysql_user = MYSQL_CONFIG.get("user", "xch")
mysql_password = MYSQL_CONFIG.get("password", "")
if not mysql_password:
raise ValueError("MySQL password is not set")
mysql_host = MYSQL_CONFIG.get("host", "localhost")
mysql_port = MYSQL_CONFIG.get("port", 3306)
mysql_database = MYSQL_CONFIG.get("database", "okx")
self.db_url = f"mysql+pymysql://{mysql_user}:{mysql_password}@{mysql_host}:{mysql_port}/{mysql_database}"
def initial_data(self):
"""
初始化数据
"""
for symbol in self.symbols:
for interval in self.intervals:
latest_data = query_latest_data(symbol, interval, self.db_url)
if latest_data:
logging.info(f"已初始化{symbol}, {interval} 最新数据请使用update_data()更新数据")
continue
self.fetch_save_data(symbol, interval, self.initial_date)
def fetch_save_data(self, symbol: str, interval: str, start: str):
"""
获取保存数据
"""
data = self.data_monitor.get_historical_kline_data(symbol=symbol,
start=start,
bar=interval)
if data is not None and len(data) > 0:
insert_market_data_to_mysql(data, self.db_url)
def update_data(self):
"""
更新数据
1. 获取最新数据
2. 获取最新数据的时间戳
3. 根据最新数据的时间戳,获取最新数据
4. 将最新数据保存到数据库
"""
for symbol in self.symbols:
for interval in self.intervals:
latest_data = query_latest_data(symbol, interval, self.db_url)
if not latest_data:
self.fetch_save_data(symbol, interval, self.initial_date)
continue
else:
latest_timestamp = latest_data.get("timestamp")
if latest_timestamp:
latest_timestamp = int(latest_timestamp)
else:
logging.warning(f"获取{symbol}, {interval} 最新数据失败")
continue
self.fetch_save_data(symbol, interval, latest_timestamp + 1)
if __name__ == "__main__":
monitor_main = MonitorMain()
# monitor_main.update_data()
monitor_main.initial_data()