
이것은 역사 최고 가격 (ATH) 의 움직임을 추적하는 다단계 구매 전략이다. 전략은 ATH에서 가격의 회수폭을 모니터링하여, 다양한 하락 수준에서 대량으로 구매 작업을 수행하고, ATH에 가까운 가격에 모든 것을 판매하여 이익을 얻습니다. 이 전략은 시장의 변동성을 최대한 활용하여 체계적인 대량 매장 방식을 통해 전체 매장 비용을 절감합니다.
전략의 핵심 논리에는 다음과 같은 핵심 요소가 포함됩니다.
이 전략은 체계화된 분량 포지션 구축과 통일 평점 메커니즘을 통해 시장의 변동성을 잘 활용한다. 전략의 성공적인 운영은 시장이 충분한 변동성과 최종 상승 추세에 의존한다. 합리적인 위험 제어와 매개 변수 최적화를 통해 전략은 다양한 시장 환경에서 안정적인 성능을 유지할 수 있다.
/*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")