范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python量化交易学习笔记(57)backtrader的一些基本概念5

  本文继续记录bt相关的概念内容。启动和运行
  bt的启动和运行至少涉及3个Line对象:Data feedStrategy(实际上是Strategy的子类)Cerebro(西班牙语中的大脑)
  Data Feed
  Data feed提供了用于回测的数据,bt支持下列几种data feed:读取CSV格式文件在线获取Yahoo数据获取Pandas Dataframe或者blaze数据Interacive Brokers、Visual Chart和Oanda的实时数据
  在data feed中,没有数据周期、压缩率等信息,而在有些场景下是需要用到这些信息的,比如想把5分钟级的数据,通过Data Feed Resampling构造日线数据,这时就需要将数据名称、周期、压缩率等信息告知bt,来完成新数据的构造。
  下面的例子展示读取Yahoo CSV Data Feed的方式:import backtrader as bt import backtrader.feeds as btfeeds ... datapath = "path/to/your/yahoo/data.csv" data = btfeeds.YahooFinanceCSVData(     dataname=datapath,     reversed=True)
  其中参数reversed被设置为True,这是由于从Yahoo下载的CSV格式的数据,默认是按时间倒序排列的,也就是最新的数据在最前面,而在回测或者实盘时,我们往往希望数据时间的先后顺序升序排列,所以这里对数据进行了反转,对A股而言,国内大部分数据数据源下载后是不需要反转的。
  如果只需要部分时间范围内的数据,则可以按下面方式处理:data = btfeeds.YahooFinanceCSVData(     dataname=datapath,     reversed=True     fromdate=datetime.datetime(2014, 1, 1),     todate=datetime.datetime(2014, 12, 31))
  这里使用参数fromdate和todate来约束待处理数据的时间范围。
  上面提到的时间周期(timeframe),压缩率(compression),数据名称(name)也可以通过传入参数进行添加,在后续绘图时,也会用到这些信息:data = btfeeds.YahooFinanceCSVData(     dataname=datapath,     reversed=True     fromdate=datetime.datetime(2014, 1, 1),     todate=datetime.datetime(2014, 12, 31)     timeframe=bt.TimeFrame.Days,     compression=1,     name="Yahoo"    )
  Strategy
  使用bt进行回测的核心逻辑都是在Strategy的子类中完成的,其中至少两个函数需要被重写:__init__ 初始化阶段,技术指标的计算和一些准备工作都在这里进行next 具体的策略逻辑在这里实现,每个周期都会被调用一次,用于处理当前时刻的K线
  有两类需要注意情况:-如果data feed的时间周期(timeframe)不同,比如同时使用日线和周线,next函数会按主数据(即第一个被添加的数据)的数目进行调用,因此多周期数据操作时,需要先将小周期(例如日线和周线数据中的日线数据)的数据添加到系统中。如果Data Replay功能被使用,那么会出现在同一根K线上调用多次next的情况。
  一个最基础的Strategy子类示例如下:class MyStrategy(bt.Strategy):     def __init__(self):         self.sma = btind.SimpleMovingAverage(self.data, period=20)     def next(self):         if self.sma > self.data.close:             self.buy()         elif self.sma < self.data.close:             self.sell()
  Strategy还提供一些其他可重写的函数,示例如下:class MyStrategy(bt.Strategy):     def __init__(self):         self.sma = btind.SimpleMovingAverage(self.data, period=20)     def next(self):         if self.sma > self.data.close:             submitted_order = self.buy()         elif self.sma < self.data.close:             submitted_order = self.sell()     def start(self):         print("Backtesting is about to start")     def stop(self):         print("Backtesting is finished")     def notify_order(self, order):         print("An order new/changed/executed/canceled has been received")start 回测即将开始时被调用stop 回测结束时被调用notify_order 当有订单被提交、执行、取消、改变时被调用。当在Strategy中使用buy/sell提交订单后,会返回订单的引用;当订单状态有变化时就会通过notify_order告知Strategy,这样就可以通过判断订单的状态来实现避免重复下单等逻辑。
  Strategy中的一些其他函数功能:buy/sell/close 使用隐含的broker和sizer提交买单或者卖单,close是平仓操作。getposition(或者使用position属性)返回当前的持仓状态setsizer/getsizer(或者使用sizer属性)用于设置默认的交易数据
  像其他Line对象一样,Strategy支持参数设置功能,示例如下:class MyStrategy(bt.Strategy):     params = (("period", 20),)     def __init__(self):         self.sma = btind.SimpleMovingAverage(self.data, period=self.params.period)     ...
  这里定义的均线周期就不是固定值20了,而使用的是参数period。
  如果不想通过子类化Strategy来,也可以使用bt的signal机制,这个后面会介绍。
  Cerebro
  Cerebro负责将Data feed和Strategy组织起来并进行回测,实例化cerebro的代码如下:cerebro = bt.Cerebro()
  这里所有参数都使用默认值,实现了以下效果:创建一个默认的broker交易佣金为0Data feed被预加载默认使用runonce系列操作,来提升计算速度。bt内置的指标都支持runonce模式,用户自定义的指标无须重新实现runonce系列函数,cerebro会进行模拟实现,但是执行速度会比实现了runonce系列函数的指标慢一些。
  Cerebro创建后,就可以将Data feed和Strategy组织在一起,就开始执行了,示例如下:cerebro.adddata(data) cerebro.addstrategy(MyStrategy, period=25) cerebro.run()
  在上面的代码中,一个Data feed的实例首先被添加到cerebro中,然后一个Strategy的子类MyStrategy和与其相关联的关键词参数被添加,cerebro会用收到的参数在后台创建MyStrategy的实例。
  用户可添加的Strategy和Data feed的数目是不受限制的,不同策略间如果交互在bt中没有做增强实现或者约束。
  Cerebro支持的一些其他操作:预加载和执行模式cerebro = bt.Cerebro(runonce=True, preload=True)
  可以通过preload设置是否对数据进行预加载,但是当runonce为True时,必须将preload也设为True,这是因为只有当数据预加载后,才可能执行runconce逻辑。当然预加载的数据,可以不执行runonce逻辑。setbroker / getbroker(或者使用broker属性)支持用户设置自定义的代理(broker),也支持获取当前使用的代理。绘图。可以通过下面的代码快速实现绘图:cerebro.run() cerebro.plot()
  也可以通过使用一些参数来修改绘图效果:
  numfigs=1
  如果要绘制的内容较多,可以修改numfigs来绘制多张子图。
  plotter=None
  用户可以通过plotter参数传输自定义的绘图器来代替默认的绘图器。
  **kwargs
  标准的关键词参数,用于将参数传给plotter。策略优化
  上面介绍到,在cerebro中添加策略时,是将策略的子类(没有直接添加策略子类的实例)和关键词参数一起添加的,在cerebro.run()执行时,针对每一个关键词参数取值,就可以实例化一个策略子类的实例。当关键词参数有多种取值或者取值组合时,cerebro就会每次取一组关键词参数生成一个策略子类实例,这样通过关键词参数不同组合的计算,实现策略的优化,也就是说,策略的优化实际是对其关键词参数的的优化,优化的示例如下所示:cerebro.optstrategy(MyStrategy, period=xrange(10, 20))
  optstrategy函数和addstrategy的形式相同,区别在于optstrategy的关键词参数是一个取值范围,而不是单一值,这样optstrategy就可以对参数进行优化。
  在上面的例子中,period的取值是从10到19,cerebro将分别用这些值进行回测。
  optstrategy也支持复杂的关键词参数组合,比如取值范围和单一值组合:cerebro.optstrategy(MyStrategy, period=xrange(10, 20), factor=3.5)
  再比如多个取值范围参数:cerebro.optstrategy(MyStrategy, period=[5, 10, 20], period2=[20, 30, 60])
  感兴趣的读者也可以关注我的CSDN博客-码农甲V,里面有更多内容。
  欢迎大家关注、点赞、转发、留言,感谢支持!

