极值反转追踪策略

Author: ChaoZhang, Date: 2024-02-20 15:17:41
Tags:

极值反转追踪策略

概述

极值反转追踪策略通过追踪价格波动区间的极值点,在极值点处反转做多做空,实现趋势追踪。

策略原理

该策略主要基于以下原理运作:

  1. 使用security函数获取不同周期K线的最高价high和最低价low,检测是否等于前一根K线的最高最低价,从而判断是否达到新的极值点。

  2. 当检测到新的极值点时,若当前为多头行情,则在该极值点反转做空;若当前为空头行情,则在该极值点反转做多。

  3. 设置止损点为做多做空后形成的新的极值点,实现趋势追踪止损。

  4. 通过从年月日设置策略生效的时间范围,实现不同时间段的策略调整。

策略优势

该策略主要具有以下优势:

  1. 能够有效捕捉价格变化的极值点,做出反转操作,实现趋势追踪。

  2. 设置了时间和资金管理,可以对策略的使用时间和使用资金进行控制,降低风险。

  3. 采用新极值点作为止损点,能够根据新价格波动范围调整止损位置,实现动态止损。

  4. 策略逻辑简单清晰,容易理解,便于调试和优化。

策略风险

该策略也存在一定的风险:

  1. 极值点判断有可能出现误判的情况,导致做多做空失误。可以通过调整极值点判断逻辑来优化。

  2. 止损位置靠近入场点,可能会增加止损被触发的概率。可以设置离场regexes浮动止损来解决。

  3. 未考虑跟随趋势的加仓和反向开仓逻辑,可能难以在趋势行情中获利。可加入加仓和反向开仓规则进行优化。

  4. 货币和时间范围设置较为死板,无法动态调整。可以建立参数优化体系来解决。

策略优化方向

该策略可以从以下几个方向进行优化:

  1. 优化极值点判断逻辑,加入更多过滤条件,避免误判。

  2. 增加浮动止损机制,根据价格和波动幅度变化调整止损距离。

  3. 加入基于趋势和波动的加仓和反向开仓模块,提高盈利能力。

  4. 建立参数优化机制,实现对参数的自动化测试和优化。

  5. 加入机器学习模型判断行情,辅助策略决策。

总结

该极值反转追踪策略通过捕捉价格变化极值点并追踪趋势运行,具有较强的适应性和盈利能力。在继续优化极值点判断、止损机制、开仓规则等方面后,该策略有望成为稳定可靠的量化交易策略。


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Extremum Strategy v1.0", shorttitle = "Extremum str 1.0", 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(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title = 'Timeframe for extremums')
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")

//Levels
highm = request.security(syminfo.tickerid, tf, high[1])
lowm = request.security(syminfo.tickerid, tf, low[1])
upcolorm = highm == highm[1] ? lime : na
dncolorm = lowm == lowm[1] ? red : na
plot(highm, color = upcolorm, linewidth = 3)
plot(lowm, color = dncolorm, linewidth = 3)

//Signals
size = strategy.position_size
up = size > 0 ? highm * 1000000 : highm != highm[1] ? highm : up[1]
dn = size < 0 ? 0 : lowm != lowm[1] ? lowm : dn[1]
exit = true

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if highm > 0 and high[1] < highm and highm == highm[1]
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = up)
    
if lowm > 0 and low[1] > lowm and lowm == lowm[1]
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dn)

if exit
    strategy.close_all()

更多内容