
本策略通过组合使用3条不同周期的简单移动平均线(SMA)与Kaufman自适应移动平均线,形成长线入场信号。当短周期SMA上穿较长周期的SMA时产生买入信号。此外,策略还结合K线实体颜色判断主趋势,只在多头趋势中产生买入信号,避免假突破。
本策略使用3条不同周期的SMA,包括SMA 4、SMA 9和SMA 18。这3条SMA的交叉组合是经典的判断趋势方向的技术指标。当SMA 4上穿SMA 9,并且SMA 9上穿SMA 18时,产生长线的买入信号。
为了过滤假突破,本策略还引入了Kaufman自适应移动平均线。只有当收盘价高于自适应移动平均线,即处于多头趋势时,SMA的金叉信号才生效启动长线。
此外,本策略还使用100周期的SMA判断主趋势。当价格上穿100周期SMA时,确认进入多头趋势。策略只在主多头趋势中产生买入信号。
综上,本策略的买入信号来自以下几部分的组合: 1. SMA 4上穿SMA 9,并且SMA 9上穿SMA 18,形成短周期SMA的金叉 2. 收盘价高于Kaufman自适应移动平均线,处于多头趋势 3. 价格上穿100周期SMA,确认主多头
当上述3个条件同时满足时,产生长线买入信号。
本策略具有以下几点优势:
本策略也存在一些风险:
可以通过以下方式优化: 1. 适当缩短中长期SMA的周期,增加入场机会 2. 加入其它辅助指标,如成交量指标,确认趋势的可靠性 3. 采取科学止损,合理控制回撤
本策略还有进一步优化的空间:
本策略通过多重SMA交叉形成长线信号,同时结合自适应移动平均线和主趋势判断,可在趋势行情中获取较大收益,具有稳定的逻辑和较强的实战效果。但也存在一定的风险,需要继续优化以降低回撤和提高胜率。本策略为长线持仓策略,适合有耐心和风险控制能力的投资者。
/*backtest
start: 2022-11-17 00:00:00
end: 2023-11-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wielkieef
//@version=5
strategy(title='twisted SMA strategy [4h] ', overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)
src = close
Length1 = input.int(4, title=' 1-SMA Lenght', minval=1, group='SMA')
Length2 = input.int(9, title=' 2-SMA Lenght', minval=1, group='SMA')
Length3 = input.int(18, title=' 3-SMA Lenght', minval=1, group='SMA')
SMA1 = ta.sma(close, Length1)
SMA2 = ta.sma(close, Length2)
SMA3 = ta.sma(close, Length3)
Long_ma = SMA1 > SMA2 and SMA2 > SMA3
Short_ma = SMA1 < SMA2 and SMA2 < SMA3
LengthMainSMA = input.int(100, title=' SMA Lenght', minval=1)
SMAas = ta.sma(src, LengthMainSMA)
// Powered Kaufman Adaptive Moving Average by alexgrover (modificated by Wielkieef)
lengthas = input.int(25, title=' Lenght')
sp = input.bool(true, title=' Self Powered')
er = math.abs(ta.change(close, lengthas)) / math.sum(math.abs(ta.change(close)), lengthas)
pow = sp ? 1 / er : 2
per = math.pow(math.abs(ta.change(close, lengthas)) / math.sum(math.abs(ta.change(close)), lengthas), pow)
a = 0.
a := per * src + (1 - per) * nz(a[1], src)
mad4h = 0.
a_f = a / a[1] > .999 and a / a[1] < 1.001
///.
Bar_color = close > SMAas ? color.green : Long_ma ? color.blue : Short_ma ? color.maroon : color.gray
barcolor(color=Bar_color)
long_cond = Long_ma and SMAas < close and not a_f
long_stop = Short_ma
if long_cond
strategy.entry('BUY', strategy.long)
strategy.close_all(when=long_stop)
//by wielkieef