量化交易-Backtrader回测

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

目录

一、基础篇-backtrader简介

二、backtrader回测应用实例

三、backtrader数据全解析

3.1 数据中必须包含

3.2 一切皆是数据源 

3.3 参数

3.4 Lines线群

四、交易篇 (上)

4.1 交易操作方式

4.2 资金管理

4.3 滑点管理

4.4 手续费

4.5 交易时机

五、交易篇(下)



一、基础篇-backtrader简介

如果将backtrader包分解为核心组件,主要包括以下组成部分:

  1. 数据加载(Data Feed):将交易策略的数据加载到回测框架中。
  2. 交易策略(Strategy):该模块是编程过程中最复杂的部分,需要设计交易决策,得出买入/卖出信号。
  3. 回测框架设置(Cerebro):需要设置,初始资金、佣金、数据馈送、交易策略、交易头寸大小。
  4. 运行回测:运行Crebro回测并打印出所有已执行的交易。
  5. 评估性能(Analyzers):以图形和风险收益等指标交易策略的回测结果进行评价。

"Lines"是backtrader回测的数据:

Open(开盘价),High(最高价),Low(最低价),Close(收盘价),Volume(成交量),OpenInterest(无得话设置为0)。

DataFeeds(数据加载)、Indicators(技术指标)和Strategies(策略)都会生成Lines.

价格数据中的所有“Open”(开盘价)按时间组成一条Line。所以,一组含有以上6个类别的价格数据,共6条Lines。如果算上“DataTime”(时间,可以看做是一组数据的主建),一共有7条Lines。

当访问一条Line的数据时,会默认向下标为0的数据。最后一个数据通过下标-1来访问,在-1之后是索引0,用于访问当前时刻。因此,在回测过程中,无需知道已经处理了多少条/分钟/天/月。“0”一直指向当前值,下标-1来访问最后一个值。

二、backtrader回测应用实例

代码如下(示例):

import pandas as pd
from datetime import datetime
import backtrader as bt
import matplotlib.pyplot as plt
import tushare as ts

def get_data(code='600519',starttime='2017-01-01',endtime='2020-01-01'):
    df = ts.get_k_data(code,start = starttime,end = endtime)
    print(df)
    df.index = pd.to_datetime(df.date)
    df['openinterest'] = 0;
    df = df[['open','high','low','close','volume','openinterest']]
    return df

stock_df =get_data()
fromdate = datetime(2017,1,1)
todate = datetime(2020,1,1)
data = bt.feeds.PandasData(dataname=stock_df,fromdate=fromdate,todate=todate)

class MyStrategy(bt.Strategy):
    params=(
        ('maperiod',20),
    )
    
    def __init__(self):
        self.order = None
        self.ma = bt.indicators.SimpleMovingAverage(self.datas[0],period=self.params.maperiod)
    def next(self):
        if(self.order):
            return
        if(not self.position):
            if self.datas[0].close[0] > self.ma[0]:
                self.order = self.buy (size=200)
            else:
                if self.datas[0].close[0] < self.ma[0]:
                    self.order = self.sell(size=200)

cerebro = bt.Cerebro()
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy)
startcash = 100000
cerebro.broker.setcash(startcash)
cerebro.broker.setcommission(0.0002)

s = fromdate.strftime("%Y-%m-%d")
t = todate.strftime("%Y-%m-%d")
print(f"初始资金:{startcash}\n回测时间:{s}-{t}")
cerebro.run()
portval = cerebro.broker.getvalue()
print(f"剩余总资金:{portval}\n回测时间:{s}-{t}")

三、backtrader数据全解析

3.1 数据中必须包含

交易数据(Data Feeds)必须包含以下几个组成部分:开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、成交量(Volume)、持仓量(0penInterest)等。比如:所有的开盘价(Open)按时间组成一条折线(Line),那么一组交易数据(Data Feeds)就应该包含了6条线(Line)。

3.2 一切皆是数据源 

import backtrader as bt
# snip
class MyStrategy(bt.Strategy):
	params = dict(period1=20,period2=25,period3=10,period4=5)

	def __init__(self):
		sma1 = btind.SimpleMovingAverage(self.datas[0],period=self.p.period1)

		# 第二移动平均线使用sma1作为参数,均线的均线
		sma2 = btind.SimpleMovingAverage(sma1,period=self.p.period2)

		# 通过算数运算常见的新数据
		something = sma2-sma1+self.data.close
# snip

3.3 参数

