IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Backtrader(二十四)- 定时器timer -> 正文阅读

[Python知识库]Backtrader(二十四)- 定时器timer

使用

可以在 init 或者 start 方法中为策略添加定时器

def add_timer(self, when,
                  offset=datetime.timedelta(), repeat=datetime.timedelta(),
                  weekdays=[], weekcarry=False,
                  monthdays=[], monthcarry=True,
                  allow=None,
                  tzdata=None, cheat=False,
                  *args, **kwargs):

例子:

     def __init__(self):
        self.add_timer(
            when=self.p.when,# datetime.time(15, 30)
            offset=self.p.offset,# datetime.timedelta()
            repeat=self.p.repeat,# datetime.timedelta()
            weekdays=self.p.weekdays
        )# [1]

解释:

when

这里when 设为 15:30,weekday=[1],也就是要求每周一触发一次,触发事件为15:30。
如果when设为bt.timer.SESSION_START则为开市时间

offset

如果设置策略 offset=datetime.timedelta(minutes=30),即 相对when偏移30分钟,则触发事件为 16:00

repeat

如果设置参数repeat=datetime.timedelta(minutes=30),则要求定时器每30分钟重复触发一次,如果数据是分钟级数据可以实现,其他数据级别则无效

注意
目前使用PandasData读取的feed。不能在15:30触发,需要使用GenericCSVData。
将pandas数据转换成GenericCSVData 的fedd数据:

def dataframe_to_csv_feed(df, file='cache.csv'):
    '''
    将 AKshare 的dataframe数据转换成csv的 datafeed
    :param df: AKshare 的dataframe数据
    :param file: csv缓存文件
    :return:
    '''
    date_list = df['日期'].to_list()
    begin_date = datetime.datetime.strptime(str(date_list[0]), "%Y-%m-%d %H:%M:%S")  # 数据的起始日期
    end_date = datetime.datetime.strptime(str(date_list[-1]), "%Y-%m-%d %H:%M:%S")  # 数据的起始日期

    df.to_csv(file)

    feed = bt.feeds.GenericCSVData(
        dataname=file,
        datetime=1,  # 日期行所在列
        open=2,  # 开盘价所在列
        high=4,  # 最高价所在列
        low=5,  # 最低价所在列
        close=3,  # 收盘价价所在列
        volume=6,  # 成交量所在列
        openinterest=-1,  # 无未平仓量列
        dtformat=('%Y-%m-%d'),  # 日期格式
        fromdate=begin_date,  # 起始日
        todate=end_date,  # 结束日
        timeframe=bt.TimeFrame.Days,
        compression=1,
        sessionstart=datetime.time(9, 0),
        sessionend=datetime.time(17, 30),
    )
    return feed
关于加载datafeed时 sessionstart、sessionend参数
feed = bt.feeds.PandasData(
        dataname=stock_zh_a_hist_df_daily,
        datetime=0,  # 日期行所在列
        open=1,  # 开盘价所在列
        high=3,  # 最高价所在列
        low=4,  # 最低价所在列
        close=2,  # 收盘价价所在列
        volume=5,  # 成交量所在列
        openinterest=-1,  # 无未平仓量列.(openinterest是期货交易使用的)
        fromdate=begin_date,  # 起始日
        todate=end_date,
        timeframe=bt.TimeFrame.Days,  # 数据粒度
        compression=1,
        sessionstart=datetime.time(9, 0),
        sessionend=datetime.time(17, 30)
    )

它们的含义分别是日线bar的开始时间和bar的结束时间(相当于一天的开市和闭市时间),一根bar的处理过程为一个session。默认情况下,它们的取值为 00:00:00.00000 和 23:59:59.999989。这里设置它们为9:00开始17:30结束。

notify_timer触发时机

当通过add_timer方法添加timer后,这个timer在某日触发notify_timer事件方法。触发规则如下:
1、如果cheat参数=False:

  • 在当前bar的数据已加载完后
  • 在broker已经评估了订单(即 订单该执行的已经执行,该拒绝的已经拒绝了),并重算了组合市值(即 已根据今日收盘价重算了市值)后
  • 在技术指标重算之前(即 此时如果访问当前技术指标值,实际得到的还是上一日的值)
  • 在策略next方法调用之前

2、如果cheat参数=True:

  • 在当前bar的数据已加载完成后
  • 在broker评估订单并重算组合市值前(所以,这时候notify_timer访问当前账户市值实际得到的是昨日市值。在notify_timer发生时,本日该执行的订单还未执行,在notify_timer执行完成后,才会执行)
  • 在技术指标重算之前
  • 在策略next方法调用之前

Tips
在cheat=True时,对日线数据,如下情形是合法的

  • 技术指标还是基于前一日收盘价,可以用于生成进入或退出市场的信号
  • 由于新bar的数据已加载,可以使用开盘价计算买入股份数量
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:41:53  更:2022-02-05 21:42:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:24:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码