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

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,里面有更多内容。
  欢迎大家关注、点赞、转发、留言,感谢支持!

OPPO发布新一代智能眼镜AirGlass推动智能眼镜从玩具到工具的进化OPPO在INNODAY2021上正式推出全新一代智能眼镜AirGlass(简称OPPOAirGlass)。它搭载OPPO自研微型光机和前沿的MicroLED,以及定制衍射光波导技二手价从6688元跌至1399元,苹果A11IP67,已沦为标准千元机不同价位的手机对应着不同的消费者,高价的旗舰手机有人买,低价的千元机也有人买,虽然千元机各方面实力都不如高价机型,但是千元机价格低就是最大的优势,对于经济实力不是很宽裕,或者对手机爱美小姐姐购机首选,这三款机型最受欢迎,看看你买对了吗?智能手机来说,每个人的需求都不一样,笼统刻板来看,发烧友最看重基础配置,处理器是一定不能差的,土豪党则是追求做工设计,必须要看起来很贵那种,而爱美的小姐姐则是喜欢自拍了,喜欢戴可爱币圈老手也会被骗?比特币骗局大起底韭菜是怎么被割的写在前面在我国境内不允许虚拟货币的场内场外发行,目前在国内发行场外发行数字货币都是违法的。值得注意的是境外的交易所向我国境内的居民提供服务也被定性为非法金融活动,各种虚拟货币交易平尼康将发布新的800mm长焦镜头,光圈值为6。3,为什么不是5。6?前天刚刚发布了一篇文章,谈到了对尼康最新大炮光圈的猜想。文章链接httpswww。toutiao。comi7040776221390963203。今天得到最新消息就是尼康即将公布的tcpdump学习tcpdump学习参考httpswww。cnblogs。comggjuchengarchive201201142322659。html安装yuninstallytcpdump监视指如何设置手机定位追踪另一部手机?很简单,只需要这样操作手机丢了找不到了,如何快速定位追踪到手机的位置?其实很简单,任何一部智能手机在打开查找我的手机功能的前提下,都可以通过查找设备功能来定位或追踪。以华为手机为例,详细操作方法如下1在违法采集43万多张人脸,小鹏汽车被罚10万,车主信息红线如何守?12月14号,小鹏汽车冲上了热搜。但小鹏这次上热搜并非是因为技术有创新或是销量创纪录,而是因为这家造车新势力在今年1月到6月的半年时间里,利用门店安装监控摄像头的方式,违法采集了4OPPOFindN发布内屏为7。1英寸,120Hz支持LTPO今天下午,首席产品官刘作虎上台,带来OPPO首款折叠屏FindN。其采用5。49英寸外屏,189比例OLED屏幕,73mm整机宽度,可以实现单手操作。屏幕分辨率为1972x988,百度与北汽蓝谷合作Robotaxi已开始量产,整车成本约48万在近日,北汽蓝谷在回答投资者问题时表示,公司与百度合作开发的Robotaxi车型已完成前期技术开发并正式量产,产品销量情况敬请关注公司官方公告。据了解,6月17日,百度ApolloOPPOFindN发布,7699元让折叠屏从尝鲜,到常用12月15日,OPPO今日正式发布全新折叠旗舰OPPOFindN,从外观尺寸到系统交互,重新定义折叠屏手机体验新标杆,为折叠屏手机带来重大转折,推动折叠屏手机从尝鲜,到常用。OPP
又一国产巨头加入鸿蒙!市值超5000亿,被董明珠视为最强对手作为鸿蒙OS的创立者,华为在今年的开发者大会上就公开宣称将会与美的老板九阳等家电国企进行合作,其中美的应该是实力最强知名度最高的一家。近日,美的集团官方正式官宣了与华为的合作,联手老头乐转正!新款雷丁芒果上市,2。98万起售,挂绿牌可上高速一直以来,雷丁一直深耕低速电动车领域,甚至被誉为中国老年代步车领导者,不过在2019年年初,雷丁收购了野马汽车100股权,从而也获得了汽车生产资质,也相当于老头乐转正了!近日,新款21。99万起售,2022款别克昂科威S上市,标配可变缸2。0T发动机9AT日前,上汽通用别克2022款昂科威S上市,新车推出了包括普通版GS版艾维亚版三种版本共5款车型,价格区间为21。9927。99万。2022款昂科威属于例行的年代改款,外观设计与上一观致5S八月份卖出1台新车!近日,我们从相关渠道获取到了2021年8月份国内新车交强险的数据,其中哈弗H6以25613台排在第一位,而观致5S的交强险数据只有1台,这也基本上代表了观致5S在8月份只卖出一台新跌到20万内,福特的旗舰级轿车,标配2。0T8AT,舒适性超宝马5系在国内汽车市场,BBA三个品牌的号召力很强,其实不是它们的产品有多优秀,而是品牌很优秀,并且依靠品牌能得到更高的溢价,其实如果回归到汽车的本质,开着舒服坐着舒服才是根本,在BBA之大厂需要怎样的技术型人才?腾讯字节跳动万兴科技这么说当听到程序员三个字时,相信很多人除了格子衫的印象,就是高薪职业生命周期长,从业越久越吃香。程序员,也叫IT工程师,是从事程序开发程序维护的工作人员,因互联网崛起而一举成为IT职场的适合遇见,还是久伴有些风景只能喜欢,却不能收藏。有些人只适合遇见,却不适合久伴。让自己忙一点,忙到没有时间去思考无关紧要的事,很多事情就这样悄悄地淡忘了。人的欲望很奇怪,很多时候渴望得到一些东西,得忍让,不等于亏欠忍让,不是因为亏欠,而是在乎一个人的表现。包容,不是因为懦弱,而是珍惜一份情的见证。不管是谁,不要把别人的忍让看成理所当然,不要把他人的包容当成懦弱没用。这个世上谁都不傻,选择让步成熟四部曲1。平视异性理性地考虑并选择婚姻对象,并开始准备成家过独立的家庭生活在行为上能够扮演适当的性别角色。实际点来说,就是用从容和自然的态度,在面对异性时既不太在意对方对自己的看法,也不你有什么缺点?你知道吗每个人都有缺点,如果你害怕它回避它,它就永远是你的硬伤只有正视它克服它,它才不会成为你前行的障碍。有进取心的人,都敢直面自己的缺点。因为他们知道,只有攻克一个又一个的障碍,人生才能最深沉的爱总是无声,最长久的情总是平淡爱到深处,是无言情到浓时,是眷恋。时间会告诉我们,简单的喜欢,最长远平凡中的陪伴,最心安懂你的人,最温暖。徐志摩说我懂你,像懂自己一样深刻。简短的话语,却包含了万千。因为深有体会,