本策略是一个利用均线和EMA实现跨时间框架趋势交易的策略。策略通过结合不同周期的SMA、EMA以及K线实体判断趋势方向,实现低风险的趋势追踪。
该策略主要基于三个周期不同的SMA均线比较,判断价格走势。另外辅助使用EMA判断实体方向。
具体来说,策略使用了3个周期的SMA均线,分别是3周期、8周期和10周期的SMA。价格在三条均线之下时视为处于跌势,当价格重新回升到均线上时,发出买入信号。
此外,策略还使用5周期的EMA辅助判断K线实体方向,确保买入时实体向上。
在持仓管理上,策略设定盈利次数或最大持仓周期作为止损方式。
该策略结合不同时间周期的均线实现对趋势的判断,能够有效过滤市场噪音,追踪中长线趋势。策略参数经过优化,在历史回测中表现不俗。
另外,策略加入EMA判断,能够避免买入K线实体向下的情况,从而减少不必要的滑点损失。
总的来说,该策略稳定、可靠,适合中长线追踪使用。
该策略对参数比较敏感,3个SMA周期或EMA周期设置不当会导致交易信号质量下降。需要针对不同品种进行参数优化。
策略没有考虑大幅度跳空或缺口的情况。如果遇到重大消息导致价格大幅跳空,则可能造成一定损失。可以设置价格止损来规避此风险。
可以考虑加入更多周期参数,形成多时间框架的EMA或SMA比较,使策略对趋势的判断更加准确。
可以测试一定幅度的价格止损设置,在保证盈利的前提下,降低极端行情的损失。
可以尝试引入机器学习对参数进行动态优化,使策略参数能根据实时市场情况进行调整。
该策略整体来说稳健可靠,利用均线比较判断趋势方向,再辅以EMA过滤信号。通过参数优化和风控设置,可以进一步提高策略胜率和盈利率。值得进一步研究和应用。
/*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=3 strategy("Free Strategy #02 (ES / SPY)", overlay=true) // Inputs Quantity = input(1, minval=1, title="Quantity") SmaPeriod01 = input(3, minval=1, title="SMA Period 01") SmaPeriod02 = input(8, minval=1, title="SMA Period 02") SmaPeriod03 = input(10, minval=1, title="SMA Period 03") EmaPeriod01 = input(5, minval=1, title="EMA Period 01") MaxProfitCloses = input(5, minval=1, title="Max Profit Close") MaxBars = input(10, minval=1, title="Max Total Bars") // Misc Variables src = close BarsSinceEntry = 0 MaxProfitCount = 0 Sma01 = sma(close, SmaPeriod01) Sma02 = sma(close, SmaPeriod02) Sma03 = sma(close, SmaPeriod03) Ema01 = ema(close, EmaPeriod01) // Conditions Cond00 = strategy.position_size == 0 Cond01 = close < Sma03 Cond02 = close <= Sma01 Cond03 = close[1] > Sma01[1] Cond04 = open > Ema01 Cond05 = Sma02 < Sma02[1] // Update Exit Variables BarsSinceEntry := Cond00 ? 0 : nz(BarsSinceEntry[1]) + 1 MaxProfitCount := Cond00 ? 0 : (close > strategy.position_avg_price and BarsSinceEntry > 1) ? nz(MaxProfitCount[1]) + 1 : nz(MaxProfitCount[1]) // Entries strategy.entry(id="L1", long=true, qty=Quantity, when=(Cond00 and Cond01 and Cond02 and Cond03 and Cond04 and Cond05)) // Exits strategy.close("L1", (BarsSinceEntry - 1 >= MaxBars or MaxProfitCount >= MaxProfitCloses))