趋势跟踪均线交叉策略

Author: ChaoZhang, Date: 2023-11-01 17:18:13
Tags:

趋势跟踪均线交叉策略

概述

该策略运用移动平均线的黄金交叉和死叉原理,结合RSI指标辅助判断,实现对趋势的识别和跟踪。当短期均线上穿长期均线时做多,当短期均线下穿长期均线时做空,属于较为典型的趋势跟踪策略。

策略原理

该策略主要基于以下原理:

  1. 使用EMA均线:较SMA更能反应最新价格变化,对突破做出更快反应。

  2. 双均线交叉:短周期均线上穿长周期均线为买入信号,短周期均线下穿长周期均线为卖出信号,利用均线的黄金交叉和死叉原理判断趋势转折。

  3. RSI指标辅助判断:RSI高位回落时卖出,RSI低位回升时买入,避免假突破。

  4. 不同周期均线叠加:55周期线为判断短期趋势转折的信号线,100周期线为确定中期趋势的信号线,200周期线为判断长期趋势的信号线。

  5. 设置止损止盈:设定合理的止损和止盈比例,控制风险。

该策略的交易逻辑主要如下:

  1. 当55周期EMA上穿100周期EMA,并且12周期EMA高于200周期EMA时,做多入场。

  2. 当100周期EMA下穿200周期EMA时,做空入场。

  3. 交易入场后,设定止损和止盈条件,优化收益。

  4. 在RSI指标显示超买超卖信号时,及时关闭对应的多单和空单,规避反转风险。

  5. 通过不同周期EMA的叠加应用,使策略同时兼顾趋势判断和反转确认,跟踪中长期趋势的同时,避免被套。

策略优势

该策略主要优势有:

  1. 策略思路清晰,通过简单的均线交叉原理判断趋势方向,容易理解和实现。

  2. 利用EMA均线,能更快地响应价格变动,及时捕捉趋势转折。

  3. 多组周期EMA叠加运用,兼顾跟踪趋势和识别反转。

  4. RSI指标的运用避免虚假突破,提高信号的准确性。

  5. 默认止损止盈参数设置合理,可以有效控制交易风险。

  6. 可扩展性强,可以根据市场调整均线参数和止损止盈参数等来优化策略。

风险分析

该策略主要存在以下风险:

  1. 均线策略对市场波动敏感,容易被套。若遇到长期震荡市,则会有过多无效交易。

  2. 默认参数可能无法适应所有品种和周期的市场特点,需要针对性优化。

  3. 没有考虑基本面和重大事件对市场行情的影响,纯技术指标驱动容易被套。

  4. 在指数趋势向上但股市分化时,该策略可能无法获利。

  5. 存在因”止盈离场过早”而错过大部分行情收益的风险。

针对这些风险,可以通过以下方式进行优化和改进:

  1. 结合交易量指标等过滤器,避免虚假突破带来亏损。

  2. 对参数进行回测优化,使之更符合具体品种的特点。

  3. 适当缩短持仓时间,及时止损止盈,规避长期震荡走势的风险。

  4. 结合基本面指标,避免在重大利空事件来临时遭受打击。

策略优化方向

该策略可以从以下方面进行优化:

  1. 优化均线系统参数,寻找更合适的短期、中期和长期均线周期组合。可以尝试Machine Learning等参数优化方法。

  2. 测试收盘价和典型价在该策略中的效果对比。

  3. 尝试以成交量为滤波器,在大量放量的情况下才产生交易信号。

  4. 优化止损止盈条件,使之更具有针对性。也可以设置动态止损止盈按比例调整止损位。

  5. 结合其他指标,如Stoch、MACD、布林带等构建复合策略,提高策略效果。

  6. 分别在不同品种、周期和市场阶段进行回测,评估策略效果,并进一步改进。

  7. 可以考虑在机器学习算法的辅助下进行多维度参数优化。

总结

