这是一个基于历史最高价(ATH)动态跟踪的多层级买入策略。策略通过监控价格从ATH的回撤幅度,在不同跌幅水平实施分批买入操作,并在价格接近ATH时全部卖出获利。该策略充分利用了市场的波动性,通过系统化的分批建仓方式来降低整体持仓成本。
策略的核心逻辑包含以下几个关键要素: 1. 动态ATH追踪:持续更新历史最高价,并在突破新高时重置买入标记 2. 三级跌幅触发:分别在10%、15%和20%的回撤位设置买入点 3. 固定资金管理:每次买入使用相同的资金量($1000) 4. 回撤平仓机制:当价格恢复到距离ATH 5%范围内时,平掉所有持仓 策略通过这种递进式的建仓方式,在下跌过程中逐步降低平均持仓成本,并在市场反弹时通过统一平仓来锁定收益。
该策略通过系统化的分批建仓和统一平仓机制,很好地利用了市场的波动性。策略的成功运行依赖于市场具有足够的波动性和最终的上涨趋势。通过合理的风险控制和参数优化,策略可以在不同市场环境下保持稳定的表现。
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © bsticks22 //@version=6 strategy("Long-term Bean Dip (v.1)", overlay=true) // === Inputs === dip1 = input.float(10.0, "First Dip (%)", step=0.1) // 10% dip2 = input.float(15.0, "Second Dip (%)", step=0.1) // 15% dip3 = input.float(20.0, "Third Dip (%)", step=0.1) // 20% recovery_threshold = input.float(5.0, "Sell when within X% of ATH", step=0.1) // 5% buy_amount = input.float(50000.0, "Buy Amount ($)", step=100) // $1000 increments // === Variables === var float all_time_high = na var bool dip1_bought = false var bool dip2_bought = false var bool dip3_bought = false // === Update All-Time High === if na(all_time_high) all_time_high := high else // Update ATH to the previous bar's high to exclude current bar's high all_time_high := math.max(all_time_high[1], high[1]) if high[1] > all_time_high[1] // New ATH reached on the previous bar dip1_bought := false dip2_bought := false dip3_bought := false // === Calculate Percentage Drop from ATH === percent_drop = (all_time_high - close) / all_time_high * 100.0 // === Define Dip Conditions === buyDip1 = (percent_drop >= dip1) and not dip1_bought buyDip2 = (percent_drop >= dip2) and not dip2_bought buyDip3 = (percent_drop >= dip3) and not dip3_bought // === Calculate Quantity to Buy === qty1 = buy_amount / close // === Execute Buys on Dips === if buyDip1 strategy.entry("Dip1 Buy", strategy.long, qty=qty1) dip1_bought := true if buyDip2 strategy.entry("Dip2 Buy", strategy.long, qty=qty1) dip2_bought := true if buyDip3 strategy.entry("Dip3 Buy", strategy.long, qty=qty1) dip3_bought := true // === Sell Condition: Recovery to Within X% of ATH === sell_condition = close >= all_time_high * (1 - recovery_threshold / 100.0) // === Execute Sell on Recovery === if sell_condition and strategy.position_size > 0 strategy.close_all() // === Plotting === plot(all_time_high, title="All-Time High", color=color.new(color.blue, 0)) plot(all_time_high * (1 - dip1 / 100.0), title="Dip1 Level", color=color.new(color.green, 50), style=plot.style_linebr) plot(all_time_high * (1 - dip2 / 100.0), title="Dip2 Level", color=color.new(color.orange, 50), style=plot.style_linebr) plot(all_time_high * (1 - dip3 / 100.0), title="Dip3 Level", color=color.new(color.red, 50), style=plot.style_linebr) plot(all_time_high * (1 - recovery_threshold / 100.0), title="Recovery Level", color=color.new(color.purple, 50), style=plot.style_linebr) // === Plot Buy and Sell Signals === plotshape(buyDip1, title="Dip1 Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy10%") plotshape(buyDip2, title="Dip2 Buy", location=location.belowbar, color=color.orange, style=shape.labelup, text="Buy15%") plotshape(buyDip3, title="Dip3 Buy", location=location.belowbar, color=color.red, style=shape.labelup, text="Buy20%") plotshape(sell_condition and strategy.position_size > 0, title="Sell", location=location.abovebar, color=color.purple, style=shape.labeldown, text="Sell") // === Alerts === alertcondition(buyDip1, title="Dip1 Buy", message="Price dipped 10% from ATH, buying $1000") alertcondition(buyDip2, title="Dip2 Buy", message="Price dipped 15% from ATH, buying $1000") alertcondition(buyDip3, title="Dip3 Buy", message="Price dipped 20% from ATH, buying $1000") alertcondition(sell_condition and strategy.position_size > 0, title="Sell at Recovery", message="Price recovered to within 5% of ATH, selling all")