渐变均线趋势跟踪策略运用多种不同周期的移动平均线,捕捉价格的趋势变化,辅以振荡器指标判断超买超卖区域,实现低买高卖的趋势跟踪交易策略。该策略适用于中长线持仓,追踪较为明显的趋势行情。
该策略使用18周期、26周期、36周期等多组移动平均线捕捉价格趋势。当短期均线上穿长期均线时认为处于上升趋势,做多;当短期均线下穿长期均线时认为处于下降趋势,做空。
同时,策略还运用MACD、RSI、EFI等振荡器指标判断超买超卖区域。如MACD柱形线由负转正做多,由正转负做空;RSI高位回落时做空,低位回升时做多;EFI指标小于0时做多,大于0时做空。
进场规则:
多单:短均线上穿长均线 AND MACD>0 AND RSI低位回升 AND EFI<0
空单:短均线下穿长均线 AND MACD<0 AND RSI高位回落 AND EFI>0
止损规则:
多单止损:EFI指标大于阈值 AND 价格跌破指定均线
空单止损:EFI指标小于阈值 AND 价格涨破指定均线
使用多组移动平均线捕捉趋势, nonlinearity meetings one has to be inclusive robustness and anti-fragility are key characteristics that help ensure resilience over time to capture major trend change points.
振荡器指标组合使用判断超买超卖区域,避免追高杀跌。
止损规则综合考虑趋势和资金流向,有效控制风险。
策略参数经过反复回测优化,可适应大部分行情环境。
操作频率适中,交易信号较为稳定,实现长线持有追踪趋势。
突发事件造成暴跌可能导致止损失效,应适当拉大止损幅度。
震荡行情中交易频率可能过高,应适当调整参数,降低交易频率。
持仓时间过长可能导致亏损扩大,应适当缩短均线周期,及时止损。
回测时存在过拟合风险,实盘效果待检验。
对交易频率和收益进行优化,找到最佳参数组合。
增加机器学习算法,动态优化参数,适应市场变化。
增加自适应止损机制,不同行情使用不同止损幅度。
结合更多指标确定入场时机,提高策略稳定性。
增加资金管理策略,控制单笔仓位规模,管理整体风险。
渐变均线趋势跟踪策略,以多均线判断趋势方向,结合指标过滤进入时机,能有效跟踪大趋势,实现长线持有稳定收益的目的。策略通过参数优化已具有一定稳定性,但仍需进一步完善风险控制和自适应机制,降低回撤和提高胜率。总体来说,该策略作为一种简单实用的趋势跟踪方案,核心理念具有较强可扩展性,值得进一步研究。
/*backtest
start: 2023-09-25 00:00:00
end: 2023-10-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © murdocksilva
//@version=5
strategy("Daily_Mid Term_Consulting BOLT")
//calculo longuitud
longuitud = input(58, title= "longitud_sma")
px = ta.sma(close, 1)
px2 = ta.sma(low, 1)
Length1 = input.int(18)
Length2 = input.int(18)
Length3 = input.int(26)
Length4 = input.int(36)
Length5 = input.int(78)
Length6 = input.int(1)
Length7 = input.int(1500)
Length8 = input.int(58)
Length9 = input.int(3000)
Length10 = input.int(2)
Length11 = input.int(14)
ma1 = ta.sma(low, Length1)
ma2 = ta.sma(high, Length2)
ma3 = ta.sma(close, Length3)
ma4 = ta.sma(close, Length4)
ma5 = ta.sma(close, Length5)
ma6 = ta.sma(close, Length6)
ma7 = ta.sma(close, Length7)
ma8 = ta.sma(close, Length8)
ma9 = ta.sma(close, Length9)
ma10 = ta.sma(close, Length10)
ma11 = ta.sma(close, Length11)
// calculo EFI
efi = (close[1]-close) * volume / 1000
efi_indicador = (efi[1] + efi) / 2
//Variable RSI - calculo desv estandar
b = (px-ma10)*(px-ma10)
b2 = (px[1]-ma10[1])*(px[1]-ma10[1])
c = b + b2
c2 = c / 2
desv = math.sqrt(c2)/10
//calculo MACD
macd = ma4 - ma5
//calculo RSI
rsi = ta.rsi(close, 9)
// calculo Divergencia
ma = ta.sma(close, longuitud)
dist = close - ma
porcentaje = dist * 100 / close
ma_dista = ta.sma(porcentaje, 333)
//condición de entrada y salida long
long = ma1[1] < ma1 and ma2[1] < ma2 and macd > 0 and px > ma3 and efi_indicador < 9 and px > ma7 and macd[1] < macd
clong = efi_indicador > 22000 and px < ma8
strategy.entry("BUY", strategy.long, when = long)
strategy.close("BUY", when = clong)
//condición de entrada y salida short
short = ma1[1] > ma1 and ma2[1] > ma2 and macd < 0 and px < ma3 and efi_indicador > 9 and macd[1] > macd
cshort = efi_indicador < 14000 and px > ma8 and ma11 > desv
strategy.entry("SELL", strategy.short, when = short)
strategy.close("SELL", when = cshort)
//SL Y TP
//strategy.exit("long exit", "Daily_Mid Term_Consulting BOLT", profit = close * 40 / syminfo.mintick, loss = close * 0.02 / syminfo.mintick)
//strategy.exit("shot exit", "Daily_Mid Term_Consulting BOLT", profit = close * 40 / syminfo.mintick, loss = close * 0.02 / syminfo.mintick)
// GRAFICA smas
plot(ma1, color=color.new(color.orange, 0))
plot(ma2, color=color.new(color.orange, 0))
plot(ma3, color=color.new(color.orange, 0))
plot(ma4, color=color.new(color.orange, 0))
plot(ma5, color=color.new(color.orange, 0))
plot(ma6, color=color.new(color.green, 0))
plot(ma7, color=color.new(color.orange, 0))
plot(ma8, color=color.new(color.orange, 0))
plot(ma9, color=color.new(color.orange, 0))
//GRAFICA MACD
plot(macd, color=color.new(color.red, 0), style = plot.style_columns)
//GRAFICA DIVERGENCIA
plot(porcentaje, style = plot.style_columns)
//GRAFICA MA DIVERGENCIA
plot(ma_dista, color=color.new(color.white, 0))
//GRAFICA MA DIVERGENCIA
plot(desv, color=color.new(color.blue, 0))
//GRAFICA EFI
plot(efi_indicador, color=color.new(color.yellow, 0))
// GRAFICA RSI
l1 = hline(70, color=color.new(color.green, 0))
l2 = hline(30, color=color.new(color.green, 0))
plot(rsi, color=color.new(color.white, 0))
//prueba 1 stop loss and take profit
//sl = 0.05
//tp = 0.1
//calculo de precio para sl y tp
//longstop=strategy.position_avg_price*(1-sl)
//longprofit=strategy.position_avg_price*(1+tp)
//shortstop=strategy.position_avg_price*(1+sl)
//shortprofit=strategy.position_avg_price*(1-tp)
//if (long)
// strategy.exit("BUY", strategy.long)
//sl and tp long|short
//if strategy.entry("BUY", strategy.long)
//if strategy.position_avg_price > 0
//strategy.exit("BUY", limit = longprofit, stop = longstop)
//if strategy.position_avg_price < 0
//strategy.exit("SELL", limit = shortprofit, stop=shortstop)