import backtrader as bt
# snip
class MyStrategy(bt.Strategy):
	# 元组
	params = (('period',20),)
	# 字典
	params = dict(period=20)
	# 访问
	def __init__(self):
		self.params.period
		self.p.period
# snip

3.4 Lines线群

  • Lines(线群)对象可以容纳一个或多个线,可以通过data.lines.getlinealiases()查看
  • 线是由一组数据组成的数组
closelowhighopenvolumedatetime
默认索引[0][1][2][3][4][5]
linelinelinelinelineline
import backtrader as bt
# snip
class MyStrategy(bt.Strategy):
	params = dict(period=20)
	
	def __init__(self):
		self.movav = btind.SimpleMovingAverage(self.data,period=self.p.period)

	def next(self):
		if self.movav.lines.SMA[0] > self.data.lines.close[0]:
			print('移动平均线大于收盘价')
# snip

主要用法:

# snip
def next(self):
	# 都表示添加的第一个数据集
	self.data
	self.data0
	self.datas[0]
	# 都表示close的那条链条
	self.data.lines[0]
	self.data.lines.close
	self.data.close
# snip

四、交易篇 (上)

4.1 交易操作方式

调用broker中的“set_xxx”方法俩修改条件,还可以通过“get_xxx”方法查看当前设置的条件取值

4.2 资金管理

import backtrader as bt
# snip
cerebro = bt.Cerebro()
# 设置初始资金
# set_cash\setcash
cerebro.broker.set_cash(1000)
# 获取可用资金
# get_cash\getcash\getvalue
cerebro.broker.get_cash()
# 增加或减少资金
cerebro.broker.add_cash(1000)
cerebro.broker.add_cash(-1000)
# snip

4.3 滑点管理

import backtrader as bt
# snip
cerebro = bt.Cerebro()
# 方式1:通过BackBroker类中的slip_perc参数设置百分比滑点
cerebro.broker = bt.brokers.BackBroker(slip_perc=0.0001)
# 方式2:通过调用brokers的set_slippage_perc方法设置百分比滑点
cerebro.broker.set_slippage_perc(perc=0.0001)
# snip

4.4 手续费

import backtrader as bt
# snip
cerebro = bt.Cerebro()
# 手续费万分之二
cerebro.broker = bt.brokers.BackBroker(commission=0.0002)
# snip

4.5 交易时机

Backtrader还提供了一些cheating式的交易时机模式:Cheat-On-Open和Cheat-On-Close。

Backtrade默认是“当日收盘后下单,次日开盘价成交”,这种模式在回测过程中能有效避免使用未来数据。

Cheat-On-Open是“当日下单,当日以开盘价成交”模式

  • 方式1:bt.Cerebro(cheat_on_open=True)
  • 方式2:cerebro.broker_set_coo(True)
  • 方式3:BackBroker(coo=True)

Cheat-On-Close是“当日下单,当日以收盘价成交”模式

  • 方式:cerebro.broker_set_coc(True) 

五、交易篇(下)

import backtrader as bt
# snip
class TestStrategy(bt.Strategy):
	def next(self):
		# 买入,做多 long
		self.order = self.buy(...)
		# 卖出,做空 short
		self.order = self.sell(...)
		# 平仓 cover
		self.order = self.close(...)
# snip
  • data (默认:None):用于制定给哪个数据集(即哪个证券)创建订单,默认为None,表示给第1个数据集(self.datas[0]、self.data0对应的证券)创建订单。
  • size(默认:None):订单委托数量(正数),默认为None,表示会自动通过getsizer获取sizer。
  • price(默认:None):订单委托价,None表示不指定具体的委托价,而是由市场决定最终的成交价。
import backtrader as bt
# snip
class TestStrategy(bt.Strategy):
	def next(self):
		# 按目标数量下单
		self.order = self.order_target_size(target=size)
		# 按目标金额下单
		self.order = self.order_target_value(target=value)
		# 按目标百分比下单
		self.order = self.order_target_percent(target=percent)
# snip

量化投资之工具篇一:Backtrader从入门到精通(1)-手把手教你零基础实现一个策略案例 Backtrader是重要的量化框架,本文记录学习该框架的笔记,内容主要基于Backtrader的网站指导文档。虽然该框架目前用于量化投资领域,但是可以作为数据处理的基本架构,进行改造后用于各种数据的处理,尤其适用于对原始数据处理完成后应用一定的策略进行预以及可视化处理。 1、简介 Backtrader的特点,就是两点: 1、易于使用; 2、参见第1条。 那么如何使用Backtrader呢?比把大象装进冰箱复杂点,一共4步: 创建一个Cerebro引擎: 加入一个Strategy... 阅读详情

