Chiến lược Dynamic Take Profit Following Trend phát hiện ra xu hướng dài hạn và rút ngắn hạn để đạt được mức mua thấp và bán cao, với mục tiêu theo đuổi xu hướng tăng. Chiến lược cũng sử dụng các đơn vị biến động để phát hiện kích thước thắng thua để có thể áp dụng cho tất cả các đồng tiền mà không phải lo lắng về sự thay đổi tỷ lệ phần trăm.
Lý thuyết mua của chiến lược này là: khi xu hướng tăng dài hạn xuất hiện (EMA 200 ngày tăng, RSI 200 ngày lớn hơn 51) và giảm ngắn hạn xảy ra (hai ngọn nến cuối cùng cho thấy giá đóng giảm), các vị trí dài được mở.
Lý thuyết bán hàng là: lấy lợi nhuận khi giá tăng hơn 1 đơn vị biến động; dừng lỗ khi giá giảm hơn 2 đơn vị biến động.
Đơn vị biến động được tính bằng: 2 lần độ lệch chuẩn của giá đóng trong 50 ngày qua. Điều này có thể phát hiện các điều kiện biến động của các đồng tiền khác nhau tự động mà không cần cài đặt tỷ lệ phần trăm thủ công.
Ưu điểm lớn nhất của chiến lược này là nó có thể phát hiện động kích thước biến động của các đồng tiền khác nhau và đặt mức dừng lỗ / lấy lợi nhuận phù hợp. Điều này tránh được vấn đề cài đặt tỷ lệ phần trăm cố định và có thể tự động thích nghi với nhiều đồng tiền hơn.
Một lợi thế khác là kết hợp các phán đoán dài hạn và ngắn hạn có thể lọc ra hiệu quả các sự đột phá sai. Sử dụng xu hướng dài hạn để đánh giá các đồng tiền có tiềm năng tăng và kết hợp nó với các tín hiệu pullback ngắn hạn có thể tránh các tín hiệu sai như Bollinger squeezes.
Rủi ro lớn nhất của chiến lược này là cài đặt đơn vị dừng lỗ / lấy lợi nhuận. Nếu biến động quá cao, khoảng cách lấy lợi nhuận có thể quá gần để tiếp tục theo đuổi xu hướng tăng; nếu biến động quá thấp, dừng lỗ có thể được kích hoạt quá nhanh. Điều này cần EMA dài hơn để giúp tránh sai lầm trong phán đoán đơn vị biến động.
Một rủi ro khác là sự phụ thuộc của chiến lược vào xu hướng ngắn hạn. Nếu có xu hướng tăng dài hạn mà không có sự rút lui ngắn hạn, thời gian vào sẽ bị bỏ lỡ. Điều này có thể cần các chỉ số hỗ trợ bổ sung.
Chiến lược có thể được tối ưu hóa theo các hướng sau:
Thêm các đánh giá EMA dài hạn hơn để tránh lỗi đơn vị biến động
Thêm các chỉ số như khối lượng giao dịch để đánh giá xu hướng, giảm sự phụ thuộc vào các ngọn nến ngắn hạn
Tối ưu hóa điều kiện nhập cảnh và xuất cảnh, thiết lập các quy tắc nhập cảnh nghiêm ngặt hơn
Kết hợp các thuật toán học máy để xác định hướng xu hướng, đạt được tỷ lệ thắng cao hơn
Chiến lược Dynamic Take Profit Following Trend có logic rõ ràng ở cốt lõi của nó
/*backtest start: 2022-12-22 00:00:00 end: 2023-12-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © BHD_Trade_Bot strategy(shorttitle='Take Profit On Trend', title='Take Profit On Trend (by BHD_Trade_Bot)', overlay=true, initial_capital = 15, default_qty_type = strategy.cash, default_qty_value = 15, commission_type=strategy.commission.percent, commission_value=0.1) //Backtest Time start_day = 1 start_month = 1 start_year = 2021 end_day = 1 end_month = 1 end_year = 2050 start_time = timestamp(start_year, start_month, start_day, 00, 00) end_time = timestamp(end_year, end_month, end_day, 23, 59) is_back_test_time() => time >= start_time and time <= end_time ? true : false // Last bar h1_last_bar = (timenow - time)/1000/60/60 < 2 // EMA ema50 = ema(close, 50) ema200 = ema(close, 200) // RSI length 200 rsi200 = rsi(close, 200) // Bollinger Bands length 50 bb50 = 2 * stdev(close, 50) // BHD Unit bhd_unit = sma(bb50, 100) bb50_upper = ema50 + bhd_unit bb50_lower = ema50 - bhd_unit // All n candles is going down all_body_decrease(n) => isValid = true for i = 0 to (n - 1) if (close[i] > close[i + 1]) isValid := false break isValid // ENTRY // Long-term uptrend entry_condition1 = rsi200 > 51 // Short-term downtrend entry_condition2 = all_body_decrease(2) ENTRY_CONDITION = entry_condition1 and entry_condition2 if (ENTRY_CONDITION and is_back_test_time()) strategy.entry("entry", strategy.long) // CLOSE CONDITIONS // Price increase 1 BHD unit TAKE_PROFIT = close > strategy.position_avg_price + bhd_unit // Price decrease 2 BHD unit STOP_LOSS = close < strategy.position_avg_price - bhd_unit * 2 CLOSE_CONDITION = TAKE_PROFIT or STOP_LOSS if (CLOSE_CONDITION or h1_last_bar) strategy.close("entry") // Draw plot(ema50) plot(ema200, color=color.yellow) plot(bb50_upper) plot(bb50_lower)