Chiến lược kết hợp các chỉ số nhiều động lực

Tác giả:ChaoZhang, Ngày: 2023-09-24 13:24:47
Tags:

Tổng quan

Chiến lược thử nghiệm này kết hợp Chande Momentum, RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI và các chỉ số động lực khác, nhập vào các vị trí khi tất cả các chỉ số cung cấp tín hiệu thẳng hàng.

Chiến lược logic

  1. Tính toán Chande Momentum và thiết lập đường mua và bán.

  2. Các chỉ số RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI và các chỉ số khác.

  3. Thiết lập đường mua và bán cho mỗi chỉ số.

  4. Khi Change Momentum vượt qua đường mua, hãy kiểm tra xem các chỉ số khác cũng ở dưới đường mua tương ứng hay không.

  5. Ngược lại, khi Chande Momentum vượt dưới đường bán, trong khi các chỉ số khác vượt quá đường bán của họ, tạo ra tín hiệu ngắn.

Ưu điểm

  1. Kết hợp các chỉ số cung cấp xác nhận lẫn nhau, tránh các tín hiệu sai.

  2. Chande Momentum nhạy cảm nắm bắt sự thay đổi xu hướng.

  3. RMI cho thấy các mức động lực để xác định mức mua quá mức / bán quá mức.

  4. Kiểm tra các tính toán RSI khác nhau với HMA RSI, EVW RSI v.v.

  5. Sự kết hợp nhiều chỉ số linh hoạt cho phép thử nghiệm hiệu quả của chỉ số.

Rủi ro

  1. Yêu cầu cho sự kết hợp nhiều chỉ số khó đáp ứng, ít giao dịch hơn, cơ hội bị bỏ lỡ.

  2. Không có cơ chế kiểm soát rủi ro như dừng lỗ.

  3. Hiệu suất chỉ số phụ thuộc vào khung thời gian, có thể không hoạt động trên tất cả các giai đoạn.

  4. Không tối ưu hóa tham số, điều chỉnh tham số kém có thể.

  5. Không đủ dữ liệu backtest để xác nhận đầy đủ chiến lược.

Các giải pháp có thể:

  1. Nới lỏng ngưỡng chỉ số cho nhiều giao dịch hơn.

  2. Bao gồm trailing hoặc hard stop loss để hạn chế lỗ.

  3. Kiểm tra trên các sản phẩm và khung thời gian khác nhau để tìm các thông số tối ưu.

  4. Sử dụng máy học hoặc tìm kiếm lưới để tối ưu hóa tham số.

  5. Kiểm tra lại trên nhiều thị trường hơn để đảm bảo độ bền.

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

  1. Kiểm tra các bộ tham số khác nhau để tìm cấu hình tối ưu.

  2. Thêm các chỉ số động lực đa thời gian thích nghi.

  3. Bao gồm phát hiện xu hướng để tránh giao dịch chống xu hướng.

  4. Sử dụng máy học để cải thiện trọng số đa chỉ số.

  5. Kết hợp với hệ thống trung bình động để cải thiện các mục.

Tóm lại

Chiến lược này cố gắng xác định các bước ngoặt xu hướng đáng tin cậy hơn bằng cách kết hợp nhiều chỉ số động lực. logic đa dạng có khả năng mở rộng và tối ưu hóa lớn trong các lĩnh vực như lựa chọn tham số, cân nặng chỉ số, kiểm soát rủi ro vv, để có được nhiều tín hiệu chất lượng hơn trong khi đảm bảo độ bền, nhưng rủi ro như phù hợp đường cong cần phải được quản lý.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
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/
// © burgercrisis

//@version=4
strategy("RMI + Triple HMRSI + Double EVWRSI + TERSI Strategy")

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////


src = input(close, "Price", type = input.source)
CMOlength = input(9, minval=1, title="Alpha Chande Momentum Length")

//CMO
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, CMOlength)
sm2 = sum(m2, CMOlength)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)
plot(chandeMO, "Chande MO", color=color.blue)




//RMI
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
length3 = input(title="RMI Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI Momentum ", type=input.integer, minval=1, defval=25)
up3 = rma(max(change(src, momentumLength3), 0), length3)
down3 = rma(-min(change(src, momentumLength3), 0), length3)

rmi3 = (down3 == 0 ? 100 : up3 == 0 ? 0 : 100 - (100 / (1 + up3 / down3)))-50
//
//
// end RMI, end Alex Orekhov copywrite
//
//

lengthMA = input(7)
lengthRSI = input(14)
thrsi = hma(hma(hma(rsi(src, lengthRSI), lengthMA), lengthMA), lengthMA)
thrsi1 = (thrsi-50)*10

lengthMA2 = input(7)
lengthRSI2 = input(14)
devwrsi = ((ema(ema(vwma(rsi(src, lengthRSI2), lengthMA2), lengthMA2), lengthMA2))-50)*5

lengthMA3 = input(7)
lengthRSI3 = input(14)
tersi = ((ema(ema(ema(rsi(src, lengthRSI3), lengthMA3), lengthMA3), lengthMA3))-50)*10

rmirsi = ((thrsi*rmi3/25))

//Boundary Lines

obLevel1 = input(0, title="Chande Sellline")
osLevel1 = input(0, title="Chande Buyline")
hline(obLevel1, color=#0bc4d9)
hline(osLevel1, color=#0bc4d9)

obLevel2 = input(0, title="Triple HMRSI Sellline")
osLevel2 = input(0, title="Triple HMRSI Buyline")
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

obLevel3 = input(0, title="DEVWRSI Sellline")
osLevel3 = input(0, title="DEVWRSI Buyline")
hline(obLevel3, color=#5a0bd9)
hline(osLevel3, color=#5a0bd9)

obLevel4 = input(0, title="TERSI Sellline")
osLevel4 = input(0, title="TERSI Buyline")
hline(obLevel4, color=#5a0bd9)
hline(osLevel4, color=#5a0bd9)

obLevel5 = input(0, title="RMI Sellline")
osLevel5 = input(0, title="RMI Buyline")
hline(obLevel5, color=#5a0bd9)
hline(osLevel5, color=#5a0bd9)

obLevel6 = input(0, title="RMI*RSI Sellline")
osLevel6 = input(0, title="RMI*RSI Buyline")
hline(obLevel6, color=#5a0bd9)
hline(osLevel6, color=#5a0bd9)

plot((thrsi1), title="THRSI")
plot(devwrsi, color=color.red, title="DEVWRSI")
plot(tersi, color=color.yellow, title="TERSI")
plot(rmirsi, color=color.purple, title="RMI*HMRSI")
plot(rmi3, color=color.orange, title="RMI")




longcondition1 = crossover(chandeMO, osLevel1)
shortcondition1 = crossunder(chandeMO, obLevel1)
longcondition2 = rmirsi<osLevel6 and rmi3<osLevel5 and tersi<osLevel4 and devwrsi<osLevel3 and thrsi1<osLevel2  and longcondition1
shortcondition2 = rmirsi>obLevel6 and rmi3>obLevel5 and tersi>obLevel4 and devwrsi>obLevel3 and thrsi1>obLevel2  and shortcondition1

if testPeriod()
    if longcondition2
        strategy.entry("Buy", strategy.long)
    if shortcondition2
        strategy.entry("Sell", strategy.short)






hline(0, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")

Thêm nữa