
Chiến lược này là một chiến lược giao dịch chứng khoán tự điều chỉnh dựa trên chỉ số động lực. Nó tích hợp các chỉ số Brin Belt, Keltner Channel và Price Compression để thực hiện giao dịch hoàn toàn tự động trong việc đánh giá xu hướng, nhận diện điểm đột phá và dừng lỗ.
Chiến lược này chủ yếu xây dựng các kênh giá thông qua các kênh Brin và Keltner, xác định các kênh phá vỡ tạo ra tín hiệu giao dịch. Khi giá từ dưới lên phá vỡ kênh, thực hiện hành động đợt tăng giá; Khi giá từ trên xuống phá vỡ kênh, thực hiện hành động đợt giảm giá. Ngoài ra, chiến lược cũng sử dụng chỉ số nén giá để xác định hiện đang ở trong kênh giá và thực hiện hành động tương ứng dựa trên giá trị chênh lệch tích cực của chỉ số.
Cụ thể, Brin Belt được lên và xuống đường bằng cách tính toán chênh lệch tiêu chuẩn của giá; Keltner Channel được lên và xuống đường bằng cách tính toán giá trị trung bình của giá trị ± phạm vi biến động trung bình. Khi cả hai kênh xảy ra fdopen, cho rằng thị trường đi vào cân bằng và chờ đợi đột phá tiếp theo. Chỉ số nén giá phản ánh liệu giá có bị nén trong hai kênh hay không, và định hướng thị trường dựa trên giá trị tích cực hoặc tiêu cực của chênh lệch nén.
Nói chung, chiến lược này kết hợp nhiều chỉ số để xác định xu hướng giá thành, tạo ra một logic dài và ngắn rõ ràng, có thể lọc hiệu quả các đột phá giả mạo và xác định cơ hội giao dịch có xác suất cao.
Kết hợp nhiều chỉ số, có khả năng phán đoán cao. Kết hợp các chỉ số có thể giúp tăng độ chính xác nhận diện.
Xác định chênh lệch chỉ số nén, giảm đột phá giả. Chỉ số chênh lệch là điều kiện phụ trợ, tránh giao dịch vô nghĩa.
Chuyển đổi tự động với lỗ hổng kênh, kiểm soát rủi ro hiệu quả. Cổng là vị trí dừng lỗ, có thể tự động điều chỉnh theo biến động của thị trường, giảm tổn thất.
Cài đặt tham số đơn giản, thích hợp cho tự động hóa. Chỉ có một vài tham số chính, dễ dàng kiểm tra và tối ưu hóa, dễ dàng tích hợp vào hệ thống giao dịch tự động.
Chuyển đổi đa không gian thường xuyên sẽ làm tăng số lần giao dịch. Khi thị trường biến động, có thể dẫn đến việc mở và đóng các vị trí thường xuyên.
Các tham số chỉ số không phù hợp có thể bỏ lỡ cơ hội được đào tạo tốt. Cần thử nghiệm đầy đủ để tối ưu hóa và tìm các tham số tối ưu.
Chỉ phù hợp với giá cổ phiếu có định hướng rõ ràng, không phù hợp với thị trường biến động cực kỳ. Chỉ số dễ bị nhầm lẫn, tạo ra tín hiệu sai.
Thêm mô-đun kiểm soát vị trí, tối ưu hóa hiệu quả sử dụng vốn. Ví dụ: phân bổ vốn theo cường độ đột phá.
Thêm mô hình học máy để điều chỉnh các tham số chỉ số động. Cho phép tham số chỉ số tự động thích ứng với các chu kỳ khác nhau, các cổ phiếu khác nhau.
Nâng cao chiến lược dừng lỗ, giới thiệu nhiều chỉ số hỗ trợ để xác định thời gian dừng lỗ. Sau khi cải tiến, có thể giảm số lần dừng lỗ ở các điểm quan trọng.
Chiến lược này tích hợp các chỉ số Brin Belt, Keltner Channel và Price Compression để tạo ra một hệ thống logic phán đoán và kiểm soát rủi ro rõ ràng. Nó kết hợp sự phán đoán xu hướng và hoạt động đột phá, có thể tự động thích ứng với tình hình và xác định cơ hội giao dịch có tỷ lệ xác suất cao.
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 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/
// © juliopetronilo
//@version=4
strategy("DMI/ADX/Squeeze Robot", shorttitle="DMI/ADX/SQZ", overlay=true)
// Squeeze Momentum Indicator
length = input(20, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)")
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev
ma = sma(source, lengthKC)
rangeKC = useTrueRange ? tr : (high - low)
rangema = sma(rangeKC, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = not (sqzOn or sqzOff)
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)
// DMI/ADX Plot
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
keyLevel = input(23, title="Key Level for ADX")
dirmov(len) =>
up = change(high)
down = -change(low)
truerange = rma(tr, len)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx_val = abs(plus - minus) / (sum == 0 ? 1 : sum) * 100
[adx_val, plus, minus]
[sig, up, down] = adx(dilen, adxlen)
// Estrategia de Trading
strategy.entry("Buy", strategy.long, when=sqzOn and crossover(up, down) and crossover(val, 0))
strategy.entry("Sell", strategy.short, when=sqzOn and crossunder(up, down) and crossunder(val, 0))
strategy.close("Buy", when=sqzOff)
strategy.close("Sell", when=sqzOff)
// Plot de los indicadores
plot(val, color=color.blue, style=plot.style_histogram, linewidth=4)
plot(0, color=noSqz ? color.blue : sqzOn ? color.black : color.rgb(236, 238, 247), style=plot.style_cross, linewidth=2)
plot(up, color=color.blue, title="+DI")
plot(down, color=color.gray, title="-DI")
plot(keyLevel, color=color.white, title="Key Level")