Chiến lược giao dịch thích nghi dựa trên các chỉ số động lực

Tác giả:ChaoZhang, Ngày: 2024-01-05 11:43:25
Tags:

img

Tổng quan

Chiến lược này là một chiến lược giao dịch chứng khoán thích nghi dựa trên các chỉ số động lực. Nó tích hợp Bollinger Bands, Keltner Channels và chỉ số ép giá để đạt được phán đoán xu hướng, xác định điểm đột phá và thoát khỏi dừng lỗ cho giao dịch tự động.

Nguyên tắc chiến lược

Cốt lõi của chiến lược này là xây dựng một kênh giá thông qua Bollinger Bands và Keltner Channels và xác định các tín hiệu giao dịch khi giá phá vỡ kênh. Nó sẽ có vị trí dài khi giá phá vỡ kênh và có vị trí ngắn khi giá phá vỡ kênh. Ngoài ra, khi giá bị ép trong kênh, chiến lược sẽ xác định hướng hoạt động dựa trên giá trị tích cực và tiêu cực của chỉ số ép giá.

Cụ thể, Bollinger Bands tính toán độ lệch chuẩn của giá để vẽ đường ray trên và dưới; Keltner Channels vẽ đường ray trên và dưới dựa trên mức giá trung bình ± phạm vi biến động trung bình. Khi sáp nhập kênh xảy ra giữa hai, nó được coi là thị trường đi vào hợp nhất trong khi chờ đợi sự đột phá tiếp theo. Chỉ số nén giá phản ánh liệu giá có bị nén giữa hai kênh hay không. Chiến lược xác định hướng thị trường dựa trên giá trị dương và âm của chỉ số nén.

Tóm lại, chiến lược này tích hợp nhiều chỉ số để đánh giá sự chuyển động giá và tạo ra một logic dài và ngắn rõ ràng, có thể lọc hiệu quả các sự đột phá sai và xác định các cơ hội giao dịch có xác suất cao.

Ưu điểm của Chiến lược

  1. Kết hợp nhiều chỉ số với khả năng phán đoán mạnh mẽ. Sự kết hợp của các chỉ số có thể cải thiện độ chính xác.

  2. Chắt chênh lệch chỉ số để xác định, giảm phá vỡ sai.

  3. Kênh dừng lỗ thích nghi, quản lý rủi ro hiệu quả. Kênh đóng vai trò là vị trí dừng lỗ, có thể điều chỉnh tự động dựa trên biến động thị trường để giảm lỗ.

  4. Cài đặt tham số đơn giản, phù hợp với tự động hóa. Chỉ với một vài tham số chính, nó dễ dàng kiểm tra, tối ưu hóa và tích hợp vào các hệ thống giao dịch tự động.

Rủi ro của chiến lược

  1. Chuyển ngắn dài thường xuyên khi thị trường biến động mạnh, dẫn đến tăng số lượng giao dịch.

  2. Các thông số chỉ số không chính xác có thể bỏ lỡ các cơ hội giao dịch tốt. Yêu cầu kiểm tra và tối ưu hóa đủ để tìm các thông số tối ưu.

  3. Chỉ áp dụng cho các cổ phiếu có hướng rõ ràng, không phù hợp với các thị trường biến động cực kỳ.

Hướng dẫn tối ưu hóa

  1. Tăng mô-đun điều khiển vị trí để tối ưu hóa hiệu quả sử dụng vốn. Ví dụ, phân bổ vốn dựa trên sức mạnh đột phá.

  2. Tăng mô hình học máy để điều chỉnh các tham số chỉ số một cách năng động, cho phép các chỉ số tự động thích nghi với các chu kỳ và cổ phiếu khác nhau.

  3. Cải thiện chiến lược dừng lỗ bằng cách giới thiệu nhiều chỉ số phụ để xác định thời gian dừng lỗ.

Kết luận

Chiến lược này tích hợp các dải Bollinger, kênh Keltner và chỉ số nén giá để tạo thành một hệ thống kiểm soát rủi ro và đánh giá rõ ràng. Nó kết hợp đánh giá xu hướng và các hoạt động đột phá, có thể tự động thích nghi với điều kiện thị trường và xác định cơ hội giao dịch có xác suất cao. Với việc tối ưu hóa các tham số hơn nữa và cải thiện các điều kiện phụ trợ, chiến lược này có thể được tăng cường thêm thành một công cụ quan trọng cho giao dịch định lượng.


/*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")



Thêm nữa