Chiến lược đồng bộ xu hướng động lượng


Ngày tạo: 2024-01-16 14:10:25 sửa đổi lần cuối: 2024-01-16 14:10:25
sao chép: 0 Số nhấp chuột: 818
1
tập trung vào
1617
Người theo dõi

Chiến lược đồng bộ xu hướng động lượng

Tổng quan

Chiến lược đồng bộ hóa xu hướng động lực thực hiện sự kết hợp hiệu quả của phân tích động lực và phán đoán xu hướng bằng cách tích hợp các lợi thế của chỉ số động lực tương đối (RMI) và chỉ số xu hướng siêu. Chiến lược này đồng thời chú ý đến xu hướng thay đổi giá cả và mức độ động lực thị trường, đánh giá xu hướng thị trường từ góc độ toàn diện hơn.

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

Chỉ số động lượng tương đối (RMI)

RMI là một phiên bản cải tiến của chỉ số cường độ tương đối (RSI). Nó kết hợp nhiều tính năng hơn như chiều hướng và độ lớn của sự thay đổi giá, cho phép đánh giá chính xác hơn về động lực thị trường.

Cách tính RMI

RMI được tính bằng cách tính trung bình tăng và giảm trong một chu kỳ nhất định. Khác với RSI, RMI sử dụng giá trị thay đổi của giá đóng cửa ngày hôm đó so với giá đóng cửa ngày hôm trước, thay vì tăng và giảm đơn giản.

Quyết định động lực

Chiến lược này sử dụng giá trị trung bình của RMI so với MFI để so sánh với giá trị tích cực và giá trị tiêu cực của động lực dự kiến để đánh giá mức động lực thị trường hiện tại, để quyết định đặt vị trí và đặt vị trí.

Chỉ số siêu xu hướng

Chỉ số siêu xu hướng dựa trên tính toán chu kỳ thời gian cao hơn, có thể cung cấp phán đoán về xu hướng lớn. Nó sẽ điều chỉnh các tham số ATR động dựa trên bước sóng thực, do đó có thể xác định hiệu quả các điểm chuyển hướng.
Chiến lược này cũng có thêm đường trung bình trọng lượng khối lượng giao dịch VWMA, tăng cường khả năng nhận diện các biến động xu hướng quan trọng.

Định hướng giao dịch

Chiến lược này có thể lựa chọn giao dịch nhiều, ngắn hoặc hai chiều. Điều này cho phép các nhà giao dịch có thể điều chỉnh linh hoạt theo quan điểm thị trường và sở thích rủi ro của họ.

Phân tích lợi thế chiến lược

Kết hợp động lực và xu hướng

So với các chiến lược sử dụng chỉ số động lực hoặc chỉ số xu hướng đơn lẻ, chiến lược này đạt được sự phán đoán chính xác hơn về xu hướng thị trường bằng cách tích hợp lợi thế của chỉ số RMI và siêu xu hướng.

Phân tích nhiều chu kỳ thời gian

Sử dụng các chỉ số RMI và siêu xu hướng trong các chu kỳ khác nhau để nắm bắt được xu hướng ngắn hạn và dài hạn.

Chiến lược dừng lỗ thời gian thực

Cơ chế dừng lỗ thời gian thực dựa trên siêu xu hướng có thể kiểm soát hiệu quả tổn thất đơn lẻ.

Định hướng giao dịch linh hoạt

Lựa chọn giao dịch nhiều, ngắn hoặc hai chiều, cho phép chiến lược này thích ứng với các môi trường thị trường khác nhau.

Phân tích rủi ro

Các tham số rất khó để tối ưu hóa

Tối ưu hóa các tham số như RMI và siêu xu hướng rất phức tạp và có thể ảnh hưởng đến hiệu quả của chiến lược nếu thiết lập không đúng cách.

Cắt lỗ quá gần có thể dẫn đến quá nhiều dừng lỗ

Thị trường quá nhạy cảm với biến động thị trường trong các chu kỳ nhỏ, có thể gây ra vấn đề dừng lỗ quá thường xuyên.

Cách giải quyết: Giảm phạm vi thiệt hại một cách thích hợp, hoặc sử dụng các phương pháp dừng xung động khác.

Hướng tối ưu hóa chiến lược

Tối ưu hóa khả năng thích ứng đa giống

Mở rộng phạm vi giống có thể áp dụng, xác định các hướng tối ưu hóa tham số của các giống khác nhau. Cho phép chiến lược được sao chép ở nhiều thị trường hơn.

Tối ưu hóa dừng lỗ động

Phương thức dừng động được thêm vào, cho phép dây dừng theo dõi tốt hơn các băng tần hiện tại và giảm thiểu thiệt hại quá mức do rung động nhỏ.

Thêm điều kiện lọc

