该策略是一个基于双EMA均线的动态止损追踪策略。它使用9日线、20日线判断市场趋势方向,结合RSI指标过滤假断裂。同时使用ATR指标计算动态止损位和止盈位。该策略适用于中长线持仓。
该策略使用9日EMA作为短期均线,20日EMA作为中期均线,判断价格趋势。当价格上穿短期均线,并且收盘价高于前一日最高价,同时RSI高于30时,做多;当价格下穿短期均线,并且收盘价低于前一日最低价,同时RSI低于70时,做空。
止损位设置为收盘价减去1.5倍的ATR值,止盈位为收盘价加上ATR值乘以止盈系数。同时使用ATR的2倍设定趋势跟踪止损。
1.测试不同参数的EMA组合,找到最优参数 2.优化RSI参数,平衡入场准确率和把握机会之间的关系 3.测试不同的止损止盈比例,找到最优配置 4.加入更多过滤指标条件,减少止损被突破概率
该策略整体来说是一种较为稳定的中长线持仓策略。它结合双EMA判断市场主要趋势,避免被短期市场噪音影响决策。RSI指标的加入也在一定程度上过滤了假突破。此外,动态止损止盈机制也让该策略可以根据市场波动程度来调整自己的止损止盈水平。但是该策略也存在一定的风险,比如均线的滞后性,以及止损突破的可能性。这需要我们在实际应用中,通过不同的参数调整和优化来找到最佳配置。
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("CJTrade", overlay=true) short = ema(close, 9) medium = ema(close, 20) long = ema(close, 50) very_long = ema(close, 200) plot(short, color=color.gray, linewidth=1) plot(medium, color=color.red, linewidth=1) plot(long, color=color.black, linewidth=1) plot(very_long, color=color.blue, linewidth=1) rsiValue = rsi(close, 14) near20EMA = close > medium - atr(14) longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA strategy.entry("Long", strategy.long, when=longCond) strategy.entry("Short", strategy.short, when=shortCond) atrValue = atr(14) stopLossLevel = close - atrValue * 1.5 // Dynamic take profit level based on ATR takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1) takeProfitLevel = close + atrValue * takeProfitMultiplier // Trailing stop loss for long positions longTrailingStop = close - atrValue * 2 strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop) // Trailing stop loss for short positions shortTrailingStop = close + atrValue * 2 strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop) strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel) strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)