本策略利用双移动平均线形成通道,以捕捉趋势的方向。当价格突破通道时产生交易信号。同时结合RSI指标过滤假突破。仅在伦敦交易时段操作,每天最多5单,最大亏损不超过2%。
该策略使用两个长度为5的移动平均线,一个计算自最高价,一个计算自最低价,形成一个价格通道。当收盘价突破通道上沿时做多,突破通道下沿时做空。
为过滤假突破,还引入RSI指标判断超买超卖。仅在RSI高于80时做多,低于20时做空。
此外,策略只在伦敦交易时段(上午3点至11点)交易,每天最多5笔订单,最大亏损不超过股票权益的2%。
双移动平均线构建趋势通道,能较好地判断价格趋势方向。当价格向上突破通道上轨时,捕捉到价格的上扬趋势;当价格向下突破通道下轨时,捕捉到价格的下跌趋势。
结合RSI指标判断超买超卖区域,可以一定程度上减少因价格震荡导致的假突破。
策略仅在主要活跃交易时间段进行交易,每天最多5笔订单可有效控制交易频率;最大亏损设置为2%可将单日最大损失控制在可承受范围。
当价格出现大幅震荡时,可能出现一定的假突破信号,这会导致不必要的交易亏损。可以通过调整参数优化,或增加过滤条件来减少该风险。
策略采用固定数量的点数止损止盈,当价格出现大幅波动时,固定点数的止损止盈容易被套,应对此采用百分比或者动态止损止盈。
策略仅在固定的交易时段开仓,如果在该时段没有产生信号,会错过其他时段潜在的交易机会。可以考虑适当扩大交易时间或根据实时情况动态调整。
可以对移动平均线长度、RSI参数、固定止损止盈点数等进行优化,找到最优参数组合。
可以增加其他指标或条件对突破信号进行二次校验,如增大交易量、缩小布林线通道等,减少假突破。
可以采用百分比止损或动态止损策略,而不是简单的固定点数止损,更好对冲单边行情的风险。
对信号进行人工复核,或者只在确认突破后入场,避免被套。
本策略总体较为简单实用,通过双移动平均构建通道判断趋势方向;同时RSI指标可有效过滤部分假突破。风险控制方面,限定交易时段和最大损失可控制总体风险。优化空间还比较大,可从参数优化、止损机制升级等方面进行改进。
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-16 23:59:59 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/ // © SoftKill21 //@version=4 strategy(title="Moving Average", shorttitle="MA", overlay=true) timeinrange(res, sess) => time(res, sess) != 0 len = input(5, minval=1, title="Length") src = input(high, title="Source") offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) out = sma(src, len) plot(out, color=color.white, title="MA", offset=offset) len2 = input(5, minval=1, title="Length") src2 = input(low, title="Source") offset2 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) out2 = sma(src2, len2) plot(out2, color=color.white, title="MA", offset=offset2) length = input( 5 ) overSold = input( 10 ) overBought = input( 80 ) price = input(close, title="Source RSI") vrsi = rsi(price, length) longcond= close > out and close > out2 and vrsi > overBought shortcont = close < out and close < out2 and vrsi < overSold tp=input(150,title="tp") sl=input(80,title="sl") strategy.entry("long",1,when=longcond) //strategy.close("long",when= close < out2) strategy.exit("long_exit","long",profit=tp,loss=sl) strategy.entry("short",1,when=shortcont) //strategy.close("short",when=close >out) strategy.exit("short_exit","short",profit=tp,loss=sl) // maxOrder = input(6, title="max trades per day") // maxRisk = input(2,type=input.float, title="maxrisk per day") // strategy.risk.max_intraday_filled_orders(maxOrder) // strategy.risk.max_intraday_loss(maxRisk, strategy.percent_of_equity) // strategy.close_all(when =not timeinrange(timeframe.period, "0300-1100"))