68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
|
|
# src/strategies/base_strategy.py
|
|||
|
|
|
|||
|
|
from abc import ABC, abstractmethod
|
|||
|
|
from typing import Dict, Any, Optional
|
|||
|
|
|
|||
|
|
# 导入核心数据类
|
|||
|
|
from ..core_data import Bar, Order, Trade
|
|||
|
|
# 导入回测上下文 (注意相对导入路径的变化)
|
|||
|
|
from ..backtest_context import BacktestContext
|
|||
|
|
|
|||
|
|
class Strategy(ABC):
|
|||
|
|
"""
|
|||
|
|
策略抽象基类。所有具体策略都应继承此类,并实现 on_bar 方法。
|
|||
|
|
"""
|
|||
|
|
def __init__(self, context: BacktestContext, **parameters: Any):
|
|||
|
|
"""
|
|||
|
|
初始化策略。
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
context (BacktestContext): 回测上下文对象,用于与模拟器和数据管理器交互。
|
|||
|
|
**parameters (Any): 策略所需的任何自定义参数。
|
|||
|
|
"""
|
|||
|
|
self.context = context
|
|||
|
|
self.parameters = parameters
|
|||
|
|
self.symbol = parameters.get('symbol', "DEFAULT_SYMBOL") # 策略操作的品种
|
|||
|
|
self.trade_volume = parameters.get('trade_volume', 100) # 每次下单的数量
|
|||
|
|
print(f"策略初始化: {self.__class__.__name__},参数: {self.parameters}")
|
|||
|
|
|
|||
|
|
@abstractmethod
|
|||
|
|
def on_bar(self, bar: Bar):
|
|||
|
|
"""
|
|||
|
|
每当接收到新的Bar数据时调用。
|
|||
|
|
具体策略逻辑在此方法中实现。
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
bar (Bar): 当前的Bar数据对象。
|
|||
|
|
features (Dict[str, float]): 由数据处理模块计算并传入的特征字典。
|
|||
|
|
"""
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
def on_init(self):
|
|||
|
|
"""
|
|||
|
|
策略初始化时调用(在回测开始前)。
|
|||
|
|
可用于设置初始状态或打印信息。
|
|||
|
|
"""
|
|||
|
|
print(f"{self.__class__.__name__} 策略初始化回调被调用。")
|
|||
|
|
|
|||
|
|
def on_trade(self, trade: Trade):
|
|||
|
|
"""
|
|||
|
|
当模拟器成功执行一笔交易时调用。
|
|||
|
|
可用于更新策略内部持仓状态或记录交易。
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
trade (Trade): 已完成的交易记录。
|
|||
|
|
"""
|
|||
|
|
# print(f"策略接收到交易: {trade.direction} {trade.volume} {trade.symbol} @ {trade.price:.2f}")
|
|||
|
|
pass # 默认不执行任何操作,具体策略可覆盖
|
|||
|
|
|
|||
|
|
def on_order_status(self, order: Order, status: str):
|
|||
|
|
"""
|
|||
|
|
当订单状态更新时调用 (例如,未成交,已提交等)。
|
|||
|
|
在简易回测中,可能不会频繁使用。
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
order (Order): 相关订单对象。
|
|||
|
|
status (str): 订单状态(例如 "FILLED", "PENDING", "CANCELLED")。
|
|||
|
|
"""
|
|||
|
|
pass # 默认不执行任何操作
|