这个策略是基于移动平均线的多空策略。它使用3条不同参数的移动平均线进行交易信号生成。当价格上穿移动平均线时做多,下穿时做空。该策略有3条移动平均线,可以进行级别分批做多做空,实现趋势跟踪。
该策略使用sma函数计算长度为len的移动平均线ma。然后根据ma计算出3条平移一定比例的移动平均线longline1、longline2、longline3。其中longline1平移-4%,longline2平移-5%,longline3平移-6%。
在买入信号生成时,如果当前无仓位,当价格上穿longline1时开仓做多;如果已有1手仓位,当价格上穿longline2时再开1手;如果已有2手仓位,当价格上穿longline3时再开1手,最多持有3手多仓。
在卖出信号生成时,如果当前持有多仓,当价格下穿ma时平仓。
该策略可以通过分批分级做多,实现趋势跟踪效果。
风险解决方法:
该策略可以从以下几个方面进行优化:
增加其他指标判断,确定趋势方向,例如加入MACD判断趋势强弱
优化移动平均线参数,寻找最优参数组合
调整分批做多的数量和比例,防止追高杀入
增加移动止损机制,可以根据ATR来设置止损位
可以根据市场波动率动态调整仓位数,在波动大时减仓
测试不同品种参数效果,寻找最适合该策略的品种
开发Exit模块,在特定形态出现时考虑止盈退出
整体来说,该策略利用移动平均线判断趋势方向进行交易,通过分批分级做单可以跟踪趋势获利。但存在一定的滞后,追高风险。我们可以通过添加辅助判断指标、优化参数、调整仓位管理、增加止损机制等方式来优化该策略,使之能够适应不同市场情况,达到稳定可控的盈利效果。
/*backtest start: 2022-10-02 00:00:00 end: 2023-10-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's ShiftMA-multi Strategy v1.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(3, minval = 1, title = "MA Lenghs") src = input(ohlc4, title = "MA Source") longlevel1 = input(-4.0, title = "Long line 1") longlevel2 = input(-5.0, title = "Long line 2") longlevel3 = input(-6.0, title = "Long line 3") needoffset = input(true, title = "Offset") //Variables size = strategy.position_size mult = 1 / syminfo.mintick //MA ma = sma(src, len) longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult //Lines offset = needoffset ? 1 : 0 plot(ma, color = color.blue) plot(longline1, offset = offset, color = color.lime) plot(longline2, offset = offset, color = color.lime) plot(longline3, offset = offset, color = color.lime) //Trading lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] lots = 0.0 if ma > 0 lots := round(size / lot) strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0)) lots := round(size / lot) strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1)) lots := round(size / lot) strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2)) if size > 0 strategy.entry("TP", strategy.short, 0, limit = ma)