趋势SMA交易策略1.1


创建日期: 2023-09-22 16:40:33 最后修改: 2023-09-22 16:40:33
复制: 0 点击次数: 560
avatar of ChaoZhang ChaoZhang
1
关注
1366
关注者

概述

这是一个只使用两个简单移动平均线(SMA)的交易策略。该策略使用慢速SMA线定义趋势方向,使用快速SMA线确定具体入市点。该策略适用于小时级别及以上周期的加密货币交易。

策略原理

该策略通过计算快速SMA线和慢速SMA线来判断趋势方向。具体来说:

  • 慢速SMA线(蓝色)用于定义趋势方向。当价格低于慢速SMA时,定义为下降趋势;当价格高于慢速SMA时,定义为上升趋势。

  • 快速SMA线(红色)用于确定具体的入市时机。在上升趋势下,当K线收盘价低于开盘价,且低于快速SMA时,做多;在下降趋势下,当K线收盘价高于开盘价,且高于快速SMA时,做空。

该策略同时考虑K线实体颜色,只在该策略定义的趋势方向时才入场。即在上升趋势下看多单信号,在下降趋势下看空单信号,从而避免逆势交易。

策略优势

  • 该策略仅需要SMA两个最基础的指标,非常简单易懂。
  • 结合两个SMA平滑曲线判断趋势非常可靠,避免被市场噪音误导。
  • 考虑K线实体颜色,避免逆势入场,可大幅降低交易风险。
  • 可配置快慢SMA参数,适应不同市场环境。
  • 可单独做多或做空,灵活适应多空市。

风险分析

  • SMA滞后性较强,可能错过趋势转折点。
  • 固定参数无法适应多变市场,需要调整参数。
  • 趋势判断可能错误,产生逆势交易风险。
  • 单一指标组合,缺乏确认,存在多余入场风险。

针对上述风险,可以从以下方面进行优化:

  1. 结合MACD等指标验证趋势判断。

  2. 加入止损策略控制风险。

  3. 增加参数优化模块,实现参数自适应。

  4. 增加进场确认指标,避免多余入场。

策略优化方向

该策略主要可从以下几个方面进行优化:

  1. 参数优化。可以加入参数优化模块,根据不同市场环境自动调整SMA参数,实现参数自适应。

  2. 进场确认。可以加入MACD、布林带等指标,对SMA趋势进行多方验证,避免错误信号。

  3. 止损策略。可以设置移动止损、时间止损等策略,在入场后及时止损,控制风险。

  4. 回撤控制。可以设置最大回撤比例,当达到回撤比例时关闭所有仓位,避免亏损扩大。

  5. 跨时间周期验证。可以引入更高时间周期指标,验证较低周期SMA信号的可靠性。

  6. 增加做多做空选择。可以增加开关选择只做多或只做空,适应不同市场情况。

总结

该策略整体思路清晰易懂,使用简单常用指标判断趋势,可靠性较高。但存在一定盈利空间有限、风险控制不足等问题。下一步可从参数优化、风险控制等方面进行策略优化,使策略参数更符合市场环境,并能够有效控制交易风险,进一步提高策略优势。

策略源码
/*backtest
start: 2023-08-22 00:00:00
end: 2023-09-21 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Noro's Trend SMA Strategy v1.1", shorttitle = "Trend SMA str 1.1", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

fastlen = input(5, "fast SMA Period")
slowlen = input(15, "slow SMA Period")
only = input(false, "Only long?")

fastsma = ema(close, fastlen)
slowsma = ema(close, slowlen)

trend = low > slowsma ? 1 : high < slowsma ? -1 : trend[1]

up = trend == 1 and low < fastsma and close < open ? 1 : 0
dn = trend == -1 and high > fastsma and close > open ? 1 : 0

plot(fastsma, color = red, title = "Fast SMA")
plot(slowsma, color = blue, title = "Slow SMA")

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, only == true ? 0 : na)