이 전략은 달러 비용 평균 (DCA) 와 볼링거 밴드 기술 지표를 결합한 지능형 투자 접근법이다. 평균 회전 원칙을 활용하여 가격 인하 시 체계적으로 포지션을 구축합니다. 핵심 메커니즘은 가격이 낮은 볼링거 밴드 아래로 넘어갈 때 고정 금액 구매를 실행하여 시장 수정 중에 더 나은 입시 가격을 달성하는 것을 목표로합니다.
이 전략은 세 가지 기본 기둥에 기반한다: 1) 정해진 금액의 정기적 투자로 시간 위험을 줄이는 달러-비용 평균화 (Dollar-Cost Averaging), 2) 가격이 궁극적으로 역사적 평균으로 돌아갈 것이라고 가정하는 평균 반전 이론, 3) 과잉 구매 및 과잉 판매 구역을 식별하는 볼링거 밴드 지표. 가격이 하위 대역 아래로 넘어갈 때 구매 신호가 발생하며, 구매 양은 설정된 투자 금액을 현재 가격으로 나누어서 결정된다. 이 전략은 상위 및 하위 대역을 정의하기 위해 2의 표준편차 배수와 함께 200 기간 EMA를 중간 대역으로 사용한다.
이 전략은 기술적 분석과 체계적인 투자 방법을 결합한 강력한 전략이다. 위험 감소를 위해 달러-비용 평균을 구현하면서 과판 기회를 식별하기 위해 볼링거 밴드를 사용합니다. 성공의 열쇠는 적절한 매개 변수 설정과 엄격한 실행 규율에 있습니다. 위험이 존재하지만 지속적인 최적화와 위험 관리는 전략의 안정성을 향상시킬 수 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("DCA Strategy with Mean Reversion and Bollinger Band", overlay=true) // Define the strategy name and set overlay=true to display on the main chart // Inputs for investment amount and dates investment_amount = input.float(10000, title="Investment Amount (USD)", tooltip="Amount to be invested in each buy order (in USD)") // Amount to invest in each buy order open_date = input(timestamp("2024-01-01 00:00:00"), title="Open All Positions On", tooltip="Date when to start opening positions for DCA strategy") // Date to start opening positions close_date = input(timestamp("2024-08-04 00:00:00"), title="Close All Positions On", tooltip="Date when to close all open positions for DCA strategy") // Date to close all positions // Bollinger Band parameters source = input.source(title="Source", defval=close, group="Bollinger Band Parameter", tooltip="The price source to calculate the Bollinger Bands (e.g., closing price)") // Source of price for calculating Bollinger Bands (e.g., closing price) length = input.int(200, minval=1, title='Period', group="Bollinger Band Parameter", tooltip="Period for the Bollinger Band calculation (e.g., 200-period moving average)") // Period for calculating the Bollinger Bands (e.g., 200-period moving average) mult = input.float(2, minval=0.1, maxval=50, step=0.1, title='Standard Deviation', group="Bollinger Band Parameter", tooltip="Multiplier for the standard deviation to define the upper and lower bands") // Multiplier for the standard deviation to calculate the upper and lower bands // Timeframe selection for Bollinger Bands tf = input.timeframe(title="Bollinger Band Timeframe", defval="240", group="Bollinger Band Parameter", tooltip="The timeframe used to calculate the Bollinger Bands (e.g., 4-hour chart)") // Timeframe for calculating the Bollinger Bands (e.g., 4-hour chart) // Calculate BB for the chosen timeframe using security [basis, bb_dev] = request.security(syminfo.tickerid, tf, [ta.ema(source, length), mult * ta.stdev(source, length)]) // Calculate Basis (EMA) and standard deviation for the chosen timeframe upper = basis + bb_dev // Calculate the Upper Band by adding the standard deviation to the Basis lower = basis - bb_dev // Calculate the Lower Band by subtracting the standard deviation from the Basis // Plot Bollinger Bands plot(basis, color=color.red, title="Middle Band (SMA)") // Plot the middle band (Basis, EMA) in red plot(upper, color=color.blue, title="Upper Band") // Plot the Upper Band in blue plot(lower, color=color.blue, title="Lower Band") // Plot the Lower Band in blue fill(plot(upper), plot(lower), color=color.blue, transp=90) // Fill the area between Upper and Lower Bands with blue color at 90% transparency // Define buy condition based on Bollinger Band buy_condition = ta.crossunder(source, lower) // Define the buy condition when the price crosses under the Lower Band (Mean Reversion strategy) // Execute buy orders on the Bollinger Band Mean Reversion condition if (buy_condition ) // Check if the buy condition is true and time is within the open and close date range strategy.order("DCA Buy", strategy.long, qty=investment_amount / close) // Execute the buy order with the specified investment amount // Close all positions on the specified date if (time >= close_date) // Check if the current time is after the close date strategy.close_all() // Close all open positions // Track the background color state var color bgColor = na // Initialize a variable to store the background color (set to 'na' initially) // Update background color based on conditions if close > upper // If the close price is above the Upper Band bgColor := color.red // Set the background color to red else if close < lower // If the close price is below the Lower Band bgColor := color.green // Set the background color to green // Apply the background color bgcolor(bgColor, transp=90, title="Background Color Based on Bollinger Bands") // Set the background color based on the determined condition with 90% transparency // Postscript: // 1. Once you have set the "Investment Amount (USD)" in the input box, proceed with additional configuration. // Go to "Properties" and adjust the "Initial Capital" value by calculating it as "Total Closed Trades" multiplied by "Investment Amount (USD)" // to ensure the backtest results are aligned correctly with the actual investment values. // // Example: // Investment Amount (USD) = 100 USD // Total Closed Trades = 10 // Initial Capital = 10 x 100 = 1,000 USD // Investment Amount (USD) = 200 USD // Total Closed Trades = 24 // Initial Capital = 24 x 200 = 4,800 USD