相关推荐

Backtrader 文档学习- 整体架构功能分析理解

backtrader是一个用于开发和执行交易策略的Python框架。它提供了一套完整的工具和功能,使得用户可以方便地进行策略、实盘交易以及数据分析。backtrader的入口为Cerebro类,该类将所有输入(Data Feeds)、策略 (Strategy)、观察者(Observers)、策略评估(Analyzers) 、经纪人(Broker)、订单(Order)、交易(Trade)和日志记录(Writers)整合起来,实现以及交易,并返结果和图表。

六月闻君 6307

backtrader参考手册.pdf

一个功能丰富的Python试和交易框架。backtrader能够让策略研究员专注于编写可重用的交易策略、指标和分析器,而不是花时间构建基础设施。

Backtrader官方中文文档:第三章Quickstart Guide快速入门

官方快速尝鲜章节:https://backtrader.com/docu/quickstart/quickstart/

汇渊科技 8042

backtrader程序介绍-策略用法

backtrader的策略初尝 前言 backtrader作为能够在自己的python环境运行的程序之一,不得不说很好用。今天进行了初步的学习,稍微进行分享。 一、基础步骤 应用backtrader进行,首先需要了解backtrader的基础步骤 # 基础步骤 from __future__ import print_function, absolute_import import backtrader as bt if __name__== '__main__': cerebro

xiaowu1997的博客 5852

Backtrader快速入门——1. QuickStart

1. backtrader介绍 1.1 基本情况 参考文档 backtrader官方文档(英文):https://www.backtrader.com/docu/ backtrader中文文档(非官方):http://backtrader.com.cn/docu/#1 backtrader框架介绍 官方定义: backtrader是一个用于交易的功能丰富的框架,可以让你专注于写可用的交易策略,指标和分析器,而不会花费时间在构建基础架构上 1.2 安装 安装的话还是直接去github上面看最新的

啷个哩个啷 1万+

‌Python 量化交易Backtrader 策略

创建一个策略类,继承自。

2501_93894805的博客 2541

股票量化交易进阶001_框架backtrader(一)

股票量化交易进阶001_框架backtrader(一) 文章目录股票量化交易进阶001_框架backtrader(一)前言一、backtrader是什么?二、backtrader的构造三、开始使用backtrader总结 前言 做量化交易有三个重要环节: 第一、数据源 有关数据源部分可以了解我之前一个专栏:python股票量化交易入门 第二、数据 第三、实盘交易 其中数据,目前市面上有一些三方平台,以聚宽、优矿、米筐这3个最常见,这3个平台都是Python API的结构,并且有完善的

Johnny2004的专栏 1361

量化框架-backtrader-交易框架

以下以SMA策略为例子来说明Backtrader-BT交易框架 from datetime import datetime import backtrader import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') def Function_For_Build_SmaCross_Strategy_Object(short

QuantHero的博客 1393

Backtrader 入门教程:Python 量化交易框架

Backtrader 是一个功能强大的量化交易框架,适合用来进行策略、优化和实盘交易。通过灵活的策略定义和丰富的数据源支持,Backtrader 能够帮助交易者实现复杂的量化策略。希望本文能够帮助你快速入门并开始构建自己的量化交易策略。这篇博客内容全面、结构清晰,适合量化交易初学者阅读。希望你在学习和实践中能够逐步掌握 Backtrader 的使用,提升量化交易的能力!

qq_34068440的博客 4656

BackTrader量化交易图解》第9章:结果分析

由图可以看出, analyzer.Analyzer子模块是所有分析模块的基础, 定义了量化分析主要的类函数。变量用于保存分析数据,该变量本身是复合字典格式,提取的各组分析数据都是标准的 dict 字典格式,各组分析数据的返值也都是 dict 字典格式,可方便大家提取使用。比较专业的Analyzer分析类指标, 只在进行一些特殊分析的时候才需要使用, 本节讲解比较简单的量化分析案例, 介绍量化分析的基本操作, 仅使用到一些常用的量化分析指标, 如Sharp、 MaxDown等。

C与Python实战 4378

Backtrader终极指南:快速掌握Python量化交易框架

想要进入量化交易领域却不知从何开始?Backtrader作为Python生态中最强大的开源框架,能够帮助您快速验证交易策略的有效性。本文将为您提供完整的Backtrader安装配置指南,让您在短时间内搭建起专业的量化交易环境。 ## 为什么选择Backtrader进行量化交易Backtrader是一个功能丰富的Python库,专为交易策略的开发和试而设计。它支持多种数据格

