本策略名称为“双指数移动平均线RSI交易策略”。该策略利用双指数移动平均线(Double EMA)和相对强弱指数(RSI)作为主要交易指标,实现机械化交易。
该策略首先计算价格的双指数移动平均线(MA),然后基于MA计算RSI,再计算RSI的指数移动平均线(Smooth)。当RSI上穿其移动平均线时生成买入信号;当RSI下穿其移动平均线时生成卖出信号。 optionally,该策略还设定了每日最大交易次数、交易资金份额、交易时间段、止损止盈点数以及追踪止损点数等参数进行风险控制。
对策:
1. 适当缩短移动平均线周期,提高敏感性。
2. 结合其它指标如成交量过滤信号。
3. 动态调整交易资金比例。
4. 根据市场波动性和变化调整止损止盈幅度。
5. 适当放宽追踪止损点数。
本策略整体 mechanic 规则明确,可靠性较高,适用于中长线趋势品种。优化后可成为基础的趋势跟踪机械交易策略,风险可控,值得进一步评估实盘效果。
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD) src = input(close) ma_length = input(21) rsi_length = input(4) rsi_smooth = input(4) ma = ema(ema(src, ma_length), ma_length) marsi = rsi(ma, rsi_length) smooth = ema(marsi, rsi_smooth) plot(title='M', series=marsi, color=black) plot(title='S', series=smooth, color=red) hline(0) hline(50) hline(100) max_order_per_day = input(6) // strategy.risk.max_intraday_filled_orders(max_order_per_day) trade_size_as_equity_factor = input(false) trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1) take_profit_in_points = input(100000) stop_loss_in_points = input(100000) trail_in_points = input(150) USE_SESSION = input(true) trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false) istradingsession = not USE_SESSION ? true : not na(time('1', trade_session)) buy_entry = istradingsession and crossover(marsi, smooth) sel_entry = istradingsession and crossunder(marsi, smooth) strategy.entry('buy', long=true, qty=1, when=buy_entry) strategy.entry('sel', long=false, qty=1, when=sel_entry) strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points) strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points) strategy.close_all(when=not istradingsession)