Backtrader 文档学习- Plotting - Plotting Date Ranges

Backtrader 文档学习- Plotting - Plotting Date Ranges

1.概述

1.9.31.x版本增加了绘制部分图形的功能。

  • 可以使用策略实例中保留完整长度的时间戳数组的索引
  • 或者使用实际的datetime.date 或datetime.datetime 实例来限制需要绘制的内容。

仍然可以使用标准的cerebro.plot 。例如:

复制代码
cerebro.plot(start=datetime.date(2005, 7, 1), end=datetime.date(2006, 1, 31))

更直接人性化的方法。具有扩展能力,实际上可以尝试使用datetime 时间戳的索引,如下所示:

复制代码
cerebro.plot(start=75, end=185)

下面是一个非常标准的示例,包含一个简单移动平均线(在数据绘制中),一个随机指标(独立绘制)和随机线的交叉点。 cerebro.plot 的参数作为命令行参数传递。

使用日期方法执行:

复制代码
python ./partial-plot.py --plot 'start=datetime.date(2005, 7, 1),end=datetime.date(2006, 1, 31)'

Python中的eval魔法允许直接在命令行中编写datetime.date并将其映射到实际内容。

实话实说,eval好像没有作用,直接报错,没有找到原因,可能还是eval用法的问题:

复制代码
usage: partial-plot.py [-h] [--data0 DATA0] [--fromdate FROMDATE]
                       [--todate TODATE] [--cerebro kwargs] [--broker kwargs]
                       [--sizer kwargs] [--strat kwargs] [--plot [kwargs]]
partial-plot.py: error: unrecognized arguments: 7, 1),end=datetime.date(2006, 1, 31)'

在程序中修改:

复制代码
    if args.plot:  # Plot if requested to
        #cerebro.plot(**eval('dict(' + args.plot + ')'))
        cerebro.plot(start=datetime.date(2005, 7, 1), end=datetime.date(2006, 1, 31))

时间起点是05年7月1日,终点是06年1月31日图示:

按数据的时间范围:

程序修改回来。

复制代码
    if args.plot:  # Plot if requested to
        #cerebro.plot(**eval('dict(' + args.plot + ')'))
        cerebro.plot(start=datetime.date(2005, 7, 1), end=datetime.date(2006, 1, 31))

时间访问是数据的时间范围。

复制代码
python ./partial-plot.py --plot

2.Help

复制代码
$ ./partial-plot.py --help
usage: partial-plot.py [-h] [--data0 DATA0] [--fromdate FROMDATE]
                       [--todate TODATE] [--cerebro kwargs] [--broker kwargs]
                       [--sizer kwargs] [--strat kwargs] [--plot [kwargs]]

Sample for partial plotting

optional arguments:
  -h, --help           show this help message and exit
  --data0 DATA0        Data to read in (default:
                       ../../datas/2005-2006-day-001.txt)
  --fromdate FROMDATE  Date[time] in YYYY-MM-DD[THH:MM:SS] format (default: )
  --todate TODATE      Date[time] in YYYY-MM-DD[THH:MM:SS] format (default: )
  --cerebro kwargs     kwargs in key=value format (default: )
  --broker kwargs      kwargs in key=value format (default: )
  --sizer kwargs       kwargs in key=value format (default: )
  --strat kwargs       kwargs in key=value format (default: )
  --plot [kwargs]      kwargs in key=value format (default: )

3.代码

复制代码
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)


import argparse
import datetime

import backtrader as bt


class St(bt.Strategy):
    params = (
    )

    def __init__(self):
        bt.ind.SMA()
        stoc = bt.ind.Stochastic()
        bt.ind.CrossOver(stoc.lines.percK, stoc.lines.percD)

    def next(self):
        pass


def runstrat(args=None):
    args = parse_args(args)

    cerebro = bt.Cerebro()

    # Data feed kwargs
    kwargs = dict()

    # Parse from/to-date
    dtfmt, tmfmt = '%Y-%m-%d', 'T%H:%M:%S'
    for a, d in ((getattr(args, x), x) for x in ['fromdate', 'todate']):
        if a:
            strpfmt = dtfmt + tmfmt * ('T' in a)
            kwargs[d] = datetime.datetime.strptime(a, strpfmt)

    # Data feed
    data0 = bt.feeds.BacktraderCSVData(dataname=args.data0, **kwargs)
    cerebro.adddata(data0)

    # Broker
    cerebro.broker = bt.brokers.BackBroker(**eval('dict(' + args.broker + ')'))

    # Sizer
    cerebro.addsizer(bt.sizers.FixedSize, **eval('dict(' + args.sizer + ')'))

    # Strategy
    cerebro.addstrategy(St, **eval('dict(' + args.strat + ')'))

    # Execute
    cerebro.run(**eval('dict(' + args.cerebro + ')'))

    if args.plot:  # Plot if requested to
        cerebro.plot(**eval('dict(' + args.plot + ')'))


def parse_args(pargs=None):
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        description=(
            'Sample for partial plotting'
        )
    )

    parser.add_argument('--data0', default='../../datas/2005-2006-day-001.txt',
                        required=False, help='Data to read in')

    # Defaults for dates
    parser.add_argument('--fromdate', required=False, default='',
                        help='Date[time] in YYYY-MM-DD[THH:MM:SS] format')

    parser.add_argument('--todate', required=False, default='',
                        help='Date[time] in YYYY-MM-DD[THH:MM:SS] format')

    parser.add_argument('--cerebro', required=False, default='',
                        metavar='kwargs', help='kwargs in key=value format')

    parser.add_argument('--broker', required=False, default='',
                        metavar='kwargs', help='kwargs in key=value format')

    parser.add_argument('--sizer', required=False, default='',
                        metavar='kwargs', help='kwargs in key=value format')

    parser.add_argument('--strat', required=False, default='',
                        metavar='kwargs', help='kwargs in key=value format')

    parser.add_argument('--plot', required=False, default='',
                        nargs='?', const='{}',
                        metavar='kwargs', help='kwargs in key=value format')

    return parser.parse_args(pargs)


if __name__ == '__main__':
    runstrat()
相关推荐
Engineer邓祥浩5 分钟前
JVM学习问题记录(1) IDEA2025设置JVM启动参数
jvm·学习
qcwl667 分钟前
深入理解Linux进程与内存 学习笔记#3
linux·笔记·学习
-Springer-10 分钟前
STM32 学习 —— 个人学习笔记10-1(I2C 通信协议及 MPU6050 简介 & 软件 I2C 读写 MPU6050)
笔记·stm32·学习
小陈phd16 分钟前
多模态大模型学习笔记(二十二)——大模型微调全解:从全量调参到LoRA的参数高效训练实战
笔记·学习
Engineer邓祥浩18 分钟前
JVM学习笔记(3) 第二部分 自动内存管理 第2章 Java内存区域与内存溢出异常
jvm·笔记·学习
chinalihuanyu34 分钟前
Linux-应用编程学习笔记(十二、GPIO控制)
笔记·学习
nap-joker37 分钟前
【表格+影像】两全其美:多模态对比学习结合表格和成像数据
学习·对比学习·表格+影像·集成梯度可解释性
星雨流星天的笔记本43 分钟前
3.含量子点的三口瓶怎么洗
学习
承渊政道1 小时前
ToClaw是什么?一句话:装在云端的OpenClaw
windows·科技·学习·其他·macos·claw
啊我不会诶1 小时前
Codeforces Round 1083 (Div. 2)vp补题
c++·学习·算法