ZZ-4价格通道突破策略


创建日期: 2023-09-21 10:59:55 最后修改: 2023-09-21 10:59:55
复制: 0 点击次数: 440
avatar of ChaoZhang ChaoZhang
1
关注
1235
关注者

概述

本策略基于ZZ指标的价格通道进行交易,利用价格向上突破通道上限或向下跌破通道下限的信号来建立多头或空头仓位。该策略试图捕捉价格通道范围外的趋势爆发。

策略原理

  1. 计算价格通道的上下限
  2. 当价格上涨突破上限时做多
  3. 当价格下跌突破下限时做空
  4. 设置起止交易时间
  5. 每日收市前清仓

具体来说,该策略通过ZZ指标计算出价格通道的上下限。当价格从下方突破上限时,做多入场;从上方突破下限时,做空入场。做多做空后均采用止损单,以价格通道上下限作为止损位。同时设置日期时间范围,在该范围内交易,每日收市前清仓以避免隔夜风险。

优势分析

  1. 利用价格通道判断潜在趋势突破点,具有一定的趋势识别能力
  2. 交易信号简单直观容易判断
  3. 可自定义通道周期参数,适应不同品种和周期
  4. 设置日期范围和每日清仓有助于风险控制
  5. 采用止损单,可限制单笔亏损

风险分析

  1. 价格通道范围内波动可能导致多次止损
  2. 需适时调整参数,否则通道范围可能不准确
  3. 突破有可能是假突破,存在被套风险
  4. 潜在盈利受限制于价格通道范围
  5. 未充分利用趋势行情的利润空间

可通过放宽通道区间、优化止损策略、判断趋势实力等方式来降低上述风险。

优化方向

  1. 测试不同参数找出最佳组合
  2. 放宽价格通道范围以捕捉更大行情
  3. 引入趋势判断指标避免假突破
  4. 优化止损策略,防止被套
  5. 加大持仓比例以最大化突破获利
  6. 评估不同日期范围的收益率

总结

本策略基于价格通道判断趋势爆发点进行交易。优点是交易信号简单,止损清晰,易于操作;缺点是存在频繁跳空和未充分利用趋势两方面。通过参数优化、策略组合等方式可以在保持优势的同时克服上述缺点。该策略可助力交易者掌握价格通道的应用技巧。

策略源码
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ZZ-4 Strategy", shorttitle = "Noro's ZZ-4 Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
len = input(7, minval = 1, title = "Length")
showll = input(true, defval = true, title = "Show Levels")
showbg = input(false, defval = false, title = "Show Background")
showpc = input(false, defval = false, title = "Show Price Channel")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Price channel
h = highest(ohlc4, len)
l = lowest(ohlc4, len)
pccol = showpc ? color.blue : na
plot(h, color = pccol, transp = 0)
plot(l, color = pccol, transp = 0)

//Levels
ml = 0
ml := l > l[1] ? 1 : l < l[1] ? -1 : ml[1]
ll = 0.0
ll := ml == 1 and ml[1] == -1 ? l[1] : ll[1]
mh = 0
mh := h > h[1] ? 1 : h < h[1] ? -1 : mh[1]
hl = 0.0
hl := mh == -1 and mh[1] == 1 ? h[1] : hl[1]

//Lines
colorh = showll and hl == hl[1] ? color.lime : na
colorl = showll and ll == ll[1] ? color.red : na
plot(hl, color = colorh, linewidth = 2, transp = 0, title = "Long")
plot(ll, color = colorl, linewidth = 2, transp = 0, title = "Short")

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= hl ? 1 : low <= ll ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if ll > 0 and hl > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = hl, when=(truetime))
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = ll, when=(truetime))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")