本策略通过结合移动平均聚散指标(MACD)和随机相对强弱指标(Stoch RSI)两个因子来判断行情趋势方向,在趋势向上时做多,趋势向下时做空,属于趋势追踪类型策略。
本策略使用了MACD和Stoch RSI两个指标判断市场趋势方向。
MACD指标是由快线(ema快线)和慢线(ema慢线)及其差值组成,其反映了短期和长期平均线的聚合和分离状况。当快线上穿慢线时为买入信号,快线下穿慢线时为卖出信号。
Stoch RSI指标结合了RSI指标和Stoch指标的优点,可以显示市场的超买超卖现象。Stoch RSI大于Stoch RSI信号线时为买入信号,小于信号线时为卖出信号。
本策略在日线和4小时线上使用MACD和Stoch RSI判断市场趋势方向。当日线和4小时线上的两个指标同时发出买入信号时,做多;当两个指标同时发出卖出信号时,做空。这样可以有效过滤假信号,提高信号的可靠性。
结合双重因子判断市场走势,可以有效过滤假信号,提高信号准确率
在高低时间轴(日线和4小时线)验证信号,避免被套利
追踪趋势运行,避开震荡市
策略思路清晰简单,容易理解执行
调整MACD和Stoch RSI的参数,优化买卖点
增加移动止损策略,锁定盈利
增加资金管理模块,控制单笔仓位
结合更多因子判断,增加信号准确率
采用机器学习方法动态优化参数
本策略通过双因子模型判断行情趋势方向,结合高低时间轴验证信号,是一种较为稳定可靠的趋势追踪策略。具备一定的风险防范能力和容错空间。后期通过参数优化、止损策略、资金管理等模块的加入,可望获得更好的策略表现。
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title='[RS]Khizon (UGAZ) Strategy V0', shorttitle='K', overlay=false, pyramiding=0, initial_capital=100000, currency=currency.USD)
// || Inputs:
macd_src = input(title='MACD Source:', defval=close)
macd_fast = input(title='MACD Fast Length:', defval=12)
macd_slow = input(title='MACD Slow Length:', defval=26)
macd_signal_smooth = input(title='MACD Signal Smoothing:', defval=9)
srsi_src = input(title='SRSI Source:', defval=close)
srsi_rsi_length = input(title='SRSI RSI Length:', defval=14)
srsi_stoch_length = input(title='SRSI Stoch Length:', defval=14)
srsi_smooth = input(title='SRSI Smoothing:', defval=3)
srsi_signal_smooth = input(title='SRSI Signal Smoothing:', defval=3)
// || Strategy Inputs:
trade_size = input(title='Trade Size in USD:', type=float, defval=1)
buy_trade = input(title='Perform buy trading?', type=bool, defval=true)
sel_trade = input(title='Perform sell trading?', type=bool, defval=true)
// || MACD(close, 12, 26, 9): ||---------------------------------------------||
f_macd_trigger(_src, _fast, _slow, _signal_smooth)=>
_macd = ema(_src, _fast) - ema(_src, _slow)
_signal = sma(_macd, _signal_smooth)
_return_trigger = _macd >= _signal ? true : false
// || Stoch RSI(close, 14, 14, 3, 3) ||-----------------------------------------||
f_srsi_trigger(_src, _rsi_length, _stoch_length, _smooth, _signal_smooth)=>
_rsi = rsi(_src, _rsi_length)
_stoch = sma(stoch(_rsi, _rsi, _rsi, _stoch_length), _smooth)
_signal = sma(_stoch, _signal_smooth)
_return_trigger = _stoch >= _signal ? true : false
// ||-----------------------------------------------------------------------------||
// ||-----------------------------------------------------------------------------||
// || Check Directional Bias from daily timeframe:
daily_trigger = security('NGAS', 'D', f_macd_trigger(macd_src, macd_fast, macd_slow, macd_signal_smooth) and f_srsi_trigger(srsi_src, srsi_rsi_length, srsi_stoch_length, srsi_smooth, srsi_signal_smooth))
h4_trigger = security('NGAS', '240', f_macd_trigger(macd_src, macd_fast, macd_slow, macd_signal_smooth) and f_srsi_trigger(srsi_src, srsi_rsi_length, srsi_stoch_length, srsi_smooth, srsi_signal_smooth))
plot(title='D1T', series=daily_trigger?0:na, style=circles, color=blue, linewidth=4, transp=65)
plot(title='H4T', series=h4_trigger?0:na, style=circles, color=navy, linewidth=2, transp=0)
sel_open = sel_trade and not daily_trigger and not h4_trigger
buy_open = buy_trade and daily_trigger and h4_trigger
sel_close = not buy_trade and daily_trigger and h4_trigger
buy_close = not sel_trade and not daily_trigger and not h4_trigger
strategy.entry('sel', long=false, qty=trade_size, comment='sel', when=sel_open)
strategy.close('sel', when=sel_close)
strategy.entry('buy', long=true, qty=trade_size, comment='buy', when=buy_open)
strategy.close('buy', when=buy_close)