经过我裁剪的一款轻量化T3 MATilson T3 Moving Average (T3MA)是一种移动平均线,旨在降低滞后性并提高趋势识别的准确性。它基于多个平滑移动平均线的组合,每个后续平滑移动平均线的权重比前一个更重。T3MA公式包括三种不同的平滑系数和一个成交量系数或者叫做波动性系数,可以根据用户的偏好进行调整。T3MA通常被交易者和投资者用于识别趋势并生成交易信号。
T3MA的计算方法需要使用到指数移动平均线(EMA)。在TradingView社区中的Pine脚本中,90%以上使用EMA函数来计算T3MA。具体来说,在Pine脚本中,需要定义T3MA的长度和波动率系数,然后分别计算三个不同长度的EMA。接下来,需要计算三个常数,这些常数与波动率有关。最后,将三个EMA和三个常数的加权平均值相加得到T3MA的值。如果您想自定义T3MA的长度和波动率,只需要修改代码中的参数即可。总的来说,T3MA是一种非常有用的技术指标,可以帮助交易者更好地理解市场趋势,提高交易效率。
今天介绍的这款改进型T3 MA主要是我觉得传统T3算法过于冗余, 计算复杂度高了,而且会导致反应迟钝.所以, 我做出一款轻量化的T3 MA: L1 T3 MA Lite Version. 这个其实没有质变, 只不过在运算资源和响应速度上做了微调. 为了说明这个指标的有点和传统T3的区别,我引用TradingView社区博主everget的T3脚本进行对比说明.
Everget的T3源代码如下:
```c
//@version=5
// 版权所有 2018-present,Alex Orekhov(everget)
// T3脚本可以在MIT许可下自由分发。
indicator(title='T3MA_everget', shorttitle='T3MA_everget', overlay=true)
// 定义输入参数
length = input(title='Length', defval=14)
factor = input.float(title='Factor', minval=0, maxval=1, defval=0.7)
highlightMovements = input(title='Highlight Movements ?', defval=true)
src = input(title='Source', defval=close)
// 计算GD函数
gd(src, length) =>
ta.ema(src, length) * (1 + factor) - ta.ema(ta.ema(src, length), length) * factor
// 计算T3MA
t3 = gd(gd(gd(src, length), length), length)
// 根据用户需求高亮显示T3MA的变化
t3Color = highlightMovements ? t3 > t3 ? color.green : color.red : #6d1e7f
// 绘制T3MA线
plot(t3, title='T3', linewidth=2, color=t3Color, transp=0)
```
上述源代码是Everget用Pine脚本编写的T3MA指标的实现代码。以下是对源代码的逐行解释:
- `//@version=5`:这是Pine脚本的版本号声明, 原来是V3,我升级到了V5方便对比。
- `indicator(title='T3MA_everget', shorttitle='T3MA_everget', overlay=true)`:这是T3MA指标的主要定义,它指定了指标的标题、短标题和是否应该在主图上绘制指标线。
- `length = input(title='Length', defval=14)`:这是指标的输入参数之一,它定义了T3MA的长度。
- `factor = input.float(title='Factor', minval=0, maxval=1, defval=0.7)`:这是指标的输入参数之一,它定义了T3MA的波动率系数。
- `highlightMovements = input(title='Highlight Movements ?', defval=true)`:这是指标的输入参数之一,它确定是否应该高亮显示T3MA的变化。
- `src = input(title='Source', defval=close)`:这是指标的输入参数之一,它定义了T3MA的数据源。
- `gd(src, length) =>`:这是Everget自己计算GD函数的定义。
- `ta.ema(src, length) * (1 + factor) - ta.ema(ta.ema(src, length), length) * factor`:这是计算GD函数的实现。
- `t3 = gd(gd(gd(src, length), length), length)`:这是计算T3MA的定义,它使用了GD函数。
- `t3Color = highlightMovements ? t3 > t3 ? color.green : color.red : #6d1e7f`:这是确定T3MA颜色的定义,它根据用户的需求确定是否应该高亮显示T3MA的变化。
- `plot(t3, title='T3', linewidth=2, color=t3Color, transp=0)`:这是绘制T3MA线的定义。
我的T3 Lite源代码如下:
```
//@version=5
indicator(title=' L1 T3 MA Lite Version', shorttitle='T3MA_blackcat1402', overlay=true)
len = input(title='Length', defval=14)
src = input(title='Source', defval=close)
volatility = input(title='Volatility', defval=0.7)
ema1 = ta.ema(src, len)
ema2 = ta.ema(ema1, len)
ema3 = ta.ema(ema2, len)
c1 = -volatility * volatility * volatility
c2 = 3 * volatility * volatility + 3 * volatility * volatility * volatility
c3 = 1 - (c1 + c2)
t3ma = c3 * ema3 + c2 * ema2 + c1 * ema1
plot(t3ma, color=color.new(color.yellow, 0), linewidth=2)
```
`//@version=5`
声明本脚本适用的TradingView版本。
`indicator(title=' L1 T3 MA Lite Version', shorttitle='T3MA_blackcat1402', overlay=true)`
定义指标的标题、简称和是否作为覆盖。
`len = input(title='Length', defval=14)`
定义指标的长度参数,默认值为14。
`src = input(title='Source', defval=close)`
定义数据源参数,默认值为收盘价。
`volatility = input(title='Volatility', defval=0.7)`
定义波动率参数,默认值为0.7。
`ema1 = ta.ema(src, len)`
计算源数据的指数移动平均线(EMA)。
`ema2 = ta.ema(ema1, len)`
计算第一次EMA的EMA。
`ema3 = ta.ema(ema2, len)`
计算第二次EMA的EMA。
`c1 = -volatility * volatility * volatility`
计算T3系数C1。
`c2 = 3 * volatility * volatility + 3 * volatility * volatility * volatility`
计算T3系数C2。
`c3 = 1 - (c1 + c2)`
计算T3系数C3。
`t3ma = c3 * ema3 + c2 * ema2 + c1 * ema1`
计算T3移动平均线。
`plot(t3ma, color=color.new(color.yellow, 0), linewidth=2)`
绘制T3移动平均线。
虽然我这个版本解释起来有点拗口,但是应该更容易理解,毕竟结构简单了. 下面是两张响应速度的效果图. 红绿的是Everget的,黄色的是我的.
这两个T3 Moving Average的脚本的区别在于它们的实现方式。第一个脚本(Everget)使用了较为复杂的计算公式,需要计算三个不同长度的 EMA 并根据波动率计算三个常数,最后将它们加权平均得到 T3MA。这个复杂的计算公式可以提高T3MA指标的灵敏度,从而更好地识别价格趋势。而第二个脚本(Blackcat1402)使用了比较简单的计算公式,只需要计算三个不同长度的 EMA 并根据波动率计算三个常数,最后将它们加权平均得到 T3MA。这个简单的计算公式可以减少计算复杂度,从而加速计算速度。两者的效果和计算方法略有不同,用户可以根据自己的需求选择适合自己的脚本。
总的来说,T3 Moving Average是一种非常有用的技术指标,可以帮助交易者更好地理解市场趋势,提高交易效率。用户可以根据自己的需求选择适合自己的脚本,并灵活调整T3MA的长度和波动率系数以适应不同的市场。