双时间轴波动率价差交易策略

Author: ChaoZhang, Date: 2024-02-18 15:31:32
Tags:

双时间轴波动率价差交易策略

概述

双时间轴波动率价差交易策略通过计算两个不同时间周期的RSI指标之间的价差,来判断市场的超买超卖状态,实现low risk的趋势交易。

策略原理

该策略的核心指标是shortTermXtrender和longTermXtrender。shortTermXtrender计算短期时间轴上的RSI价差,longTermXtrender计算长期时间轴上的RSI价差。

短期时间轴采用7日EMA与4日LMA的价差计算RSI,再与50进行价差,构成shortTermXtrender。长期时间轴采用4日EMA的RSI与50进行价差,构成longTermXtrender。

当shortTermXtrender上穿0时,做多;当longTermXtrender上穿0时,也做多。做多后的止损原则是当shortTermXtrender下穿0时止损;当longTermXtrender下穿0时,也止损。

这样,通过双时间轴判断,可以过滤掉更多的假突破。

优势分析

该策略最大的优势在于趋势判断准确。双时间轴结合使用,可以有效过滤噪音,锁定目标趋势方向。这为低风险的趋势跟踪交易提供了保证。

另外,策略提供了参数优化的空间。用户可以根据不同品种和时间周期,调整SMA周期、RSI参数等,优化策略效果。

风险分析

该策略的主要风险在于多空判断错误。在震荡行情中,容易产生错误信号。这时如果仍然打开仓位,则会面临亏损的风险。

此外,参数设置不当也会导致效果欠佳。如果时间周期参数设置得过短,则会增大误判概率;如果时间周期参数设置得过长,则会错过趋势机会。这需要用户针对不同市场进行参数测试和优化。

优化方向

该策略主要可以从以下几个方面进行优化:

  1. 增加止盈机制。目前策略没有设置止盈,可以根据达到目标利润后及时止盈。

  2. 增加仓位管理。可以根据资金规模、波动率等指标动态调整仓位。

  3. 测试不同品种参数设置。用户可以通过回测从日线、60分钟等不同时间周期入手,测试最优参数组合。

  4. 增加机器学习辅助判断。可以训练模型判断行情类型,从而动态调整策略参数,提高胜率。

总结

双时间轴波动率价差交易策略通过构建双时间轴指标,实现高效的趋势捕捉。策略优化空间较大,用户可以通过参数调整、止盈管理、仓位管理等方式进行优化,从而获得更好的策略效果。该策略适合有一定交易经验的用户使用。


/*backtest
start: 2024-01-18 00:00:00
end: 2024-02-17 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study("MavXtrender")
strategy("MavXtrender")

ShortTermSMA = input(7)
ShortTermLMA = input(4)
ShortTermRSI = input(2)

LongTermMA  = input(4)
LongTermRSI  = input(2)

UseFactors = input(true)
TradeShortTerm = input(true)
TradeLongTerm = input(true)

count = TradeShortTerm == true ? 1 : 0
count := TradeLongTerm == true ? count + 1 : count
// set position size
Amount = strategy.equity / (close * count)

ShortTermLMA := UseFactors == true ? round(ShortTermSMA * ShortTermLMA) : ShortTermLMA
ShortTermRSI := UseFactors == true ? round(ShortTermSMA * ShortTermRSI) : ShortTermRSI
LongTermMA := UseFactors == true ? round(ShortTermSMA * LongTermMA) : LongTermMA
LongTermRSI := UseFactors == true ? round(ShortTermSMA * LongTermRSI) : LongTermRSI

shortTermXtrender = rsi(ema(close, ShortTermSMA) - ema(close, ShortTermLMA), ShortTermRSI ) - 50
longTermXtrender  = rsi( ema(close, LongTermMA), LongTermRSI ) - 50

// === INPUT BACKTEST RANGE ===
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2018, title = "From Year", minval = 2012)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 2020, title = "To Year", minval = 2012)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

strategy.entry("ShortTerm", strategy.long, qty = Amount, when = window() and crossover(shortTermXtrender,0) and TradeShortTerm)
strategy.entry("LongTerm", strategy.long, qty = Amount, when = window() and crossover(longTermXtrender,0) and TradeLongTerm)

strategy.close("ShortTerm", when = crossunder(shortTermXtrender,0) or time > finish)
strategy.close("LongTerm", when = crossunder(longTermXtrender,0) or time > finish)

shortXtrenderCol = shortTermXtrender > 0 ? shortTermXtrender > shortTermXtrender[1] ? color.lime : #228B22 : shortTermXtrender > shortTermXtrender[1] ? color.red : #8B0000
plot(shortTermXtrender, color=shortXtrenderCol, style=plot.style_columns, linewidth=1, title="B-Xtrender Osc. - Histogram", transp = 50)

longXtrenderCol = longTermXtrender> 0 ? longTermXtrender > longTermXtrender[1] ? color.lime : #228B22 : longTermXtrender > longTermXtrender[1] ? color.red : #8B0000
plot(longTermXtrender , color=longXtrenderCol, style=plot.style_histogram, linewidth=2, title="B-Xtrender Trend - Histogram", transp = 80)
plot(longTermXtrender , color=color.white,     style=plot.style_line,      linewidth=1, title="B-Xtrender Trend - Line",      transp = 80)


更多内容