
이 전략은 가격 하락 정도에 따라 포지션을 늘리고 고정된 이익 목표에 도달하면 포지션을 청산하는 그리드 트레이딩 전략입니다. 이 전략의 핵심 논리는 시장이 사전 설정된 범위까지 떨어지면 매수하고, 가격이 반등하여 목표 수익에 도달하면 전체 포지션을 마감하고, 이러한 과정을 끊임없이 반복하여 수익을 창출하는 것입니다. 이 전략은 특히 변동성이 큰 시장에서 단기 반등 기회를 포착하는 데 적합합니다.
이 전략은 그리드 거래와 방향성 이익 실현의 복합 메커니즘을 사용합니다.
이는 사전 설정된 하락 범위에 따라 일괄적으로 포지션을 구축하고 목표 수익에 도달하면 모든 포지션을 종료하는 간단하면서도 실용적인 그리드 트레이딩 전략입니다. 이 전략의 핵심적인 장점은 실행의 확실성과 위험 분산에 있지만, 이를 사용할 때는 시장 환경 선택과 매개변수 최적화에 주의를 기울여야 합니다. 아직 동적 손절매 추가, 포지션 관리 개선 등을 통해 전략을 최적화할 여지가 많이 있습니다. 실제 거래에 활용할 경우, 먼저 충분한 백테스팅을 실시하고, 실제 시장 상황에 맞춰 매개변수를 조정하는 것이 좋습니다.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Buy Down 5%, Sell at 5% Profit", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)
// Inputs
initial_date = input(timestamp("2024-01-01 00:00:00"), title="Initial Purchase Date")
profit_target = input.float(5.0, title="Profit Target (%)", minval=0.1) // Target profit percentage
rebuy_drop = input.float(5.0, title="Rebuy Drop (%)", minval=0.1) // Drop percentage to rebuy
// Variables
var float initial_price = na // Initial purchase price
var int entries = 0 // Count of entries
var float total_profit = 0 // Cumulative profit
var bool active_trade = false // Whether an active trade exists
// Entry Condition: Buy on or after the initial date
if not active_trade
initial_price := close
strategy.entry("Buy", strategy.long)
entries += 1
active_trade := true
// Rebuy Condition: Buy if price drops 5% or more from the initial price
rebuy_price = initial_price * (1 - rebuy_drop / 100)
if active_trade and close <= rebuy_price
strategy.entry("Rebuy", strategy.long)
entries += 1
// Exit Condition: Sell if the price gives a 5% profit on the initial investment
target_price = initial_price * (1 + profit_target / 100)
if active_trade and close >= target_price
strategy.close_all(comment="Profit Target Hit")
active_trade := false
total_profit += profit_target
// Display information on the chart
plotshape(series=close >= target_price, title="Target Hit", style=shape.labelup, location=location.absolute, color=color.green, text="Sell")
plotshape(series=close <= rebuy_price, title="Rebuy", style=shape.labeldown, location=location.absolute, color=color.red, text="Rebuy")
// Draw statistics on the chart
var label stats_label = na
if (na(stats_label))
stats_label := label.new(x=bar_index, y=close, text="", style=label.style_none, size=size.small)
label.set_xy(stats_label, bar_index, close)
label.set_text(stats_label, "Entries: " + str.tostring(entries) + "\nTotal Profit: " + str.tostring(total_profit, "#.##") + "%")