该策略整体思路清晰易懂,通过简单的均线交叉原理判断趋势方向。策略具有易于实现,默认可靠,可扩展性强等优势。但也存在一定的市场风险,需要针对回测结果不断进行参数和模块优化,使策略更稳定和智能化。结合量价技术分析和基本面研究,会使策略更全面和可靠。


/*backtest
start: 2023-10-24 00:00:00
end: 2023-10-31 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pernath

//@version=5
strategy("TREND_CATCHER", overlay=true, commission_value=0.05, commission_type=strategy.commission.percent, initial_capital=1000)

//#####variables##############
profit_short=input(title='profit_short', defval=27)
stop_short=input(title='stop_short', defval=2)

stop_long=input(title='stop_long', defval=3)
profit_long=input(title='profit_long', defval=35)


media_1=input(title='media_1', defval=55)
media_2=input(title='media_2', defval=100)
resta_medias=input(title='resta_medias', defval=0)
resta_medias2=input(title='resta_medias2', defval=0)

RSI_periodos=input(title='RSI_periodos', defval=42)
//###############VARIABLES###################




//#####Alert#####
id_bot = ""
email_token = ""
long_open =""
long_close =""
short_open =""
short_close =""
//#  {{strategy.order.alert_message}}


//#############################
//#############################

//###############EMA##############/
//plot(ta.ema(close, 1), title='ema 5', color=color.white)
plot(ta.ema(close, 12), title='ema 12', color=color.white)
plot(ta.ema(close, 25), title='ema 25', color=color.white)
plot(ta.ema(close, 30), title='ema 30', color=color.white, linewidth=1)
plot(ta.ema(close, 40), title='ema 40', color=color.white, linewidth=1)
plot(ta.ema(close, 55), title='ema 55', color=color.orange, linewidth=1)
plot(ta.ema(close, 100), title='ema 100', color=color.red, linewidth=1)
plot(ta.ema(close, 200), title='ema 200', color=color.white, linewidth=3)

//#############################/





//######VISUAL#############
EMA50 = ta.ema(close, 55)
EMA100 = ta.ema(close, 100)


estado_medias=EMA50-EMA100




a = plot(EMA50, title="EMA(50)", color=color.orange, linewidth=1 ) 
b = plot(EMA100, title="EMA(100)", color=color.red, linewidth=1 )


var color col = na
col := estado_medias>resta_medias ? color.green : color.red
fill(a,b,color=col,transp=40)


//######VISUAL#############





Go_Short=(ta.crossunder(ta.ema(close,100),ta.ema(close,200)))
Go_Long=((ta.crossover(ta.ema(close,55),ta.ema(close,100))and(ta.ema(close,12)>ta.ema(close,200))))


strategy.close("enter long", (Go_Short),alert_message=long_open)

cancelar_short=((ta.crossunder(ta.ema(close,25),ta.ema(close,6))))



if Go_Short
    strategy.entry("enter short", strategy.short,1, alert_message=short_open) 
  
strategy.exit("cerrar short", "enter short", 1, profit=close*profit_short/100/syminfo.mintick, loss=close*stop_short/100/syminfo.mintick, alert_message=short_close)




strategy.close("enter short", (Go_Long),alert_message=short_close)
cancelar=((ta.crossunder(ta.ema(close,12),ta.ema(close,30))))



if Go_Long
    strategy.entry("enter long", strategy.long,1,alert_message=long_open)

strategy.exit("cerrar long", "enter long", 1, profit=close*profit_long/100/syminfo.mintick, loss=close*stop_long/100/syminfo.mintick, alert_message=long_close)




strategy.close("enter short", (cancelar_short),alert_message=short_close)

strategy.close("enter long", (cancelar),alert_message=long_close)


//posiciones abiertas
bgcolor((strategy.position_size > 0 or strategy.position_size < 0) ? color.blue : na, transp=70)









更多内容