
격자 달러 비용 평균 전략 (GridDCA) 은 달러 비용 평균법을 이용한 자동 거래 전략으로, 여러 가격 격자 상에 투자가 이루어지며, 투자 위험을 줄이고, 자산 축적의 안정성을 증가시킨다. 이 전략은 TradingView 플랫폼에 기반한 Pine Script 개발로, 격자 수, 격자 거리, 중지 손실 비율 및 수익 목표 등의 파라미터를 유연하게 설정할 수 있으며, 시가격과 제한 가격 두 가지 주문 방식을 지원한다.
DCA는 고정된 금액을 고정된 시간 간격으로 투자함으로써 자산의 현재 가격을 고려하지 않고 투자에 대한 영향을 줄이는 장기 투자 전략이다. 그릿DCA 전략은 가격 격자의 개념을 도입하여 사용자가 설정한 격자 수와 격자 거리에 따라 여러 개의 다른 가격을 생성한다. 각 격자에는 대응되는 구매 수와 가격이 있습니다. 가격이 특정 격자에 닿으면, 전략은 시장 가격 또는 제한 가격 방식으로 구매 작업을 수행합니다.
그리드 달러 비용 평균 전략 (GridDCA) 은 달러 비용 평균 법칙에 기반한 자동화 거래 전략으로, 여러 가격 그리드에 투자함으로써 투자에 대한 시장 변동의 영향을 효과적으로 감소시키고 자산 축적의 안정성을 증가시킨다. 이 전략은 자동화 거래, 위험 감축, 유연성, 강력한 다양화 주문 등의 장점이 있지만, 시장 추세 위험, 파라미터 설정 위험 및 유동성 위험 등의 과제도 있다. 동적으로 파라미터를 조정하고, 추세 판단, 다중 통화 시간 프레임과 같은 최적화를 도입함으로써 그리드DCA 전략의 성능을 더욱 향상시킬 수 있으며, 거래 분야에 대한 깊이 있는 연구와 응용이 가치가 있는 전략이 된다.
/*backtest
start: 2023-03-22 00:00:00
end: 2023-08-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("DCA Trading Strategy", overlay=true)
// Define input options
numGrids = input.int(5, title="Number of Grids")
gridDistance = input.float(0.5, title="Grid Distance")
stopLossPct = input.float(1, title="Stop Loss Percentage")
takeProfitPct = input.float(1, title="Take Profit Percentage")
useMarketOrder = input.bool(false, title="Use Market Order")
// Define DCA function
dca(quantity, price, stopLoss, takeProfit) =>
if useMarketOrder
strategy.entry("DCA Buy", strategy.short, qty=quantity)
else
strategy.entry("DCA Buy", strategy.short, qty=quantity, limit=price)
strategy.exit("Stop Loss/ Take Profit", "DCA Buy", stop=stopLoss, limit=takeProfit)
// Calculate grid levels
gridLevels = math.floor(strategy.position_size / (numGrids + 1) + 0.5)
// Calculate buy quantity
buyQuantity = strategy.position_size / numGrids
// Loop through each grid level
for i = 1 to numGrids
priceLevel = strategy.position_avg_price * (1 - gridDistance * i)
stopLossPrice = priceLevel * (1 - stopLossPct / 100)
takeProfitPrice = priceLevel * (1 + takeProfitPct / 100)
dca(buyQuantity, priceLevel, stopLossPrice, takeProfitPrice)
// Plot grid levels
plotshape(series=gridLevels, title="Grid Levels", location=location.abovebar, color=color.blue, style=shape.triangleup, size=size.small)