关键反转信号回测策略通过识别股票价格的关键反转信号,判断当前趋势是否反转,以捕捉趋势反转后的价格运行方向。该策略基于“关键反转日”的理论,在发现关键反转信号时做多做空,通过配置止盈止损来锁定利润。
关键反转信号回测策略的核心逻辑是识别关键反转日。根据股票的价格走势,我们可以判断目前的趋势方向。当出现关键反转信号时,说明趋势可能发生反转。
具体来说,对于股票上涨趋势,如果当天的最低价创新低,但收盘价接近前一日的最低价,那么这一天就是关键反转日。这意味着多头力量正在减弱,承压能力下降,说明上涨趋势可能反转为下跌。策略会在关键反转日开仓做空。
相反,对于股票下跌趋势,如果当天创新低,但收盘价接近前一日的最高价。那么这也是一个关键反转日,说明空头力量减弱,下跌趋势可能反转为上涨。策略会在关键反转日开仓做多。
通过判断关键反转日并追踪后续行情,策略能捕捉到价格反转后的运行。
关键反转信号回测策略的主要优势有:
捕捉趋势反转,盈利空间大。关键反转信号往往预示着趋势变化方向,通过判断反转信号并跟踪后续运行,能够获得比较大的盈利空间。
规则清晰,容易回测验证。关键反转日的判断规则非常清晰,价格创新高或新低的同时,与前一日收盘价构成反转形态。这使得策略容易回测,也能减少误判。
灵活调整,易于优化。止盈止损点位的设置非常灵活,可以按照市场情况和个人风险偏好进行调整,对策略进行优化,降低亏损风险。
关键反转信号回测策略也存在一些风险:
反转信号误判风险。股票价格常有短期调整,并不是所有的关键反转信号都预示着趋势反转,可能带来误判。通过优化参数,调整止盈止损条件可以降低误判概率。
反转不成或反转后继续反转的风险。即使判断准确,价格反转后也可能再次调头反转或者原趋势继续运行。这时就面临亏损风险。通过及时止损来控制亏损。
回测偏差。任何规则和信号在实盘中表现都可能与回测结果存在偏差,无法完全重现回测获利情况。
关键反转信号回测策略主要可优化的方向:
优化止盈止损的设置。可以基于更多的历史数据来计算合适的止盈止损点位。
增加过滤条件,结合其他技术指标过滤误判。例如可以结合成交量来确认反转信号,避免被套利操作误导。
优化反转后的跟踪策略。反转后价格运行也有一定规律可循,设定后续跟踪策略,进一步扩大收益。
结合机器学习模型判断信号质量。训练模型评估每一个关键反转信号的可靠性,避免追踪质量较差的信号。
关键反转信号策略通过判断关键反转日,捕捉价格趋势反转机会。策略规则简单清晰,容易实现。反转后趋势持续运行空间大,但是也存在一定的误判风险。通过不断优化参数和过滤条件,降低误判概率,能够获得较为可靠的效果。
/*backtest start: 2024-01-18 00:00:00 end: 2024-01-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 21/01/2020 // // A key reversal is a one-day trading pattern that may signal the reversal of a trend. // Other frequently-used names for key reversal include "one-day reversal" and "reversal day." // How Does a Key Reversal Work? // Depending on which way the stock is trending, a key reversal day occurs when: // In an uptrend -- prices hit a new high and then close near the previous day's lows. // In a downtrend -- prices hit a new low, but close near the previous day's highs // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// strategy(title="Key Reversal Up Backtest", shorttitle="KRU Backtest", overlay = true) nLength = input(1, minval=1, title="Enter the number of bars over which to look for a new low in prices.") input_takeprofit = input(20, title="Take Profit pip", step=0.01) input_stoploss = input(10, title="Stop Loss pip", step=0.01) xLL = lowest(low[1], nLength) C1 = iff(low < xLL and close > close[1], true, false) plotshape(C1, style=shape.triangleup, size = size.small, color=color.green, location = location.belowbar ) posprice = 0.0 pos = 0 barcolor(nz(pos[1], 0) == -1 ? color.red: nz(pos[1], 0) == 1 ? color.green : color.blue ) posprice := iff(C1== true, close, nz(posprice[1], 0)) pos := iff(posprice > 0, 1, 0) if (pos == 0) strategy.close_all() if (pos == 1) strategy.entry("Long", strategy.long) posprice := iff(low <= posprice - input_stoploss and posprice > 0, 0 , nz(posprice, 0)) posprice := iff(high >= posprice + input_takeprofit and posprice > 0, 0 , nz(posprice, 0))