config.py
"""
QTrading 配置文件模块
"""
import os
from dataclasses import dataclass
from typing import Optional
@dataclass
class TushareConfig:
"""Tushare 配置"""
token: str = ""
retry_count: int = 3
pause: float = 0.1
@dataclass
class DatabaseConfig:
"""数据库配置"""
db_path: str = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "data", "qtrading.db")
table_name: str = "daily_kline"
backup_dir: str = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "data", "backup")
@dataclass
class StockPoolConfig:
"""股票池配置"""
stock_list: list = None
start_date: str = "20000101"
end_date: str = "20241231"
@dataclass
class StrategyConfig:
"""策略配置"""
default_strategy: str = "MA20Strategy"
available_strategies: list = None
@dataclass
class BacktestConfig:
"""回测配置"""
initial_capital: float = 100000.0
commission_rate: float = 0.0005
slippage: float = 0.001
benchmark: str = "sh000300"
@dataclass
class WebConfig:
"""Web 配置"""
host: str = "0.0.0.0"
port: int = 8050
debug: bool = True
@dataclass
class QTradingConfig:
"""QTrading 主配置类"""
tushare: TushareConfig = TushareConfig()
database: DatabaseConfig = DatabaseConfig()
stock_pool: StockPoolConfig = StockPoolConfig()
strategy: StrategyConfig = StrategyConfig()
backtest: BacktestConfig = BacktestConfig()
web: WebConfig = WebConfig()
# 全局配置实例
config = QTradingConfig()
# 股票复权类型
ADJUST_METHOD = {
"qfq": "前复权",
"hfq": "后复权",
"none": "不复权"
}
# 策略可用列表(会在策略模块中动态加载)
if config.strategy.available_strategies is None:
config.strategy.available_strategies = []
# 默认股票池(中证800)
if config.stock_pool.stock_list is None:
config.stock_pool.stock_list = [
"000001", "000002", "000004", "000005", "000006", "000007", "000008", "000009", "000010", "000011",
"000012", "000014", "000016", "000017", "000018", "000019", "000020", "000021", "000022", "000023",
"000024", "000025", "000026", "000027", "000028", "000029", "000030", "000031", "000032", "000033",
"000034", "000035", "000036", "000037", "000038", "000039", "000040", "000043", "000045", "000046",
"000048", "000049", "000050", "000055", "000056", "000058", "000059", "000060", "000061", "000062"
]