bt虚拟货币交易所_币圈新闻_鼎鸿网

bt虚拟货币交易所

angula 0

一、数据收集和计算:

导入库:

import backtrader as btimport backtrader.indicators as btindimport backtrader.feeds as btfeeds

计算方式:

thefeed = bt.feeds.OneOfTheFeeds(...)theind = bt.indicators.SimpleMovingAverage(...)

喂入数据:

class MyStrategy(bt.Strategy):    params = dict(period=20)    def __init__(self):        sma = btind.SimpleMovingAverage(self.datas[0], period=self.params.period)        ...    cerebro = bt.Cerebro()    ...    data = btfeeds.MyFeed(...)    cerebro.adddata(data)    ...    cerebro.addstrategy(MyStrategy, period=30)    ...

双均线构建以及生成新数据:

class MyStrategy(bt.Strategy):    params = dict(period1=20, period2=25, period3=10, period4)    def __init__(self):      sma1 = btind.SimpleMovingAverage(self.datas[0], period=self.p.period1)      # This 2nd Moving Average operates using sma1 as "data"            sma2 = btind.SimpleMovingAverage(sma1, period=self.p.period2)            # New data created via arithmetic operation      something = sma2 - sma1 + self.data.close      # This 3rd Moving Average operates using something as "data"      sma3 = btind.SimpleMovingAverage(something, period=self.p.period3)      # Comparison operators work too ...      greater = sma3 > sma      # Pointless Moving Average of True/False values but valid      # This 4th Moving Average operates using greater as "data"      sma3 = btind.SimpleMovingAverage(greater, period=self.p.period4)      ...

将数据按照顺序传输给策略并进行计算、运行:

class MyStrategy(bt.Strategy):    params = dict(period=20)    def __init__(self):        sma = btind.SimpleMovingAverage(self.datas[0], period=self.params.period)...cerebro = bt.Cerebro()...data = btfeeds.MyFeed(...)cerebro.adddata(data)...cerebro.addstrategy(MyStrategy, period=30)...

当然,这个不仅仅只适用于案例,如果读者学习了,可以通过构建新的策略来传递数据,并且运行。

定位访问:

self.data targets self.datas[0]#意味着当前值self.dataX targets self.datas[X]#意味着距离当前值距离X的值,#从目前学习来看,X多为负数,而正数要取的案例还是比较少的。

Python量化_backtrader03:为策略添加卖单 的策略来看:

是通过引用close[-2],close[-1]的方式来进行访问和比较,从而生成策略的。当然秉承着杜绝未来函数的可能性,backtrader是按照顺序来传输的情况下,这种设计是很有必要的。毕竟close[0]应当是当天的价格,如果当我们要取close[1]的情况下,就意味着今天可能会取到明天的数据,从这点来讲,是会出现逻辑错误的,这一点是违背常理的。

尽管我们能够掌握历史数据,但是回测过程中我们应当严格去执行市场逻辑才是。

因为策略需要生成的新数据同时将close删除:

class MyStrategy(bt.Strategy):    params = dict(period=20)    def __init__(self):        sma = btind.SimpleMovingAverage(period=self.params.period)...

在这里我们生成了20日均线的数据,但是在传输的过程中,正如close一样顺序传入,sma数据的生成必然也是在等待19根日线之后,在第20根日线开始生成sma值,然后进行同向对比产生交易逻辑。

当然,不仅仅只是股票价格数据可以传输,我们同样还可以去理解为生成的交易所产生的盈利,亏损,手续费等进行计算传输,也可以引用。按照Python量化backtrader06:单均线策略 通过生成单独的npl列表去捕捉这些数据。

访问全局变量的参数并进行计算:

#元组方式:class MyStrategy(bt.Strategy):    params = (('period', 20),)    def __init__(self):        sma = btind.SimpleMovingAverage(self.data, period=self.p.period)#字段方式:class MyStrategy(bt.Strategy):    params = dict(period=20)    def __init__(self):        sma = btind.SimpleMovingAverage(self.data, period=self.p.period)#另外需要提一点的是,self.p.period就是self.params.period的简写。

线的概念:

实际上就是我们日常所见到的行。

当然,在之前的学习笔记中,我们大多数是援引的是close,即收盘价,其实我们也可以引用其他基础数据,即open,high,low。

在本小结中,作者对访问其数据属性的变量进行了简写处理,处理规则如下:

xxx.lines can be shortened to xxx.lxxx.lines.name can be shortened to xxx.lines_nameComplex objects like Strategies and Indicators offer quick access to data’s linesself.data_name offers a direct access to self.data.lines.nameWhich also applies to the numbered data variables: self.data1_name ->self.data1.lines.namexxx.lines可以缩写为xxx.lxxx.lines.name可以缩写为xxx.lines_name诸如策略和指标之类的复杂对象提供对数据行的快速访问self.data_name提供对self.data.lines.name的直接访问这也适用于编号的数据变量:self.data1_name->self.data1.lines.name此外,可以通过以下方式直接访问行名称:self.data.close和self.movav.sma

二、系列文章:

Python量化backtrader01:账户资金初始化

Python量化backtrader02:第一个策略和买单

Python量化_backtrader03:为策略添加卖单

Python量化_backtrader04:手续费设置

Python量化_backtrader05:定制策略参数01

Python量化backtrader06:单均线策略

Python量化backtrader07:绘图

Python量化backtrader08:寻找最优参数

bt虚拟货币交易所文档下载: PDF DOC TXT