mirror of
https://github.com/silencesdg/mt5_python_ea_suite.git
synced 2026-07-30 12:17:43 +00:00
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
策略基类
|
|
"""
|
|
|
|
from logger import logger
|
|
|
|
class BaseStrategy:
|
|
"""策略基类 (已重构为依赖注入)"""
|
|
|
|
def __init__(self, data_provider, symbol, timeframe):
|
|
self.data_provider = data_provider
|
|
self.symbol = symbol
|
|
self.timeframe = timeframe
|
|
self.name = self.__class__.__name__
|
|
|
|
def set_params(self, params):
|
|
"""动态设置策略参数"""
|
|
for key, value in params.items():
|
|
if hasattr(self, key):
|
|
setattr(self, key, value)
|
|
logger.debug(f"{self.name}: 参数 '{key}' 已更新为 {value}")
|
|
else:
|
|
logger.warning(f"{self.name}: 尝试设置不存在的参数 '{key}'")
|
|
|
|
def _log_signal(self, signal, reason=None):
|
|
"""记录信号日志"""
|
|
if signal != 0:
|
|
direction = "买入" if signal > 0 else "卖出"
|
|
logger.info(f"{self.name}: 生成 {direction} 信号 (强度: {signal:.2f}), 原因: {reason}")
|
|
else:
|
|
logger.debug(f"{self.name}: 无信号, 原因: {reason}")
|
|
|
|
def generate_signal(self):
|
|
"""生成交易信号 - 子类必须实现此方法"""
|
|
raise NotImplementedError("子类必须实现 generate_signal 方法")
|
|
|
|
def run_backtest(self, df):
|
|
"""回测方法 - 子类必须实现此方法"""
|
|
raise NotImplementedError("子类必须实现 run_backtest 方法")
|