如何用backtrader计算KDJ
时间: 2023-08-06 20:08:37 浏览: 291
在 backtrader 中计算KDJ 需要先计算出三个值:K、D、J,具体步骤如下:
1. 计算 RSV 值(未成熟随机值):
RSV = (close - low) / (high - low) * 100
其中,close 是收盘价,low 是时间周期内的最低价,high 是时间周期内的最高价。
2. 计算 K 值:
K = SMA(RSV, n, 1)
其中,SMA 是简单移动平均线,n 是时间周期。
3. 计算 D 值:
D = SMA(K, m, 1)
其中,m 是时间周期。
4. 计算 J 值:
J = 3 * K - 2 * D
最后,将计算出的 K、D、J 值添加到 backtrader 的数据线中即可。
下面是一个示例代码:
```
import backtrader as bt
import numpy as np
class KDJ(bt.Indicator):
lines = ('K', 'D', 'J')
params = (
('n', 9),
('m', 3),
)
def __init__(self):
rsv = (self.data.close - bt.indicators.Lowest(self.data.low, period=self.params.n)) / (bt.indicators.Highest(self.data.high, period=self.params.n) - bt.indicators.Lowest(self.data.low, period=self.params.n)) * 100
self.lines.K = bt.indicators.SMA(rsv, period=self.params.m)
self.lines.D = bt.indicators.SMA(self.lines.K, period=self.params.m)
self.lines.J = 3 * self.lines.K - 2 * self.lines.D
```
在这个示例中,我们定义了一个 `KDJ` 类作为指标,其中 `params` 参数指定了计算 KDJ 所需的时间周期,`lines` 属性定义了输出的数据线(K、D、J),`__init__` 方法中计算了 RSV 值,并且使用 `bt.indicators.Lowest` 和 `bt.indicators.Highest` 计算了最低价和最高价。最后,使用 `bt.indicators.SMA` 计算了 K、D 值,并通过计算得到了 J 值。
阅读全文