BackTrader 中文文档(二十九)(3)https://developer.aliyun.com/article/1505507
随机指标(通用)
原文:
www.backtrader.com/recipes/indicators/stochastic/stochastic/
backtrader已经包含了一个Stochastic
指标(包括一种显示三条计算线而不仅仅是通常的两条%k
和%d
线的变体)
但这种指标假设用于计算的数据源具有high
、low
和close
组件。这是因为原始定义使用了这些组件。
如果想要使用不同的组件,一个首要的方法可能是创建一个数据源,将不同的组件存储在数据源的high
、low
和close
行中。
但一个更直接的方法是拥有一个通用Stochastic
指标,它接受三(3)个数据组件,并将它们用作如果它们是high
、low
和close
组件。
下面的代码执行此操作,并通过允许自定义第二次平滑的移动平均值添加了一个不错的功能。
class Stochastic_Generic(bt.Indicator): ''' This generic indicator doesn't assume the data feed has the components ``high``, ``low`` and ``close``. It needs three data sources passed to it, which whill considered in that order. (following the OHLC standard naming) ''' lines = ('k', 'd', 'dslow',) params = dict( pk=14, pd=3, pdslow=3, movav=bt.ind.SMA, slowav=None, ) def __init__(self): # Get highest from period k from 1st data highest = bt.ind.Highest(self.data0, period=self.p.pk) # Get lowest from period k from 2nd data lowest = bt.ind.Lowest(self.data1, period=self.p.pk) # Apply the formula to get raw K kraw = 100.0 * (self.data2 - lowest) / (highest - lowest) # The standard k in the indicator is a smoothed versin of K self.l.k = k = self.p.movav(kraw, period=self.p.pd) # Smooth k => d slowav = self.p.slowav or self.p.movav # chose slowav self.l.d = slowav(k, period=self.p.pdslow)
当然,需要验证当给定相同的输入集时,该指标是否确实产生与标准指标相同的结果。下面的图表是使用这组指令创建的。
# Generate 3 data feeds d0 = bt.ind.EMA(self.data.high, period=14) d1 = bt.ind.EMA(self.data.low, period=14) d2 = bt.ind.EMA(self.data.close, period=14) Stochastic_Generic(d0, d1, d2) # customized stochastic # These two have generate the same results Stochastic_Generic(self.data.high, self.data.low, self.data.close) bt.ind.Stochastic(self.data)
这里是指标如何工作的视图
绝对强度柱
Stockcharts 和 Investopedia 关于此指标有文献。
公式如下:
StochRSI = (RSI - min(RSI, period)) / (max(RSI, period) - min(RSI, period))
理论上,用于计算RSI
的周期与随后用于查找RSI
的最小值和最大值的周期相同。这意味着如果选择的周期是14
(事实上的标准)用于RSI
,则指标的总回溯期将为28
注意
实际回溯期将稍长,因为 14
期RSI
的有效回溯期为 15
,因为需要比较前两个周期的收盘价格来启动计算
在任何情况下,backtrader 会自动计算所有必需的回溯期和预热期。
考虑到以下是 backtrader 中的内置指标:
RSI
Lowest
(又称MaxN
)Highest
(又称MinN
)
根据上述公式开发StochRSI
是直接的。
class StochRSI(bt.Indicator): lines = ('stochrsi',) params = dict( period=14, # to apply to RSI pperiod=None, # if passed apply to HighestN/LowestN, else "period" ) def __init__(self): rsi = bt.ind.RSI(self.data, period=self.p.period) pperiod = self.p.pperiod or self.p.period maxrsi = bt.ind.Highest(rsi, period=pperiod) minrsi = bt.ind.Lowest(rsi, period=pperiod) self.l.stochrsi = (rsi - minrsi) / (maxrsi - minrsi)
这里是指标工作原理的一瞥
商店/经纪人/数据源
介绍
这一部分托管了一系列第三方存储(或单独的经纪人 / 数据源)的实现,它们不是backtrader核心的一部分。
bt-ccxt-store
原文:
www.backtrader.com/recipes/storesbrokersdata/bt-ccxt-store/bt-ccxt-store/
bt-ccxt-store
作者 Dave Vallance
仓库链接:
Metaquotes MQL 5 - API
首次由用户 Nikolai
在这里宣布。
仓库链接:
NorgateData
原文:
www.backtrader.com/recipes/storesbrokersdata/norgatedata/norgatedata/
包的链接:
Oanda v20
原文:
www.backtrader.com/recipes/storesbrokersdata/oandav20/oandav20/
由用户 ftomassetti
仓库链接:
TradingView
原文:
www.backtrader.com/recipes/storesbrokersdata/tradingview/tradingview/
用户为 Dave-Vallance
仓库链接: