适应性变动性突破策略


创建日期: 2024-01-08 14:38:31 最后修改: 2024-01-08 14:38:31
复制: 0 点击次数: 379
1
关注
1138
关注者

适应性变动性突破策略

概述

适应性变动性突破策略是一种趋势跟踪策略。它通过识别强势上涨超过“一定水平”的突破信号,建立多头仓位,持续跟踪上涨趋势,在次日开盘时获利了结。

该策略由Larry R. Williams提出,他是一位著名的期货和股票交易者。该策略试图捕捉价格的突破点,这些点往往预示着行情的转折。通过及时识别这些信号并建仓,可以跟踪新的行情趋势获得收益。

策略原理

该策略的核心指标是“一定水平”,它由以下公式计算:

一定水平 = 收盘价 + k * (最高价 - 最低价)

其中k是经验系数,值为0.6。该公式加入了最高价和最低价的变动性成分,使得突破点更具灵活性,可以适应市场的反复。

当天的最高价超过计算出的“一定水平”时,表明价格出现突破,此时策略会建立多头仓位。次日开盘时会全部了结仓位获利。

止损水平设定为前一日的最低价和入场价的一半,防止亏损扩大。

优势分析

该策略具有以下优势:

  1. 捕捉变动性,顺势而为:策略加入了最高价和最低价计算突破点,使得突破信号更具灵活性,能够捕捉价格变化的节奏。

  2. 及时入场,跟踪趋势:通过每日计算突破信号,可以及时识别新的行情,跟上价格上涨的步伐。

  3. 风险控制到位:设置了合理的止损位置,可以有效控制单笔亏损。

风险分析

该策略也存在以下风险:

  1. 突破失败风险:价格突破不一定持续上涨,可能是短期的假突破。这时会产生亏损。

  2. 极端行情风险:在股灾、突发事件等极端行情下,价格可能出现断层和跳空,导致止损被触发产生大量亏损。

  3. 过度交易风险:每日建仓和平仓,会增加交易频率和手续费的负担。

策略优化

该策略可以从以下角度进行优化:

  1. 加入乘数:在突破计算公式中加入一个乘数,当市场波动加大时适当调小,当市场稳定时适当调大,使策略更具弹性。

  2. 延长持仓时间:将持仓时间延长至2天或3天,过滤掉短期的假突破。

  3. 优化止损位置:将止损位置设置为更深度的支撑位置,如布林带下限、前日收盘价等。

总结

适应性变动性突破策略通过实时跟踪价格的变动性和节奏,实现了趋势跟踪。相对于传统突破策略,它更具有弹性和捕捉能力。但也需要注意风险,在极端行情下止损可能会被突破。通过持仓时间和止损位优化可以获得更优结果。

策略源码
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 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/
// © Dicargo_Beam

//@version=5
strategy("Volatility Breakout Strategy", overlay=true, default_qty_type= strategy.percent_of_equity, default_qty_value=100,process_orders_on_close=false)

k = input.float(0.6)


[o,h,l,c] = request.security(syminfo.tickerid,"D",[open,high,low,close])

lp = math.log(c[1])+(math.log(h[1])-math.log(l[1]))*k
_lp = math.pow(2.718,lp)

longcond = _lp < high
exit = hour==0 or  math.log(close) < (math.log(l[1])+lp)/2



plot(_lp,"Entry",color=color.yellow)
//plot(l,"Yesterday's Low")
plot((_lp+l[1])/2,"StopLoss",color=color.red)


strategy.entry("Long", strategy.long,comment = "Long", when = longcond and strategy.opentrades == 0)

strategy.close("Long", comment="Exit", when = exit)


var bg = 0
bg := if hour == 0
    bg + 1
else
    bg[1]

bgcolor(bg/2== math.floor(bg/2) ? color.new(color.blue,95):na)


更多内容