双重反转交易策略通过结合”123反转”和”N根K线连续下跌”两个子策略,实现在趋势反转时高效捕捉交易机会的效果。该策略较为适合中长线交易。
“123反转”子策略的原理是:
当前两天的收盘价出现反向(即如果前一日收盘价高于前两日,则当前收盘价低于前一日),且9日股票K线的快速随机指标低于50时做多;当前两天的收盘价出现反向(即如果前一日收盘价低于前两日,则当前收盘价高于前一日),且9日股票K线的快速随机指标高于50时做空。
该子策略通过判断前两日收盘价的反转,结合随机指标判定趋势反转时机,来实现高效捕捉趋势反转的效果。
“N根K线连续下跌”子策略的原理是:
统计最近N根K线收盘价是否连续下跌,如果下跌达到N根,则产生做空信号。
该子策略通过判断一定数量K线的连续下跌,来判定趋势反转的时机。
双重反转交易策略则是将上述两个子策略进行组合,当两者同时产生做多或做空信号时,才会实际下单。
这样可以过滤掉一些误报信号,使得交易信号更加可靠。同时结合反转信号和连续下跌信号,可以更准确判断趋势反转的时机。
双重反转交易策略具有以下优势:
通过组合多个子策略,可以有效过滤假信号,提高信号的可靠性。
123反转策略可以准确判断短期内的趋势反转点。N根K线连续下跌可以判断中长期趋势反转。二者配合使用,可以在中长线层面捕捉短期的交易机会。
采用股票K线指标,参数调整灵活,适合不同品种。
策略思路简单清晰,容易理解与跟踪,适合初学者学习。
可自定义子策略的参数,可以针对不同品种进行优化,提高策略适应性。
双重反转交易策略也存在一些风险:
反转信号可能出现误报,组合信号虽可降低误报风险,但无法完全规避。建议与止损策略配合使用。
子策略采用简单指标,对复杂行情可能无法适应。可以考虑引入更多技术指标或机器学习提升策略适应性。
子策略参数需要针对不同品种进行优化,否则可能出现过拟合问题。
反转类策略更适合中长线,短期内有被套利风险。应适当调整持仓期限。
反转信号可能出现在趋势中的小范围调整阶段,应结合趋势判断确保策略方向与大趋势一致。
该双重反转交易策略可以从以下方面进行优化:
引入更多技术指标判断,形成多因子模型,提升策略对复杂行情的适应能力。例如引入移动平均线、布林带等指标进行组合。
增加机器学习模型判断,利用机器学习对多维特征进行建模,提升信号的准确性。例如引入随机森林或者神经网络对K线进行判断。
优化参数设置,针对不同品种进行参数训练,提高参数的适应性。例如采用遗传算法对参数组合进行优化。
结合止损策略,以控制单笔止损加强策略的风险控制。止损位置也可以进行数据驱动的优化。
开发动态仓位管理机制,根据行情与子策略结果动态调整仓位大小,降低风险。
引入趋势判断模块,避免子策略产生的信号与大趋势不一致。例如引入均线判断趋势。
双重反转交易策略通过组合123反转和N根K线连续下跌两个子策略,实现了对趋势反转时机的高效捕捉。该策略较为适合中长线持仓,可以有效过滤误报信号,在趋势反转时提供较为可靠的交易机会。但该策略也存在一定局限,需要引入更多技术指标进行优化,并配合止损与仓位管理机制来降低风险,从而适应更加复杂的市场环境。总体来说,双重反转交易策略提供了一种简单直接的趋势反转策略思路,是初学者了解和学习策略交易的好素材。随着更多优化手段的引入,该策略可以成为一个非常实用的量化交易策略。
/*backtest start: 2023-10-24 00:00:00 end: 2023-10-28 03:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 24/03/2021 // 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 // Evaluates for n number of consecutive lower closes. Returns a value // of 1 when the condition is true or 0 when false. // // 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 NBD(nLength) => pos = 0.0 nCounter = 0 nCounter := iff(close[1] <= open[1], nz(nCounter[1],0)+1, iff(close[1] > open[1], 0, nCounter)) C2 = iff(nCounter >= nLength, 1, 0) posprice = 0.0 posprice := iff(C2== 1, close, nz(posprice[1], 0)) pos := iff(posprice > 0, -1, 0) pos strategy(title="Combo Backtest 123 Reversal & N Bars Down", shorttitle="Combo", overlay = true) line1 = input(true, "---- 123 Reversal ----") Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) //------------------------- line2 = input(true, "---- N Bars Down ----") nLength = input(4, minval=1) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posNBD = NBD(nLength) pos = iff(posReversal123 == 1 and posNBD == 1 , 1, iff(posReversal123 == -1 and posNBD == -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 )