三移动平均趋势跟踪策略

Author: ChaoZhang, Date: 2024-02-02 17:30:09
Tags:

三移动平均趋势跟踪策略

概述

本策略名为“炫彩闪电”,是一个基于三条移动平均线的趋势跟随策略。它通过计算快线、中线和慢线的交叉来判断价格趋势,并以ATR值设置目标价位和止损价位。

策略原理

该策略使用以下三条移动平均线:

  1. 13日加权移动平均线,用于判断短期趋势
  2. 55日指数移动平均线,用于判断中期趋势
  3. 110日简单移动平均线,用于判断长期趋势

当快线上穿中线,中线上穿慢线时,判断为看多趋势;当快线下穿中线,中线下穿慢线时,判断为空头趋势。

为过滤掉部分噪音交易,策略还设置了多个辅助条件:

  1. 前5根K线低点都在中线之上
  2. 前2根K线有低点跌破中线
  3. 前1根K线收盘价在中线之上

符合这些条件时,会发出做多或做空的信号。每次只持有一个头寸,平仓或止损后才可再次开仓。

目标价位和止损价位根据ATR值的一定倍数设置。

优势分析

该策略具有以下优势:

  1. 使用三条移动平均线组合判断趋势,避免了单一指标判断失误的概率。
  2. 设置多个辅助条件过滤噪音交易,可以提高信号质量。
  3. ATR动态止损,有利于控制单笔亏损。

风险分析

该策略也存在以下风险:

  1. 移动平均线组合可能发出错误信号,需要充分回测。
  2. ATR倍数设置不当可能导致止损过于宽松或严格。
  3. 无法有效过滤突发事件的价格震荡。

为控制风险,建议适当调整移动平均线参数,优化ATR倍数,并设置最大持仓时间,避免单笔损失过大。

优化方向

该策略可从以下方面进行优化:

  1. 测试不同长度或类型的移动平均线。
  2. 优化辅助条件的参数。
  3. 尝试其他指标预测趋势。如MACD,DMI等。
  4. 结合量能指标如成交量,价差等过滤信号。

总结

本策略“炫彩闪电”整体是一个稳定的趋势跟随策略。它主要依靠移动平均线判断趋势方向,并有一定的技术指标组合作为辅助,可以过滤部分噪音。虽然仍有进一步优化的空间,但整体风险可控,适合跟随中长线趋势进行投资。


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
basePeriod: 15m
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/
// © greenmask9

//@version=4
strategy("Dazzling Bolts", overlay=true)
//max_bars_back=3000

// 13 SMMA
len = input(10, minval=1, title="SMMA Period")
src = input(close, title="Source")
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

// 55 EMA
emalength = input(55, title="EMA Period")
ema = ema(close, emalength)

// 100 SMA
smalength = input(110, title="SMA Period")
sma = sma(close, smalength)

emaforce = input(title="Force trend with medium EMA", type=input.bool, defval=true)
offsetemavalue = input(defval = 6)

bullbounce = smma>ema and ema>sma and low[5]>ema and low[2]<ema and close[1]>ema and (ema[offsetemavalue]>sma or (not emaforce))
bearbounce = smma<ema and ema<sma and high[5]<ema and high[2]>ema and close[1]<ema and (ema[offsetemavalue]<sma or (not emaforce))
plotshape(bullbounce,  title= "Purple", location=location.belowbar, color=#ff33cc, transp=0, style=shape.triangleup, size=size.tiny, text="Bolts")
plotshape(bearbounce,  title= "Purple", location=location.abovebar, color=#ff33cc, transp=0, style=shape.triangledown, size=size.tiny, text="Bolts")
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
longs = input(title="Test longs", type=input.bool, defval=true)
shorts = input(title="Test shorts", type=input.bool, defval=true)
atrlength = input(title="ATR length", defval=12)
atrm = input(title="ATR muliplier",type=input.float, defval=2)
atr = atr(atrlength)

target = close + atr*atrm
antitarget = close - (atr*atrm)

//limits and stop do not move, no need to count bars from since

bullbuy = bullbounce and longs and strategy.opentrades==0
bb = barssince(bullbuy)
bearsell = bearbounce and shorts and strategy.opentrades==0
bs = barssince(bearsell)

if (bullbuy)
    strategy.entry("Boltsup", strategy.long, ordersize)
    strategy.exit ("Bolts.close", from_entry="Boltsup", limit=target, stop=antitarget)
if (crossover(smma, sma))
    strategy.close("Boltsup", qty_percent = 100, comment = "Bolts.crossover")

if (bearsell)
    strategy.entry("Boltsdown", strategy.short, ordersize)
    strategy.exit("Bolts.close", from_entry="Boltsdown", limit=antitarget, stop=target)
if (crossunder(smma, sma))
    strategy.close("Boltsdown", qty_percent = 100, comment = "Bolts.crossover")

// if (bb<5)
//     bulltarget = line.new(bar_index[bb], target[bb], bar_index[0], target[bb], color=color.blue, width=2)
//     bullclose = line.new(bar_index[bb], close[bb], bar_index[0], close[bb], color=color.blue, width=2)
//     bullstop = line.new(bar_index[bb], antitarget[bb], bar_index[0], antitarget[bb], color=color.blue, width=2)
// if (bs<5)
//     bulltarget = line.new(bar_index[bs], antitarget[bs], bar_index[0], antitarget[bs], color=color.purple, width=2)
//     bullclose = line.new(bar_index[bs], close[bs], bar_index[0], close[bs], color=color.purple, width=2)
//     bullstop = line.new(bar_index[bs], target[bs], bar_index[0], target[bs], color=color.purple, width=2)


更多内容