如何运用大数据拓展客户,体现其商业价值,实现精准营销如今的社会是一个快速发展的社会,高新科技比较发达,信息内容商品流通,大家的日常生活也更加便捷,而大数据就是这个时期的物质。根据各个行业的与时俱进,大数据也在逐渐给人们创造财富。在这茶叶零售行业该如何获客,增强客户粘度,并提高复购率伴随着荼叶市场的需求日趋客观,线下推广与网上的竞争力也更加猛烈,近年来,线下推广各种各样大商店小商店技术专业店官方旗舰店智能化店层出不穷,他们在不断地打造新的顾客感受的同时,也让顾建筑资质代办业务,如何快速获客,最后一个方法精准有效在建筑业,建筑企业资质十分关键。许多项目规定建筑企业务必有着相应的建筑企业资质才有资质参加招投标,也就是建筑企业资质是建筑施工企业发展趋势的基本上门坎。因此公司对建筑企业资质的要求大数据获客软件的作用,是否真实有用,效果怎样伴随着移动互联网的持续转型和发展趋势,不经意间互联网大数据早已融入人们的生活中,大家也都能感受到互联网大数据和人工智能技术针对目前这种时期的实际意义。一协助公司节约推广费用传统式的利用大数据获客软件,企业如何从初创,到成功站稳脚跟在这个数据为王的时代,,针对大数据,最重要的含意就是指解决这种海量信息的技术性怎样发掘出这种数据信息蕴涵的很大的经济收益,怎样完成行业的使用价值升值。因而,互联网时代并不是掌握数据OLED屏产量不行,苹果抓紧MicroLED推出,这次台厂拼得过韩厂吗?自韩国三星LG等半导体企业被大量限制以来,苹果作为在屏幕上主动权较少的一方,就一直面对着自身战略调整的难题。那么它怎么样解决的呢?首先,既然日韩限制长期不可调和,总不能和它们耗死?一梦江湖秋季特典版本正式上线,各大玩法福利不要错过秋季特典版本君意如鸿今天已经正式开启了,虽然这类大更新已经见怪不怪了,但是其中的玩法和福利,能嫖的还是要嫖,要玩的还是得玩啊。比如组队摸金生涯系统耳饰品类秋日时装萌趣坐骑可爱挂件江如何解决LDL的假赛我们有几个不成熟的建议最近这段时间,发生在LDL上的假赛事件并没有随着官方的调查以及处罚结果而结束,相反的是愈演愈烈。在之后官方组织了一场LDL假赌赛问题媒体答疑线上会议,我问了腾竞体育LPL生态总负责梦回2015?一文看懂苹果秋季炸场发布会昨天,苹果的这个来炸场的发布会终于落下帷幕。相信大部分朋友们是没有熬夜看发布会的,醒来之后看网上的很多汇总信息以及讨论也会有一点懵。这篇文章,笔者将用比较通俗的语言,带各位回到发布深切悼念袁隆平爷爷,我会每天好好吃饭的看到这一张照片,是2018年10月30日,袁隆平在位于湖南长沙的第三代杂交水稻小区测产。多年之前,我在湖南湘西某地出差途中,透过中巴车的窗玻璃,看到了一块绿油油的稻田,特别绿,特别真正的精准营销有哪几点,如何做到,才是最有价值的说到营销推广,很多人第一反应便是寻找精确目标消费群体,寻找精确方式,好像那样就能产生精确送达,可是大部分的大数据营销预期效果却不尽如人意。并不是寻找精确的方式便是大数据营销,真正的
因一件事被人误会,你是选择清者自清还是极力反驳?如果被人误解或者别人对你充满了偏见,我们该怎么做?一般人的做法就是心力交瘁的去解释,即便当时对方接受了我们的解释,但下次依然会以这样的态度对待我们。之所以出现这种情况,原因无非两点你遇见过最奇葩的事有哪些?孤寡老人患重病,好心男子前去照料,却不幸染上艾滋。几年后,医生宣布男子痊愈。男子心下疑惑,选择刨根问底。真相让他难以接受。2007年10月,一群医务工作者大张旗鼓地来到甘肃村民老李随手一张手机照卖1300,活在摄影鄙视链顶端,到底有多爽?能给大家带来视觉上的享受就是好照片傲慢吗我是没有体验过一张手机照片卖1300的,但是明确的和大家分享,照片出售版权是可以挣钱的,甚至很多职业摄影以此为生,国家地理的很多照片都是来自中国制造!这些电池太猛,满功率连电网都受不了燃油车的价值核心是三大件,细化分的话,有功率扭矩转速平台齿比范围密度等等技术指标。纯电汽车也有三大件,即三电系统。作为三电系统的核心,动力电池的总容量充电效率功率密度循环寿命温度敏一文了解新能源汽车电机与国内主流供应商新能源汽车大家最关心的应该是电池,电池是哪家厂商供货?有什么黑科技?续航多少?这都是消费者关心的问题之一。作为新能源汽车核心三电系统之一的电机就好比燃油车的发动机一样,是车辆核心部再度刷中国纪录!比亚迪实现新能源乘用车月销三连冠没有丝毫意外,比亚迪再次刷新了自己一个月前创下的中国纪录。根据官方数据,8月份,比亚迪新能源销量同比增长331。9达60508,实现了中国市场的月销三连冠。这是比亚迪继7月之后,连新电池技术正取得进展纽约时报报道称一波新电池技术正在来临,这些技术有望激发前所未有的消费电子产品设计,有助于进一步加快汽车和飞机的电气化进程。新的电池方案甚至有助于电网电力储存,进而减少人类社会对化石新能源车进入全面竞争时代,六大趋势了解一下新华财经海口9月16日电2021世界新能源汽车大会9月15日17日在海南省海口市举行,大会围绕着新能源汽车在技术创新产业创新政策创新跨界创新等方面的成功经验与发展趋势,探索电动化智氢能储能是新能源电力系统的核心技术能源人都在看,点击右上角加关注回顾历史,能源革命一般由动力革命引发,新动力装置和交通工具的发明带动能源资源的开发利用,并引发工业革命。第一次能源革命是从薪柴到煤炭的跨越,动力是蒸汽突发!亚马逊不再给刷单卖家申诉机会出品卖家之家作者Yola编辑John2021年以来,亚马逊对刷单的铁血整顿,已经让大批卖家宛如惊弓之鸟,如今卖家们最害怕莫过于封号listing下架这类的词汇了。刚经历了周末的亚马永辉超市CEO发内部信工信部要求阿里腾讯等解除屏蔽链接工信部要求阿里腾讯等解除屏蔽链接工信部有关业务部门召开屏蔽网址链接问题行政指导会。会上,工信部提出有关即时通信软件的合规标准,要求限期内各平台必须按标准解除屏蔽,否则将依法采取处置