
Chiến lược theo dõi xu hướng dừng động theo đuổi xu hướng tăng bằng cách phát hiện xu hướng dài hạn và điều chỉnh ngắn hạn, để đạt được mục đích mua bán thấp và bán cao, theo đuổi xu hướng tăng. Chiến lược này đồng thời sử dụng các đơn vị biến động để phát hiện quy mô của lợi nhuận và lỗ hổng, làm cho nó có thể áp dụng cho tất cả các đồng tiền mà không cần lo lắng về sự thay đổi phần trăm.
Lý luận của chiến lược mua là: mua và mở vị trí khi có xu hướng tăng dài hạn ((EMA 200 ngày tăng, RSI 200 ngày lớn hơn 51) và điều chỉnh giảm ngắn hạn ((giá trị cuối cùng của 2 đường K giảm).
Lý luận của selling là: dừng khi giá tăng hơn 1 đơn vị biến động; dừng 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 chênh lệch tiêu chuẩn của giá đóng cửa trong 50 ngày làm đơn vị biến động cơ bản. Như vậy, bạn có thể phát hiện biến động của các đồng tiền khác nhau mà không cần thiết lập tỷ lệ phần trăm.
Ưu điểm lớn nhất của chiến lược này là có thể phát hiện động kích thước biến động của các đồng tiền khác nhau, tùy theo các đồng tiền tự biến động thiết lập đơn vị dừng lỗ. Điều này tránh được vấn đề của phần trăm thiết lập dừng cố định, có thể tự động thích nghi với nhiều đồng tiền.
Một lợi thế khác là kết hợp với phán đoán ngắn hạn dài, có thể lọc hiệu quả phá vỡ giả. Sử dụng xu hướng dài hạn để đánh giá tiền có thể tăng trong tương lai, kết hợp với tín hiệu hồi phục ngắn hạn, có thể tránh hiệu quả các tín hiệu giả như squeeze của Brin.
Rủi ro lớn nhất của chiến lược này nằm ở việc đặt đơn vị dừng lỗ. Nếu biến động quá lớn, khoảng cách dừng có thể quá gần và không thể theo dõi liên tục; nếu biến động quá nhỏ, có thể dừng lỗ quá nhanh. Điều này cần được hỗ trợ bởi EMA chu kỳ dài hơn để tránh sai lầm trong phán đoán đơn vị biến động.
Rủi ro khác là sự phụ thuộc của chiến lược vào phán đoán xu hướng ngắn hạn. Nếu có sự gia tăng dài hạn nhưng không điều chỉnh ngắn hạn, sẽ bỏ lỡ thời gian vào. Điều này có thể cần thêm các chỉ số phán đoán phụ trợ khác.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Tăng thời gian đánh giá EMA dài hơn, tránh sai lệch đơn vị biến động
Tăng 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 đường k ngắn
Tối ưu hóa các điều kiện mở và giữ vị trí, 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 để đánh giá xu hướng, đạt được tỷ lệ thắng cao hơn
Chiến lược theo dõi xu hướng dừng động có ý tưởng tổng thể rõ ràng, cốt lõi là thiết lập đơn vị biến động động. Chiến lược này có thể tự động thích ứng với các đơn vị lợi nhuận và lỗ hổng của các loại tiền tệ khác nhau, không cần thiết lập tỷ lệ phần trăm bằng tay.
/*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)