
这个策略的主要思想是检测价格是否突破指定周期内的最低价,如果突破就做多,等待价格回归均线。它属于趋势跟踪类策略。
该策略通过调用Pine脚本的ta.lowest方法获取指定周期内的最低价lowestLow,并与上一周期的最低价prevLow进行比较。
如果最新周期的最低价lowestLow低于上一周期的最低价prevLow,则发出做多信号。做多之后,通过与指定周期内的最高价highestHigh进行比较,如果最新周期的最高价大于此前周期的最高价,则平仓。
该策略允许选择触发条件,即最低价需要连续突破1个、2个、3个或4个之前的最低价,从而控制交易频率。
此外,该策略还在图表上绘制了最低价均线lowestLow和最高价均线highestHigh,以直观显示趋势的变化。
该策略捕捉突破新低后的反转趋势,具有较高的胜率。
允许选择突破最低价的数量,可以控制交易频率。
绘制均线有助于直观判断趋势变化点。
策略逻辑简单清晰,容易理解实现。
可配置不同股票及时间周期进行优化测试。
突破假突破无法确定趋势反转点,可能引发亏损。
需要测试不同参数组合优化配置,否则交易频率可能过高或过低。
针对不同股票需要调整参数,不宜机械应用。
回测时间周期不足可能导致策略过拟合。
突破后价格可能再创新低,需要设置止损来控制风险。
增加止损机制,如移动止损、跟踪止损等,控制单笔损失。
优化突破的数量,平衡交易频率与信号质量。
测试不同股票和时间周期的参数优化。
增加过滤条件,避免在震荡市中频繁交易。
考虑加入趋势指标,避免逆势交易。
测试不同出场 Exit 信号。
该策略通过监测最低价突破来捕捉反转机会,属于典型的突破回归策略。优点是简单易懂,交易频率可控,可在多种股票中应用。但也存在一定的假突破风险,需要加入辅助条件进行过滤优化,同时控制风险非常必要。通过全面测试与优化,该策略可以成为稳定可靠的量化交易系统。
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © merovinh
//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
overlay = true,
default_qty_type = strategy.percent_of_equity,
initial_capital = 10000,
default_qty_value = 10,
commission_type = strategy.commission.percent,
slippage = 1,
commission_value = 0.04)
GR_TIME = 'Time Period'
bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")
numberOfLows = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])
//Period
var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0
truetime = true
highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)
if numberOfLows == 'One'
if truetime and prevLow > 0 and lowestLow < prevLow
strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
strategy.entry('long', strategy.long)
if truetime and prevHigh > 0 and highestHigh > prevHigh
strategy.close('long')
if prevLow != lowestLow
prevLow4 := prevLow3
prevLow3 := prevLow2
prevLow2 := prevLow
prevLow := lowestLow
prevHigh := highestHigh
plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")