gitblog_00110的博客 953

基于backtrader量化交易实战演示

backtrader 是一个高度模块化、功能丰富的 Python 框架,专为量化交易策略的开发和验证而设计。其核心优势在于清晰的模块划分和良好的可扩展性,使得开发者可以专注于策略逻辑的编写,而不必过多关注底层的数据处理与执行流程。本章将深入解析 backtrader 的三大核心模块:数据喂入机制、策略模块的结构与编写规范,以及 Cerebro 引擎的集成与使用技巧。

weixin_42596214的博客 1109

5步掌握Backtrader:从零开始的量化交易框架指南

🚀 想要在金融市场中验证你的交易策略?Backtrader作为一款强大的Python框架,能够帮助你进行专业的量化交易策略试和金融数据分析。本文将为初学者提供完整的安装配置指南,让你快速上手这个备受推崇的交易策略试工具。 ## 📋 准备工作:系统环境检查 在开始安装Backtrader之前,请确保你的系统满足以下基本要求: - **Python版本**:3.2或更高版本 - **

gitblog_00030的博客 1409

股票量化交易进阶 - 使用框架backtrader

通过使用backtrader,我们可以方便地进行策略开发、和优化,并评估我们的投资策略的表现。backtrader是一个功能强大且灵活的Python框架,它提供了丰富的工具和功能,可以让我们轻松地进行策略开发、和优化。而框架是量化交易中不可或缺的工具之一,它可以帮助我们模拟历史行情并评估我们的投资策略的表现。在本文中,我们将介绍一种常用的框架backtrader,并展示如何使用它来开发和试自己的股票量化交易策略。在这个策略类中,我们可以定义我们的交易逻辑和信号生成规则。

NisyPhilosophy的博客 425

从 0 到 1 开发 Python 量化交易系统:用 Tushare 获取数据 + Backtrader 策略

本文搭建的系统覆盖了量化交易的核心环节 —— 从数据获取到策略,适合新手入门。盈利不代表实盘盈利:基于历史数据,实盘会受滑点、手续费、行情延迟等影响,需谨慎对待。先小资金实践:若要对接实盘,建议先使用模拟盘或小资金(如 1 万元)试,验证策略在实盘环境中的稳定性。最后,量化交易的核心是 “逻辑 + 数据 + 纪律”,基础系统只是工具,后续需不断迭代策略、验证逻辑,才能逐步提升系统的可靠性。为了方便你直接上手试,我可以帮你整理一份完整的代码文件。

2501_93876446的博客 2507

【手把手教你】用backtrader量化海龟交易策略

01引言海龟交易策略是比较经典的趋势交易系统之一,涵盖了从入场交易(品种选择)、仓位管理(基于ATR加减仓)、离场(触发条件)的整个过程。机械套用海龟交易法则在A股上进行交易可能效果不佳...

Python金融量化 1万+

python外汇交易_Python进阶量化交易专栏场外篇29-听说有个框架叫backtrader...

欢迎大家订阅《教你用 Python 进阶量化交易》专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下:为了将专栏中分散的知识点贯穿起来,笔者在专栏的末尾小节《制作自己的量化交易工具》中分享了早期制作的一个简易版量化交易小工具,希望大家能够通过调试代码的方式掌握相关的知识。目前在场外篇第9篇中已经移植到了Python3....

weixin_39743064的博客 679

Backtrader入门指南:Python量化交易框架快速上手

想要学习Python量化交易Backtrader绝对是你的最佳选择!🚀 这个功能强大的开源框架让交易策略开发和试变得简单高效。无论你是量化交易新手还是有经验的开发者,这份完整指南将帮助你快速掌握Backtrader的核心功能和使用技巧。 ## 什么是BacktraderBacktrader是一个纯Python编写的量化交易框架,专为交易策略开发和试而设计。它提供了完整的

gitblog_01122的博客 674

Python量化框架Backtrader:如何5分钟验证一个交易策略?

朋友发来一个双均线策略,说"这策略很厉害",你会怎么验证?自己写循环去跑历史价格,得花好几天才能把佣金、仓位这些细节补齐。而 Backtrader 这个 Python 框架,就是帮你把交易策略放进多年历史K线里跑一遍、并把沿途的持仓和盈亏如实记下来的量化工具。 ## Backtrader适合谁用 - 你有一个交易想法,想先用历史数据检验再考虑是否投入实盘 - 你希望一次对比多组参数,而

gitblog_00807的博客 703
linxiarain
博客等级 码龄17年 506粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值