通常我们在回测时使用的是单一频率的数据,比如:日线、分钟线等。有些策略是需要结合多个周期的数据进行决策的。这个时候应该怎么办呢。

其实backtrader本身就支持多周期回测,在通常情况下,最简单的方式就是同时提供多个维度的数据源,backtrader会选择最先提供给它的数据源的时间周期作为策略执行的时间周期。

比如我有1分钟线和日线,想实现这样的一个日内择时的策略:若当前分钟线的收盘价小于前一天的日线最低价则买入,若当前分钟线的收盘价大于前一天的最高价则卖出,怎么做呢?

可以这样,把1分钟线和日线都添加到cerebro中,然后策略启动后,每次执行next方法时self.datas都会调用下一根分钟线和分钟线所在日期的日线,这样在next方法中只用考虑当前分钟线和前一天日线就可以了。

下面是具体的代码,用的恒生科技ETF2024年3月份的数据:
main.py

阅读全文 »

在使用backtrader内置的plot功能绘图时,如果想在图上显示中文,比如想显示股票代码所对应的中文名时,会发现,画出来的图不支持中文,中文部分都是一个个的豆腐块。
08e6120dddae832d66bf8190bbe3ca7f.png

这样在查看时会很不方便,那怎么才能解决这个问题呢。

backtrader是通过matplotlib这个库实现绘图功能的,而这个库对中文的支持不好,缺少中文字体。在网上搜了一番后,我发现可以通过 mplfonts 这个库实现对中文的支持。

首先是安装:

1
pip install mplfonts
阅读全文 »

在backtrader,如果想画出回测结果,可以用cerebro.plot(),但是如果只想保存结果图片不显示怎么做呢,backtrader中并没有直接提供保存图片的方法。

经过摸索,我找到了不显示图片保存回测结果图片的方法。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'''
保存策略的图表
参数:
- strat: 需要绘制图表的策略对象。
- plotter: 绘图器对象,如果未提供,则使用默认的plot.Plot_OldSync。
- numfigs: 要绘制的图表数量。
- iplot: 是否使用交互式绘图。
- start: 图表的起始日期。
- end: 图表的结束日期。
- width: 图表的宽度。
- height: 图表的高度。
- dpi: 图表的分辨率。
- tight: 是否使用紧凑的布局。
- use: 指定使用的数据。
- filename: 保存的文件名前缀。
- **kwargs: 传递给绘图器的额外参数。

返回值:

'''
def saveImg(strat, plotter=None, numfigs=1, iplot=True, start=None, end=None,
width=16, height=9, dpi=300, tight=True, use=None,filename='',
**kwargs):
# 如果未提供plotter,创建默认的绘图器对象
if not plotter:
from backtrader import plot
plotter = plot.Plot_OldSync(**kwargs)
# 绘制图表并获取第一个图表的引用
rfig = plotter.plot(strat, figid=0 * 100,
numfigs=numfigs, iplot=iplot,
start=start, end=end, use=use)
# 保存图表为PNG文件
plotter.savefig(rfig[0],filename+'.png')

使用时,在主函数中可以这样写:

阅读全文 »

在backtrader中默认的图表画的是折线图,成交量直接画在主图中,如果把折线图改成蜡烛图,会有一部分k线与成交量重合,不方便我们观察。

默认的折线图:
Snipaste_2024-04-06_20-38-22.png

直接改成蜡烛图:

Snipaste_2024-04-06_20-45-38.png

那怎么才能把成交量从主图中分离出来,单独画在副图中呢,我在网上搜了半天,没有找到方法,最后想着看看源码吧,源码上会有处理方法。

阅读全文 »

前几天看《量价分析》的时候,书里介绍了一个动态画趋势线的方法 链接:。。。。

其中里面介绍了画趋势线依赖的高位支点和低位支点的概念(如下图)。我就想着用backtrader实现这种蜡烛图形态指标,在一番试验后终于搞定了。

20240329-231520.jpeg

指标代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import backtrader as bt

class Pivot(bt.Indicator):
lines = ('high_pivot','low_pivot')

plotlines = dict(
high_pivot=dict(color='green', ls='',marker='d',markersize='7.0'),
low_pivot=dict(color='red', ls='',marker='d',markersize='7.0')
)

