量化策略开发,高质量社群,交易思路分享等相关内容
这里有一个新工具,它结合了线性回归指标和指数移动平均线(EMA),来过滤价格波动并帮助确定转折点。
线性回归调整的指数移动平均线(LRAdj EMA)旨在考虑线性回归偏差(即价格与线性回归指标之间的距离)。指数移动平均线(EMA)可以平滑价格数据并确定当前趋势方向。EMA是滞后指标。线性回归指标基于统计学预测价格方向。这种LRAdj EMA可以与相同周期的EMA一起使用,以识别整体趋势。不同周期的LRAdj EMA可以用来确定转折点和过滤价格波动。
计算方法: 这里展示的例子是基于10日LRAdj EMA。当前LRAdj EMA = 上一个LRAdj EMA + MLTP × (1+LRAdj×MLTP_LRAdj) × (价格 - 上一个LRAdj EMA)
乘数(加权乘数): MLTP = 2 / (时间段 + 1)
线性回归调整(LRAdj)乘数: LRAdj = (当前LR偏差的绝对值 - 最小LR偏差的绝对值) / (最大LR偏差的绝对值 - 最小LR偏差的绝对值)
其中:
使用绝对值以确保数值为正。
当前LR偏差:线性回归指标与当前收盘价之间的距离。
最小LR偏差:回顾期内线性回归指标与收盘价之间的最小距离。
最大LR偏差:回顾期内线性回归指标与收盘价之间的最大距离。
LRAdj在0和1之间波动。如果当前LR偏差接近最小LR偏差,那么LRAdj接近零。如果当前LR偏差等于最大LR偏差,LRAdj可以达到1。乘以MLTP_LRAdj,MLTP_LRAdj的值可以从1变化到5。
10,10,5是LRAdj EMA(10,10,5)的典型设置,其中第一个参数是移动平均周期,第二个参数是回顾期,第三个参数是MLTP_LRAdj乘数。根据你的交易风格和目标,可以替换其他值。
图1显示了2010年8月至12月的Russell 2000指数,以及线性回归指标LR(C,10)、LRAdj(10,10,5)和EMA(10)。LRAdj EMA和EMA交叉点 在强劲的上升趋势中,忽略看跌交叉点。看涨的LRAdj EMA和EMA交叉点(绿色箭头)可以用作长线交易的入场点。
图1:罗素2000指数。这里展示的是2010年8月至12月的罗素2000指数,以及线性回归指标LR(C,10)、LRAdj(10,10,5)和EMA(10)。
图2显示了2019年6月至11月的S&P 500指数,以及20日EMA和LRAdj EMA(20,20,5)。
图2
图3显示了2016年10月至2017年10月的NYSE Composite指数,以及50日EMA和LRAdj EMA(50,50,5)。
图3
图4显示了2012年1月至2022年4月的Dow Jones Industrial Index(DJIA),以及100日EMA和LRAdj EMA(100,100,5)。注意2014年10月的失败突破。
图4
趋势识别 图5显示了Dow Jones Industrial Average(DJIA)以及200日EMA和LRAdj EMA(200,200,1)。200日EMA和LRAdj EMA(200,200,1)捕捉了2003-2008年的牛市。
图5
图6的周线图显示了S&P 500指数,以及40周EMA和LRAdj EMA(40,40,5)。40周EMA和LRAdj EMA(40,40,5)定义了2001-2003年的熊市。
图6
LRAdj EMA交叉点 图7显示了2009年7月至11月的NYSE Composite指数,以及LRAdj EMA(10,10,3)和LRAdj EMA(50,50,3)。看涨的LRAdj EMA交叉点(绿色箭头)可以用作长线交易的入场点。
图7
图8显示了2017年12月至2019年5月的FTSE 100指数,以及LRAdj EMA(50,50,5)和LRAdj EMA(200,200,5)。看涨的LRAdj EMA(绿色箭头)和看跌交叉点(红色箭头)可以在横盘期间用作长线和短线交易的入场点。
图8
结论
LRAdj EMA提供了趋势跟踪和价格预测的功能。LRAdj EMA与传统EMA的解释方式类似,但它的反应更快。不幸的是,移动平均线交叉系统可能会产生误导信号。LRAdj EMA应该与价格分析一起使用。
策略代码
1、用户函数:
Params
Numeric Periods;
Numeric Pds;
Numeric Mltp;
Vars
Numeric Mltp1(0);
Numeric LR(0);
Numeric Dist(0);
Numeric ST(0);
Numeric Mltp2(0);
Numeric Rate(0);
Series<Numeric> LRAdjEMA(0);
Begin
Mltp1 = 2 / (Periods + 1);
LR = LinearRegValue(Close, Pds, 0);
Dist = Abs(LR - Close);
ST = (Dist - Lowest(Dist, Pds)) / (Highest(Dist, Pds) - Lowest(Dist, Pds));
Mltp2 = ST * Mltp;
Rate = Mltp1 * (1 + Mltp2);
If(CurrentBar() == 1)
{
LRAdjEMA = Close;
}
Else
{
LRAdjEMA = LRAdjEMA[1] + Rate * (Close - LRAdjEMA[1]);
}
Return LRAdjEMA;
End
2、指标:
Params
Numeric Periods(50);
Numeric Pds(50);
Numeric Mltp(3);
Vars
Numeric LRAdjEMA(0);
Events
OnBar(ArrayRef<Integer> indexs)
{
LRAdjEMA = lradjema2209(Periods, Pds, Mltp);
PlotNumeric( "LinRegAdjEMA",LRAdjEMA);
}