本策略通过计算两条不同参数的移动平均线,当快线上穿慢线时生成买入信号。同时利用平均真实波动范围计算追踪止损价位,当价格跌破该止损价位时产生卖出信号。该策略能够有效跟踪市场趋势,在盈利后及时止损。
该策略融合趋势跟踪和止损管理的优点,既可以跟踪中长线方向,又可以通过止损来控制单笔损失。
可以适当优化移动平均线参数,或调整ATR倍数来平衡止损幅度。也可以结合其他指标作为过滤条件来改善入场时机。
本策略成功融合移动平均线的趋势跟踪和ATR动态止损,通过参数优化可以适应不同股票特性。该策略形成了清晰的买入定界和止损定界,使交易逻辑简单清楚。总体来说,该双移动均线追踪止损策略稳定、简单、易于优化,适合作为股票交易的基础策略。
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //created by XPloRR 24-02-2018 strategy("XPloRR MA-Buy ATR-MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100) testStartYear = input(2005, "Start Year") testStartMonth = input(1, "Start Month") testStartDay = input(1, "Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2050, "Stop Year") testStopMonth = input(12, "Stop Month") testStopDay = input(31, "Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriodBackground = input(title="Background", type=bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) emaPeriod = input(12, "Exponential MA") smaPeriod = input(45, "Simple MA") stopPeriod = input(12, "Stop EMA") delta = input(6, "Trailing Stop #ATR") testPeriod() => true emaval=ema(close,emaPeriod) smaval=sma(close,smaPeriod) stopval=ema(close,stopPeriod) atr=sma((high-low),15) plot(emaval, color=blue,linewidth=1) plot(smaval, color=orange,linewidth=1) plot(stopval, color=lime,linewidth=1) long=crossover(emaval,smaval) short=crossunder(emaval,smaval) //buy-sell signal stop=0 inlong=0 if testPeriod() if (long and (not inlong[1])) strategy.entry("buy",strategy.long) inlong:=1 stop:=emaval-delta*atr else stop:=iff((nz(emaval)>(nz(stop[1])+delta*atr))and(inlong[1]),emaval-delta*atr,nz(stop[1])) inlong:=nz(inlong[1]) if ((stopval<stop) and (inlong[1])) strategy.close("buy") inlong:=0 stop:=0 else inlong:=0 stop:=0 plot(stop,color=green,linewidth=1)