# 设置画在主图上
plotinfo = dict()
plotinfo['subplot'] = False
plotinfo['plotlinelabels'] = True

def __init__(self):
super(Pivot, self).__init__()
linehigh = bt.If(bt.And(bt.And(
self.data.high(-1)>self.data.high(-2),self.data.high(-1)>self.data.high(0)),
bt.And(self.data.low(-1)>self.data.low(-2),self.data.low(-1)>self.data.low(0))
),self.data.high(-1)*1.01,-100)
# 因为支点是三根k线中间的那条线,所以要往前挪一位
self.l.high_pivot=linehigh(1)

linelow = bt.If(bt.And(bt.And(
self.data.high(-1)<self.data.high(-2),self.data.high(-1)<self.data.high(0)),
bt.And(self.data.low(-1)<self.data.low(-2),self.data.low(-1)<self.data.low(0))
),self.data.high(-1)*1.01,-100)
self.l.low_pivot=linelow(1)
阅读全文 »

前几天看《量价分析》这本书时,在第九章看到了能够很方便找出支撑位和阻力位的价量分布图,然后在网上一通搜索,发现只有 tradingview 提供这个指标 volume profile (成交量分布图),但是这个指标是收费会员才能用的,虽然在 tradingview 的 charting-library 的示例网站(https://charting-library.tradingview-widget.com/)上可以使用这个指标,但用起来有限制,也很不方便。

在网上一番搜索后,发现 Pandas TA 这个库支持计算成交量分布图。今天这篇文章就来讲一下 Pandas TA 这个库的安装使用吧。

介绍

Pandas Technical Analysis (Pandas TA) 是一个易于使用的库,它利用 Pandas 包提供超过 130 个指标和实用程序函数以及超过 60 个 TA Lib 蜡烛图形态。

它包含了许多常用指标,例如:

阅读全文 »

定义

成交量分布图是一种高级图表指标,它显示指定时间段内指定价格水平的交易活动。该指标考虑了用户定义的参数,例如行数和时间段,并在图表上绘制直方图,旨在根据成交量显示主导和/或重要的价格水平。本质上,成交量分布图采用指定时间段内特定价格水平的总成交量,并将总成交量分为上涨成交量(价格上涨的交易)或下跌成交量(价格下跌的交易),然后使交易者可以轻松查看该信息。

计算算法

成交量分布图指标是使用来自较低时间周期的相同交易品种的数据计算的。例如,要计算一个每日交易时段的成交量概况,我们加载该交易时段中所有 100 万根K线,分析它们交易的价格水平和价格移动的方向——如果K线收盘价高于或等于其开盘价,这算作上涨K线图,否则它是下跌K线图。分析完成后,此数据将添加到成交量分布图直方图中。

用于决定应使用哪个较低时间范围进行计算的特定逻辑因指标而异。

阅读全文 »

常见的估值指标

要判断估值高低,就要学会使用估值指标,常见的估值指标为“市盈率”、“市净率”、“市销率”和“市净率”。面对不同的行业,常使用不同的估值指标:

1) 市盈率:适用于利润较为稳定的行业,如消费类

市盈率(PE-TTM) = 指定交易日个股总市值/ 归母净利润TTM

TTM是
Trailing Twelve Months
的缩写,即最近12个月或最近4个财季。TTM常用于财务报表分析,通过以最近的12个月作为一个周期来进行分析、比较,从而得出一种趋势。在国内,TTM经常被狭义定义为市盈率TTM,又称为滚动市盈率,它衡量的是在一定考察期(一般是连续12个月/4个财季)内的市盈率。TTM市盈率是股票投资和财务分析中的专业术语,用于评估股价高低和企业盈利能力。TTM的引入有助于剔除财务分析上的季节性变化,使分析更加严谨和符合逻辑。

阅读全文 »

我最常交易的就是ETF了,在看股票软件行情的时候总能看到一条紫色的线,它的术语是IOPV(基金份额参考净值)今天就来了解一下这条线是什么吧。

1)什么是IOPV

IOPV全称为基金份额参考净值,是由交易所计算的ETF实时单位净值的近似值,以便于投资者估计ETF交易价格是否偏离了内在价值。

2)IOPV和最新价的区别

最新价为场内价格,是该ETF在二级市场交易的买卖价格,IOPV是这只ETF在一级市场的报价,即为ETF的净值。

阅读全文 »
0%