这是一个基于历史最高价(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")