策略
基于移动平均线的支撐阻力突破策略Moving-Average-Support-and-Resistance-Breakout-Strategy
ChaoZhang · PineScript · 突破 · 2023-09-28 15:20:47
概述
该策略基于移动平均线识别出关键的支撐和阻力价格区域,在这些区域发生突破时进行交易操作。策略简单有效,容易理解和实施。
策略原理
该策略使用长度为50周期的简单移动平均线SMA,来识别出关键的支撐和阻力区域。具体来说:
- 当收盘价从下方突破SMA时,取过去50周期内的最高价作为阻力位R
- 当收盘价从上方跌破SMA时,取过去50周期内的最低价作为支撐位S
- 收盘价超过阻力R时,做多
- 收盘价跌破支撐S时,做空
也就是说,该策略利用长度为50周期的SMA分割价格区域,当价格突破这些区域时,以相反方向进行交易。突破阻力做多,跌穿支撐做空。策略简单明了,容易操作。
优势
该策略具有以下优势:
- 使用移动平均线识别支撐阻力具有一定的可靠性,可以有效过滤假突破。
- 50周期长度不长不短,可以识别出较为重要的中期支撐阻力。
- 仅使用SMA一条指标,系统开销小,容易实现。
- 突破交易策略简单有效,容易操作。
- 可配置参数少,不容易过度优化。
风险
该策略也存在以下风险:
- 仍存在一定的假突破风险,移动平均线无法完全过滤。
- 固定周期无法适应市场各个周期,可能错过较短周期的机会。
- 突破后可能出现回调测试前高低,需要有一定的止损技巧。
- 长期持仓时,需要关注更大级别的趋势方向。
针对这些风险,可以通过适当调整移动平均线周期,或加入趋势过滤指标等进行优化。同时做好止损管理非常重要。
优化方向
该策略可以考虑从以下几个方向进行优化:
- 增加例如MACD等指标,辅助判断趋势方向和力度。
- 加入MA周期的自适应优化,让周期能够动态调整。
- 优化突破识别,例如要求同时突破MA和布林带上下轨等。
- 增加止损机制,以控制单笔损失。
- 尝试不同的MA周期参数,寻找最优参数组合。
通过这些优化,可以使策略更具弹性,在不同市场周期中都能发挥效果。
总结
整体来说,该策略利用简单移动平均线识别支撐阻力区域,进行价格突破操作,简单高效。优化空间也较大,可从多个维度进行改进。虽然存在一定的假突破风险,但配置合理的止损可以有效控制。该策略思路清晰易懂,非常适合作为初学者的入门策略来实践。
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| v_input_1 | 50 | 回溯期數 |
源码(61 行)
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-27 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
//-- 開源代碼受Mozilla公眾授權條款2.0版規範, 網址是https://mozilla.org/MPL/2.0/
//
//@version=4
//
// 作品: [LunaOwl] 支撐壓力策略第4版
// 英文: [LunaOwl] Support Resistance Strategy V4
//
////////////////////////////////
// ~~!!*(๑╹◡╹๑) ** //
// 製作: @LunaOwl 彭彭 //
// 日期: 2019年03月05日 //
// 修改: 2019年04月22日 //
// 四版: 2020年06月16日 //
// 發表: 2020年06月17日 //
////////////////////////////////
//==設定策略==//
strategy("[LunaOwl] 支撐壓力策略 [回測]",
shorttitle = "支撐壓力策略 [回測]",
overlay = true,
calc_on_order_fills = false,
calc_on_every_tick = false,
pyramiding = 0,
currency = currency.NONE,
initial_capital = 10000,
slippage = 5,
default_qty_value = 100,
default_qty_type = strategy.percent_of_equity,
commission_type = strategy.commission.percent,
commission_value = 0.05
)
LB = input(50, title = "回溯期數", type = input.integer)
R = valuewhen(cross(sma(close, LB),close), highest(high, LB), 1)
S = valuewhen(cross(close,sma(close, LB)), lowest( low, LB), 1)
plot(R, title = "壓力", color = color.green)
plot(S, title = "支撐", color = color.red)
//==定義輸出結果==//
Trend_up = crossover(close, R) ? 1 : 0
Trend_dn = crossunder(close, S) ? -1 : 0
//==設定出場規則==//
Enter = Trend_up == 1 and Trend_up[1] == 0 ? Trend_up : na
Exit = Trend_dn == -1 and Trend_dn[1] == 0 ? Trend_dn : na
strategy.entry("多", strategy.long, when = Enter)
strategy.entry("空", strategy.short, when = Exit)