Kết hợp nhiều chỉ số phán đoán như một điều kiện lọc, tránh xây dựng nhà kho khi không có tín hiệu rõ ràng.

Tóm tắt

Chiến lược này có khả năng đánh giá chính xác tình trạng thị trường thông qua sự kết hợp khéo léo của chỉ số RMI và siêu xu hướng. Nó cũng rất tốt trong việc kiểm soát rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @ presentTrading

//@version=5
strategy("RMI Trend Sync - Strategy [presentTrading]", shorttitle = "RMI Sync [presentTrading]", overlay=true )

// ---> Inputs --------------
// Add Button for Trading Direction
tradeDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"])

// Relative Momentum Index (RMI) Settings
Length = input.int(21, "RMI Length", group = "RMI Settings")
pmom = input.int(70, "Positive Momentum Threshold", group = "RMI Settings")
nmom = input.int(30, "Negative Momentum Threshold", group = "RMI Settings")
bandLength = input.int(30, "Band Length", group = "Momentum Settings")
rwmaLength = input.int(20, "RWMA Length", group = "Momentum Settings")


// Super Trend Settings
len = input.int(10, "Super Trend Length", minval=1, group="Super Trend Settings")
higherTf1 = input.timeframe('480', "Higher Time Frame", group="Super Trend Settings")
factor = input.float(3.5, "Super Trend Factor", step=.1, group="Super Trend Settings")
maSrc = input.string("WMA", "MA Source", options=["SMA", "EMA", "WMA", "RMA", "VWMA"], group="Super Trend Settings")
atr = request.security(syminfo.tickerid, higherTf1, ta.atr(len))
TfClose1 = request.security(syminfo.tickerid, higherTf1, close)

// Visual Settings
filleshow = input.bool(true, "Display Range MA", group = "Visual Settings")
bull = input.color(#00bcd4, "Bullish Color", group = "Visual Settings")
bear = input.color(#ff5252, "Bearish Color", group = "Visual Settings")

// Calculation of Bar Range
barRange = high - low

// RMI and MFI Calculations
upChange = ta.rma(math.max(ta.change(close), 0), Length)
downChange = ta.rma(-math.min(ta.change(close), 0), Length)
rsi = downChange == 0 ? 100 : upChange == 0 ? 0 : 100 - (100 / (1 + upChange / downChange))
mf = ta.mfi(hlc3, Length)
rsiMfi = math.avg(rsi, mf)

// Momentum Conditions
positiveMomentum = rsiMfi[1] < pmom and rsiMfi > pmom and rsiMfi > nmom and ta.change(ta.ema(close,5)) > 0
negativeMomentum = rsiMfi < nmom and ta.change(ta.ema(close,5)) < 0

// Momentum Status
bool positive = positiveMomentum ? true : negativeMomentum ? false : na
bool negative = negativeMomentum ? true : positiveMomentum ? false : na

// Band Calculation
calculateBand(len) =>
    math.min(ta.atr(len) * 0.3, close * (0.3/100)) * 4 

band = calculateBand(bandLength)

// Range Weighted Moving Average (RWMA) Calculation
calculateRwma(range_, period) =>
    weight = range_ / math.sum(range_, period)
    sumWeightedClose = math.sum(close * weight, period)
    totalWeight = math.sum(weight, period)
    sumWeightedClose / totalWeight

rwma = calculateRwma(barRange, rwmaLength)
colour = positive ? bull : negative ? bear : na
rwmaAdjusted = positive ? rwma - band : negative ? rwma + band : na

max = rwma + band
min = rwma - band

longCondition       = positive and not positive[1]
shortCondition      = negative and not negative[1]

longExitCondition   = shortCondition
shortExitCondition  = longCondition

// Dynamic Trailing Stop Loss

vwma1 = switch maSrc
    "SMA"  => ta.sma(TfClose1*volume, len) / ta.sma(volume, len)
    "EMA"  => ta.ema(TfClose1*volume, len) / ta.ema(volume, len)
    "WMA"  => ta.wma(TfClose1*volume, len) / ta.wma(volume, len)

upperBand = vwma1 + factor * atr
lowerBand = vwma1 - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
float superTrend = na
int direction = na
superTrend := direction == -1 ? lowerBand : upperBand

longTrailingStop = superTrend - atr * factor
shortTrailingStop = superTrend + atr * factor

// Strategy Order Execution
if (tradeDirection == "Long" or tradeDirection == "Both")
    strategy.entry("Long", strategy.long, when = longCondition)
    strategy.exit("Exit Long", "Long", when=longExitCondition, stop = longTrailingStop)
if (tradeDirection == "Short" or tradeDirection == "Both")
    strategy.entry("Short", strategy.short, when =shortCondition)
    strategy.exit("Exit Short", "Short", when=shortExitCondition, stop = shortTrailingStop)