金叉死叉动态止损策略

Author: ChaoZhang, Date: 2023-11-01 13:46:28
Tags:

金叉死叉动态止损策略

概述

该策略通过计算ATR指标作为止损线,当价格上穿EMA时产生买入信号,当价格下穿EMA时产生卖出信号,并使用动态止损来管理风险。

策略原理

该策略的核心逻辑是:

  1. 计算ATR指标作为止损线,ATR值用来计算止损距离nLoss

  2. 根据Heikin Ashi蜡烛选项h来决定价格源,默认使用收盘价close,如果选择了Heikin Ashi则使用该蜡烛的收盘价

  3. 定义xATRTrailingStop作为动态跟踪止损线,根据价格与前一根K线的止损线比较,来确定当前K线的止损线

  4. 定义仓位pos,当价格上穿止损线时设置为1(做多),当价格下穿止损线时设置为-1(做空),否则为0(空仓)

  5. 计算一根K线的EMA均线值,定义指标上穿(买入信号)和下穿(卖出信号)

  6. 在买入和卖出信号发生时,设置交易入场和出场

  7. 使用barcolor函数根据仓位标记K线的颜色

  8. 使用plotshape在买入和卖出时标记信号

该策略通过ATR动态止损来管理风险,在趋势出现时能够及时入场,在止损线触发时及时止损。

策略优势

该策略具有以下优势:

  1. 使用ATR动态止损,可以根据市场波动程度来调整止损距离,在保证止损的同时也避免过于激进的止损被价格短期波动触发

  2. 采用EMA产生交易信号,可以过滤掉部分假突破带来的不必要交易

  3. 允许选择Heikin Ashi蜡烛作为价格源,可以过滤噪音以识别趋势

  4. 仓位管理清晰,做多做空仓位明确,避免追踪止损产生的交易频繁

  5. 通过画线、标记和染色直观显示交易信号和止损情况

  6. 策略逻辑简单清晰,容易理解和修改

  7. 可自定义ATR周期和ATR止损倍数,适应不同市场环境

综上,该策略整合趋势跟踪和动态止损技术,可以有效识别趋势并管理风险,适用于跟踪中长线趋势的交易。

策略风险

该策略也存在一定风险:

  1. EMA均线产生交易信号可能滞后,错过短线机会

  2. 止损距离由ATR决定,在市场震荡时容易频繁止损

  3. 未考虑成本因素,实际交易中双边手续费会影响盈利

  4. 未设置适当的头寸控制,在资金管理上有待改进

  5. 效果依赖参数优化,不同市场需要调整参数

  6. 大幅震荡市场中容易被套牢

  7. 须适时监控,及时干预或停止策略

可以通过适当优化参数,设置头寸控制,结合其它指标过滤信号等方法来减少风险。在实盘交易中要控制仓位规模,持续监控策略效果,必要时人工干预或关闭。

优化方向

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

  1. 调整ATR参数,在不同市场中使止损距离更合理

  2. 测试不同均线指标,进一步过滤假信号

  3. 增加趋势判断指标,识别趋势方向后再入场

  4. 设置头寸控制,限制单向仓位数量

  5. 增加开仓条件,如交易量,收盘价远离均线等

  6. 考虑成本因素,根据手续费设置止损距离

  7. 优化买入卖出时机,结合多种信号和指标

  8. 设置部分止盈或移动止盈

  9. 添加参数优化功能,自动优化测试参数

通过综合运用多种技术指标和优化方法,可以进一步完善该策略,在更多市场中获得更稳定的效果。

总结

该策略整合动态止损和趋势跟踪技术,具有止损有效、跟踪顺畅、易于理解和优化等优点,适用于跟踪中长线趋势模式。但也要注意控制风险,优化参数。如果用好该策略,在趋势明显的市场中,可以获得不错的效果。总体来说,该策略提供了一个简洁实用的趋势跟踪和风险管理的交易思路。


/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy)
strategy.entry("short", false, when = sell)

更多内容