趋势跟踪型双均线策略


创建日期: 2023-10-25 11:42:23 最后修改: 2023-10-25 11:42:23
复制: 3 点击次数: 581
avatar of ChaoZhang ChaoZhang
1
关注
1243
关注者

趋势跟踪型双均线策略

概述

本策略运用平均方向指数评级指标(ADXR)来识别市场趋势,并结合双均线形成交易信号,属于典型的趋势跟踪型策略。ADXR指标能够有效识别趋势的变化,双均线则可以进一步过滤掉部分虚假信号。本策略适用于如股票、外汇等趋势性较强的市场,可在震荡行情中获取较好的收益。

策略原理

  1. 计算ADXR指标值。其中ADX表示平均方向指数,反映趋势的力度;ADXR对ADX进行平滑处理,能更好地显示趋势。

  2. 设置ADXR指标的双阈值,当ADXR上穿第一个阈值时看涨,下穿第二个阈值时看跌。这表明当前处于趋势状态。

  3. 根据ADXR信号判断持仓方向。若ADXR上穿第一个阈值,做多;若ADXR下穿第二个阈值,做空。

  4. 结合双均线过滤信号。只有当价位于快线上方时做多,价位于慢线下方时做空。此过滤可以避免趋势反转时的误交易。

  5. 根据持仓方向绘制K线颜色。做多为绿色,做空为红色。

优势分析

  1. ADXR指标平滑价格变动,能有效识别趋势,较好地避免震荡市的调整带来的交易风险。

  2. 双均线过滤可降低回撤,避免趋势反转带来的亏损。

  3. 结合趋势指标和双均线,既保证了交易随趋势进行,又控制了风险,非常适合趋势性市场。

  4. 策略思路清晰易懂,参数设置灵活,可按需调整,适合不同市场环境。

风险分析

  1. ADXR指标参数设置不当可能导致无法及时捕捉趋势转换,应根据具体市场谨慎设置ADXR参数。

  2. 双均线参数设置不当也可能导致过滤过多信号而错过交易机会,应根据市场调整双均线参数。

  3. 任何指标都可能发出错误信号,应结合较大级别趋势进行验证,避免被套。

  4. 震荡趋势中应降低仓位规模,防止亏损扩大。

优化方向

  1. 可以结合其他指标对ADXR信号进行验证,如MACD,布林带等,提高信号准确率。

  2. 可以添加止损策略,如移动止损、时间止损等,控制单笔亏损。

  3. 可以根据市场变化优化参数,如在降低市场效率时采用更长周期均线,在高效市场中缩短均线周期等。

  4. 可以结合资金管理和仓位管理策略,如固定份额、马丁格尔等,控制整体风险。

总结

本策略整体来看是一个典型的趋势跟踪策略,使用ADXR指标辅助确定趋势方向,双均线过滤减少回撤。策略优点是简单清晰,易于实施,可根据不同市场环境进行参数调整。但任何技术指标都可能出现错误信号,此策略也存在一定风险,需要注意防范埋伏的暗流,应结合趋势及资金管理策略来控制风险。如果参数优化得当,本策略可以获得较好的风险收益比,适合追踪趋势性较强的市场。

策略源码
/*backtest
start: 2023-10-17 00:00:00
end: 2023-10-24 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 04/05/2018
// The Average Directional Movement Index Rating (ADXR) measures the strength 
// of the Average Directional Movement Index (ADX). It's calculated by taking 
// the average of the current ADX and the ADX from one time period before 
// (time periods can vary, but the most typical period used is 14 days).
// Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening 
// and weakening trends. However, because it represents an average of ADX, values 
// don't fluctuate as dramatically and some analysts believe the indicator helps 
// better display trends in volatile markets.
//
// You can change long to short in the Input Settings
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

strategy(title="Average Directional Movement Index Rating Backtest", shorttitle="ADXR")
LengthADX = input(title="Length ADX", defval=14)
LengthADXR = input(title="Length ADXR", defval=14)
reverse = input(false, title="Trade reverse")
Signal1 = input(13, step=0.01)
Signal2 = input(45, step=0.01)
hline(Signal1, color=green, linestyle=line)
hline(Signal2, color=red, linestyle=line)
xADX = fADX(LengthADX)
xADXR = (xADX + xADX[LengthADXR]) / 2
pos = iff(xADXR < Signal1, 1,
       iff(xADXR > Signal2, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(xADXR, color=green, title="ADXR")