
本策略利用均线和超越指标判断市场趋势,结合跟踪止损机制,设计一个跟踪止损交易策略。当超越指标判断为上升趋势时,如果收盘价上穿14周期均线,则做多;当超越指标判断为下降趋势时,如果收盘价下穿14周期均线,则做空。做多做空后,会根据止损点的位置进行止损。
本策略使用了均线、超越指标和跟踪止损三个技术指标。
首先,计算14周期和44周期的指数移动均线。其中14周期均线用于判断短期趋势,44周期均线用于判断长期趋势。当短期均线上穿长期均线时为看多信号,反之看空。
其次,计算超越指标判断当前市场趋势。超越指标由正向指标DI+和反向指标DI-组成。当DI+高于DI-时,为看多趋势;当DI-高于DI+时,为看空趋势。
最后,结合均线信号和超越指标的趋势判断,产生交易信号。当超越指标为看多,且价格上穿14周期均线时,做多;当超越指标为看空,且价格下穿14周期均线时,做空。入场后,将止损点设置为44周期均线附近,实现跟踪止损。
本策略综合利用了三种技术指标的优势,判断准确,止损及时,具有如下优势:
本策略也存在一些风险:
对应解决方法:
本策略还可以从以下几个方向进行优化:
增加其他指标判断,过滤错误信号,提高策略胜率。例如结合交易量指标,强化趋势。
优化跟踪止损方式,让止损更加智能和灵活。例如根据ATR止损、 Chandelier Exit等。
利用机器学习方法寻找更优的参数。例如遗传算法、深度学习等寻找最优参数组合。
在更高时间框架上运行策略,避免被高频噪音干扰。
本策略综合运用均线、超越指标和跟踪止损技术,判断信号准确,止损及时,是一种务实可靠的跟踪止损交易策略。后续可通过提高信号质量、优化止损方式等进一步增强策略效果。
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Santanu Strategy", overlay=true)
atrPeriod = input(3, "ATR Length")
factor = input.float(1, "Factor", step = 0.01)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
len = input.int(14, minval=1, title="Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out = ta.ema(src, len)
len44 = input.int(44, minval=1, title="Length")
out44 = ta.ema(src, len44)
isRising = ta.rising(out, 1)
isFalling = ta.falling(out, 1)
plotColor = color.black
if isRising
plotColor := color.green
else if isFalling
plotColor := color.red
plot(out, color=plotColor, title="MA", offset=offset)
plot(out44, color=color.blue, title="MA", offset=offset)
if direction < 0
if close >= out
//if low >= out44
if isRising
strategy.entry("Buy Now", strategy.long)
if direction > 0
if close <= out
//if high <= out44
if isFalling
strategy.entry("Sell Now", strategy.short)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)