Ý tưởng chính của chiến lược này là sử dụng hai đường trung bình động với các khoảng thời gian khác nhau để nắm bắt cơ hội phục hồi sau khi thị trường giảm. Khi giá vượt quá đường trung bình động dài hạn và rút trở lại đường trung bình động ngắn hạn, chiến lược mở một vị trí dài và đóng vị trí khi giá tăng trở lại trên đường trung bình động ngắn hạn hoặc chạm mức giá dừng lỗ. Bằng cách tìm kiếm các cơ hội mua trong thời gian giảm trong một xu hướng, chiến lược nhằm mục đích kiếm lợi nhuận từ thị trường xu hướng.
Chiến lược theo dõi Pullback Moving Average nắm bắt các cơ hội giao dịch dài trong thời gian giảm giá trong xu hướng tăng bằng cách sử dụng vị trí tương đối của hai trung bình động với các giai đoạn khác nhau. Chiến lược này phù hợp với thị trường xu hướng, và với các thiết lập tham số và dừng lỗ thích hợp, nó có thể tạo ra lợi nhuận ổn định trong điều kiện xu hướng. Tuy nhiên, chiến lược này phải đối mặt với một số rủi ro trong thị trường hỗn loạn và trong thời gian đảo ngược xu hướng. Bằng cách giới thiệu nhiều chỉ số hơn, tối ưu hóa kích thước vị trí, thực hiện dừng lỗ động và các phương pháp khác, hiệu suất và sự ổn định của chiến lược này có thể được cải thiện hơn nữa.
/*backtest start: 2023-03-22 00:00:00 end: 2024-03-27 00:00:00 period: 1d basePeriod: 1h 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/ // © contapessoal_ivan // @version=5 strategy("Pullback Strategy", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.005) // Interactive Brokers rate // Get user input i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA") i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.sma(close, i_ma1) ma2 = ta.sma(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.orange)