
Chiến lược Phân Biến Đường Động Vật (Momentum Direction Divergence Strategy) là một trong những kỹ thuật được mô tả bởi William Blau trong cuốn sách của ông về động lượng, hướng và phân tán (Momentum, Direction and Divergence). Chiến lược này tập trung vào ba khía cạnh quan trọng: động lượng, hướng và phân tán. Ông Blau là một kỹ sư điện, sau đó trở thành một nhà giao dịch, ông đã nghiên cứu sâu về mối quan hệ giữa giá và động lượng.
Chiến lược này đã vẽ ra chỉ số phân tán hướng động lực (Ergotic CSI) và đường trơn của nó để lọc tiếng ồn.
Đầu mã định nghĩa một hàm fADX với chỉ số chuyển động tự điều chỉnh (((ADX), nó chấp nhận tham số Len để biểu thị chu kỳ mịn. Chức năng này tính toán đường di chuyển trung bình (RMA) của phạm vi thực (((TR)) làm phân số, tính toán động lượng đa đầu và động lượng đầu trống (RMA) làm phân tử, sau đó chia tỷ lệ nhận được, biểu thị cường độ tương đối của đa đầu và đầu trống. Cuối cùng, kết hợp cường độ đa đầu và cường độ đầu trống để có được giá trị ADX bằng một công thức.
Sau đó là định nghĩa các tham số chiến lược: r là tham số mài mòn của ATR, Length là chiều dài của ADX, BigPointValue là chiều dài của Bigpoint, SmthLen là chiều dài của CSI mài mòn, SellZone và BuyZone là vùng mua và bán hợp lệ. Reverse là tín hiệu giao dịch đảo ngược.
Lập luận quan trọng trong việc tính toán CSI. Đầu tiên, tính toán độ dao động thực tế ATR và ADX. Sau đó, tính toán hệ số phạt K, bao gồm các giá trị điểm lớn, ATR và ADX.
Xác định hướng giao dịch dựa trên giá trị SMA của CSI. Nếu cao hơn BuyZone, bạn sẽ làm nhiều hơn, và nếu thấp hơn SellZone, bạn sẽ không làm gì cả. Vẽ đường cong CSI và SMA của nó và đánh dấu các vùng giao dịch khác nhau bằng màu sắc.
Chiến lược này kết hợp các ưu điểm của chỉ số động lực ATR và chỉ số xu hướng ADX, xem xét cả sự biến động của thị trường và mức độ xu hướng, tránh các hạn chế của chỉ sử dụng ATR và chỉ sử dụng ADX. Thiết kế hệ số phạt K khéo léo kết hợp các chỉ số này với mối quan hệ của giá trị điểm lớn.
Thêm vào đó là việc sử dụng thông tin về giá cả, không chỉ quan tâm đến xu hướng động lực mà còn quan tâm đến mức độ tuyệt đối của giá cả, điều này làm tăng hiệu quả của chiến lược, khác với dao động thông thường.
Quá trình xử lý trơn tru và phân đoạn phán đoán cung cấp tín hiệu giao dịch rõ ràng cho các quyết định chiến lược, thuận lợi cho hoạt động thực tế.
Chiến lược này rất nhạy cảm với các thiết lập tham số, chẳng hạn như độ dài chu kỳ của ATR và ADX, thiết lập giá trị điểm lớn, tham số làm mịn CSI, và nhiều thứ khác sẽ ảnh hưởng đến hiệu suất của chiến lược. Cần xác định sự kết hợp tham số phù hợp thông qua nhiều phản hồi.
CSI là một dao động mới được đề xuất, hiệu quả của nó cần được xác minh trong nhiều thị trường khác nhau. Nếu chỉ số này không hoạt động tốt, nó sẽ ảnh hưởng đến lợi nhuận của chiến lược.
Chiến lược này không có cơ chế dừng lỗ, trực tiếp theo tín hiệu CSI, có một mức độ rủi ro, cần kết hợp với dừng lỗ để sử dụng.
Bạn có thể thử nghiệm các kết hợp của các tham số trong các thị trường khác nhau để tìm ra một kết hợp phổ biến hơn.
Có thể giới thiệu một cơ chế về chiều dài chu kỳ ADX động, điều chỉnh các tham số của ADX theo tình trạng thị trường.
Có thể kết hợp với các chỉ số dao động khác để quyết định thời gian mua và bán, làm cho chiến lược trở nên ổn định hơn.
Các chiến lược dừng lỗ có thể được thêm vào để cải thiện chiến lược tổng thể.
Chiến lược phân tán hướng động lực tích hợp các ưu điểm của nhiều chỉ số, thiết kế và giao dịch các chỉ số CSI bằng cách sử dụng nhiều chiều của giá cả, động lực và xu hướng. Các tham số của chiến lược này được thiết lập linh hoạt, có hiệu suất cao, đáng để thử nghiệm và tối ưu hóa hơn nữa và có thể trở thành công cụ có lợi cho giao dịch định lượng.
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 20/06/2018
// This is one of the techniques described by William Blau in his book
// "Momentum, Direction and Divergence" (1995). If you like to learn more,
// we advise you to read this book. His book focuses on three key aspects
// of trading: momentum, direction and divergence. Blau, who was an electrical
// engineer before becoming a trader, thoroughly examines the relationship between
// price and momentum in step-by-step examples. From this grounding, he then looks
// at the deficiencies in other oscillators and introduces some innovative techniques,
// including a fresh twist on Stochastics. On directional issues, he analyzes the
// intricacies of ADX and offers a unique approach to help define trending and
// non-trending periods.
// This indicator plots Ergotic CSI and smoothed Ergotic CSI to filter out noise.
//
// You can change long to short in the Input Settings
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
fADX(Len) =>
up = change(high)
down = -change(low)
trur = rma(tr, Len)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
sum = plus + minus
100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)
strategy(title="Ergodic CSI Backtest")
r = input(32, minval=1)
Length = input(1, minval=1)
BigPointValue = input(1.0, minval=0.00001)
SmthLen = input(5, minval=1)
SellZone = input(0.004, minval=0.00001)
BuyZone = input(0.024, minval=0.001)
reverse = input(false, title="Trade reverse")
hline(BuyZone, color=green, linestyle=line)
hline(SellZone, color=red, linestyle=line)
source = close
K = 100 * (BigPointValue / sqrt(r) / (150 + 5))
xTrueRange = atr(1)
xADX = fADX(Length)
xADXR = (xADX + xADX[1]) * 0.5
nRes = iff(Length + xTrueRange > 0, K * xADXR * xTrueRange / Length,0)
xCSI = iff(close > 0, nRes / close, 0)
xSMA_CSI = sma(xCSI, SmthLen)
pos = iff(xSMA_CSI > BuyZone, 1,
iff(xSMA_CSI <= SellZone, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(xCSI, color=green, title="Ergodic CSI")
plot(xSMA_CSI, color=red, title="SigLin")