作者:老余捞鱼
原创不易,转载请标明出处及原作者。

写在前面的话:在读完我上一篇《2024 年面向算法交易者的十大开源 Python 库》后,有读者希望我专门写一篇适合于初学者且易于上手的库。所以今天我来给大家介绍当下最受欢迎的 Python 计算库——Backtrader,并会详细展示如何使用它来实现量化交易策略。
在量化交易的世界里,每一毫秒都可能意味着盈利与亏损的差别,因此拥有合适的工具是必不可少的。就像在其他领域一样,您可以学习许多有用的量化交易库,但如果非要我选择一个在功能强大的基础上、还简单易用的库,那就是 Backtrader。
地址:Backtrader (https://www.backtrader.com/)
其他选择推荐看这篇:《2024 年面向算法交易者的十大开源 Python 库》
如果您是一名从事算法交易的 Python 开发人员,那么 Backtrader 绝对是您 2024 年的关注重点,因为它仍然是专为该领域设计的使用率最高的库。在本文中,我们将深入探讨是什么让 Backtrader 成为如此不可或缺的工具,你可以如何利用它来增强你的交易策略,并通过一个带有 Python 代码的实际示例来帮助你入门。
现在,让我们来看一个实际例子,看看我们能用这个工具做些什么。
一、数据准备
让我们从雅虎财经获取一些苹果股票的每日数据,用于本例:

就像你看到的,我们把数据帧存在 data_feed 里,这是 Backtracker 用的数据对象,能存好多来源的数据。
二、确定战略
为了演示 Backtrader 的功能,我们将实施一个非常简单的基于动量的交易策略。动量交易策略深受量化交易者的欢迎,因为它们旨在利用市场现有趋势的持续性。其理念是在资产价格上涨时买入,在价格下跌时卖出,预期趋势会朝同一方向继续发展。
动量交易策略(Momentum Trading Strategy)是一种在金融市场,特别是股票、期货以及差价合约(CFD)等交易市场中广泛应用的投资策略。该策略的核心思想是基于资产价格变动的速度(即动量)来决定买入或卖出的时机,从而追求利润最大化。
三、战略执行
战略将遵循这些规则:
- Buy Signal(买入信号):如果某项资产的收盘价在一分钟内下跌超过了规定的阈值,我们就会生成买入信号。
- Sell Signal: (卖出信号):如果收盘价涨幅超过临界值,我们就会发出卖出信号。
- Position Management: (仓位管理):我们将保持仓位,直到产生相反信号或数据集结束。
我们可以用 Backtracker 这样做:
class MomentumStrategy(bt.Strategy):
params = (
('threshold', 0.001), # Threshold for generating buy/sell signals
('size', 10), # Number of shares to trade
)
def __init__(self):
self.data_close = self.data.close # We will operate based on close prices
self.portfolio_values = [] # List to store portfolio values
def next(self):
# Append current portfolio value to the list
self.portfolio_values.append(self.broker.getvalue())
if not self.position: # Not in the market
if self.data_close[-1] < self.data_close[-2] * (1 - self.params.threshold):
self.buy(size=self.params.size)
else: # In the market
if self.data_close[-1] > self.data_close[-2] * (1 + self.params.threshold):
self.sell(size=self.params.size)
请注意,我将结果存储在投资组合值列表中,这样就能在运行策略后轻松访问迭代的每一步。
四、运行回溯测试
现在让我们实际运行回溯测试,由于 Backtracker 引擎 Cerebro 提供了高度抽象化的功能,这一切都变得超级简单。
看看下面这个:
# Initialize Cerebro (the Backtrader engine)
cerebro = bt.Cerebro()
# Add the strategy
cerebro.addstrategy(MomentumStrategy)
# Add the data feed
cerebro.adddata(data_feed)
# Set the initial cash
cerebro.broker.setcash(10000)
# Run the backtest
results = cerebro.run()
## Plot the results
cerebro.plot()
运行测试超级简单快捷。这将返回以下图表:

Backtracker 默认显示投资组合的每日总变化、已执行的交易以及每笔交易的正负结果。
如果你想获取结果,正如我之前告诉过你的,我们可以直接进入我们的列表获取结果:
# Get the portfolio values from the strategy
portfolio_values = results[0].portfolio_values
# Print the portfolio values
for idx, value in enumerate(portfolio_values):
print(f"Step {idx + 1}: Portfolio Value: {value:.2f}")
这将返回每一步的投资组合值:

让我们快速回顾一下《准则》:
- Strategy Class(策略类):我们定义了一个 MomentumStrategy 类,该类继承于 bt.Strategy。该类包含我们交易策略的逻辑。
- Threshold Parameter(阈值参数):我们使用阈值参数来确定一分钟内价格需要变动多少才能生成买入或卖出信号。
- Position Management(仓位管理):next() 方法包含核心逻辑。如果我们尚未建仓,我们就会寻找买入机会。如果已经建仓,则寻找卖出信号。
- Data Feed(数据反馈):我们从 CSV 文件加载数据,并将其转换为 Backtrader 可以使用的格式。
- Cerebro Engine(Cerebro 引擎):Backtrader 使用名为 Cerebro 的引擎来运行回溯测试。我们初始化该引擎,添加我们的策略和数据源,并设置初始资金。
- Plotting(绘图):运行回溯测试后,我们将绘制结果图,以直观显示策略的性能。
五、观点回顾
如您所见,利用 Backtrader 进行回溯测试,要比自行编写回溯测试代码来得更快更简单。此程序设计得既强大又直观,为您提供了一个能模拟交易构想的平台,可设定初始现金与经纪人费用。Backtrader 具备丰富的功能,涵盖内置指标、支持多种数据源以及优化策略的能力,已然成为众多量化金融界人士的首选库。
- Backtrader 的重要性:在量化交易中,Backtrader 作为一个强大且易于使用的工具,对于实现交易策略至关重要。
- 易用性和强大功能:Backtrader 提供了高度抽象化的接口,简化了回溯测试的过程,同时拥有丰富的内置指标和多数据源支持。
- 从回溯测试到实时交易:Backtrader 可以无缝集成与经纪商,使得从回溯测试到实时交易的过程变得更加顺畅,减少了出错的可能性。
- 策略实施和优化:文章通过示例策略,展示了如何定义和优化交易策略,以及如何通过回溯测试来评估策略的有效性。
- 量化交易社区的首选:Backtrader 因其独特的功能和易用性,已经成为量化交易社区中许多专业人士的首选库。
感谢您阅读到最后。如果对文中的内容有任何疑问,请给我留言,必复。
本文内容仅仅是技术探讨和学习,并不构成任何投资建议。
转发请注明原作者和出处。
Be First to Comment