双因子反转追踪策略


创建日期: 2023-12-19 11:09:20 最后修改: 2023-12-19 11:09:20
复制: 2 点击次数: 294
1
关注
1124
关注者

双因子反转追踪策略

概述

本策略属于量化交易领域中的双因子反转追踪策略。它整合了123反转策略和Keltner通道策略两个因子,目标是发现反转信号,实现低买高卖的交易思路。

策略原理

该策略由两个子策略组成。第一个子策略是123反转策略,它通过计算前两个交易日的收盘价变化,结合Stochastic指标判断市场是否处于反转点。具体来说,当连续两日收盘价上涨,同时Stochastic指标低于50时,发出买入信号;当连续两日收盘价下跌,同时Stochastic指标高于50时,发出卖出信号。

第二个子策略是Keltner通道策略。该策略计算最近n个交易日的典型价格均线及波动范围,当价格接近上下轨时,发出反转交易信号。价格低于下轨时看空,高于上轨时看多。

最后,该策略通过判断两个子策略的信号方向后,计算出最终的持仓信号。当两个子策略信号一致时,发出真正的交易指令,否则不进行交易,实现双因子验证的目的。

优势分析

这种双因子反转追踪策略最大的优势在于,能够在市场反转的时候及时抓住机会,实现低买高卖的交易思路。同时,通过双因子确认机制,可以一定程度上减少假信号,提高信号的质量。

具体来说,123反转策略的Stochastic指标参数设置较为保守,可以有效过滤震荡行情下的假反转。而Keltner通道追踪布林带的思路,也能抓住突破上下轨时的反转机会。两者配合使用,可以互相验证,减少不必要的交易,从而获得更高的胜率。

风险分析

该策略的主要风险在于,反转信号发生的时机选择非常重要。如果出现连续假反转,或者反转信号发生的时间节点选择不当,都会导致无法持有完整的趋势,进而影响最终收益。

此外,双因子策略相比单一策略,其参数选择和优化难度都会比较大。需要对两个子策略的参数进行全面测试和评估,否则也很容易失败。

最后,反转交易本身的盈亏比例往往比较悬殊,如果遇到异常行情,很容易爆仓。这需要通过严格的止损来规避。

优化方向

根据以上风险分析,该策略可以从以下几个方面进行优化:

  1. 测试不同的反转指标参数设置,找到容错率更高,假信号更少的组合
  2. 尝试不同周期长度的参数,找到反转捕捉更为精确的数值
  3. 增加止损模块,严格控制单笔交易的最大损失
  4. 测试不同持仓时间的效果,找到更匹配策略逻辑的出场点
  5. 增加开仓数量或仓位控制模块,使得盈亏比例更为合理

总结

本策略作为一种典型的双因子反转追踪策略,通过整合123反转和Keltner通道两个子策略,目标是在市场反转点更为精确地把握低买高卖的时机。在参数优化和风险控制到位的情况下,这种策略可以获得较为可观的超额收益。但交易者仍需注意反转交易的特殊性,防范异常行情导致的亏损扩大。

策略源码
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The Keltner Channel, a classic indicator 
// of technical analysis developed by Chester Keltner in 1960. 
// The indicator is a bit like Bollinger Bands and Envelopes.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KeltnerChn(nPeriod) =>
    pos = 0.0
    xPrice = sma(hlc3, nPeriod)
    xMove = sma(high - low, nPeriod)
    reverse = input(false, title="Trade reverse")
    xUpper = xPrice + xMove
    xLower = xPrice - xMove
    pos := iff(close < xLower, -1,
             iff(close > xUpper, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Keltner Channel", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nPeriod = input(title="Period", defval=10, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKeltnerChn = KeltnerChn(nPeriod)
pos = iff(posReversal123 == 1 and posKeltnerChn == 1 , 1,
	   iff(posReversal123 == -1 and posKeltnerChn == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )
更多内容