Chiến lược siêu động lực


Ngày tạo: 2023-11-06 09:24:02 sửa đổi lần cuối: 2023-11-06 09:24:02
sao chép: 0 Số nhấp chuột: 696
1
tập trung vào
1617
Người theo dõi

Chiến lược siêu động lực

Tổng quan

Chiến lược siêu động lực tổng hợp sử dụng nhiều chỉ số động lực để mua hoặc bán khi nhiều chỉ số động lực đồng thời tăng hoặc giảm. Chiến lược này có thể nắm bắt xu hướng giá một cách chính xác hơn bằng cách kết hợp nhiều chỉ số động lực và tránh tín hiệu sai do chỉ số đơn lẻ.

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

Chiến lược này sử dụng đồng thời 4 chỉ số RMI của Everget và 1 chỉ số biến động động của Chande. Chỉ số RMI dựa trên tính toán động lực giá, có thể đánh giá mức tăng và giảm giá. Chande MO, bằng cách tính toán biến động giá, để đánh giá tình trạng quá mua quá bán của thị trường.

Hoạt động mua được thực hiện khi RMI5 đi qua đường mua của nó, RMI4 đi qua đường mua của nó, RMI3 đi qua đường mua của nó, RMI2 đi qua đường mua của nó, RMI1 đi qua đường mua của nó và Chande MO đi qua đường mua của nó.

Hoạt động bán được thực hiện khi RMI5 đi qua đường dây bán, RMI4 đi qua đường dây bán, RMI3 đi qua đường dây bán, RMI2 đi qua đường dây bán, RMI1 đi qua đường dây bán và Chande MO đi qua đường dây bán.

RMI5 được thiết lập theo hướng ngược lại với các chỉ số RMI khác, điều này giúp nhận ra xu hướng tốt hơn để thực hiện hoạt động kim tự tháp.

Phân tích lợi thế

  • Kết hợp nhiều chỉ số để đánh giá xu hướng chính xác hơn, tránh tín hiệu sai của chỉ số đơn lẻ

  • Bao gồm các chỉ số theo nhiều chu kỳ thời gian để xác định xu hướng ở cấp độ lớn hơn

  • Chỉ số RMI ngược có thể hỗ trợ nhận dạng xu hướng và hoạt động kim tự tháp

  • Chande MO giúp tránh giao dịch sai khi mua quá mức

Phân tích rủi ro

  • Quá nhiều kết hợp chỉ số, thiết lập tham số phức tạp, cần kiểm tra cẩn thận và tối ưu hóa

  • Có thể tạo ra tín hiệu sai khi nhiều chỉ số thay đổi cùng một lúc

  • Các chỉ số tổng hợp cho thấy tỷ lệ giao dịch có thể thấp hơn

  • Cần chú ý đến các tham số chỉ số phù hợp với các giống và môi trường thị trường khác nhau

Hướng tối ưu hóa

  • Thiết lập tham số chỉ số thử nghiệm, tối ưu hóa tham số để tăng sự ổn định của chiến lược

  • Cố gắng tăng hoặc giảm một số chỉ số để đánh giá ảnh hưởng đến chất lượng tín hiệu

  • Một số điều kiện lọc có thể được đưa ra để tránh tín hiệu sai trong trường hợp thị trường cụ thể

  • Điều chỉnh vị trí đường mua và bán của chỉ số để tìm ra sự kết hợp tham số tối ưu

  • Cân nhắc thêm hệ thống ngăn chặn để kiểm soát rủi ro

Tóm tắt

Chiến lược này cải thiện khả năng phán đoán xu hướng thị trường thông qua việc sử dụng nhiều chỉ số động lực tổng hợp. Tuy nhiên, thiết lập tham số phức tạp, cần được kiểm tra cẩn thận, tối ưu hóa, cải tiến và điều chỉnh liên tục. Nếu được sử dụng đúng cách, hy vọng sẽ có được tín hiệu giao dịch tốt hơn, có một số lợi thế trong việc theo dõi xu hướng thị trường. Tuy nhiên, thương nhân vẫn cần chú ý đến rủi ro, tìm kiếm sự kết hợp tham số tốt nhất và tham gia cơ chế kiểm soát rủi ro để giao dịch ổn định.

Mã nguồn chiến lược
/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Super Momentum Strat", shorttitle="SMS", format=format.price, precision=2)

//* 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)
highlightBreakouts = input(title="Highlight Overbought/Oversold Breakouts ?", type=input.bool, defval=true)

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)+50
plot(chandeMO, "Chande MO", color=color.blue)

obLevel = input(75, title="Chande Sellline")
osLevel = input(25, title="Chande Buyline")
hline(obLevel, color=#0bc4d9)
hline(osLevel, color=#0bc4d9)




///
///RMIS 
//
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
//
///
///


//RMI1
length1 = input(title="RMI1 Length", type=input.integer, minval=1, defval=8)
momentumLength1 = input(title="RMI1 Momentum ", type=input.integer, minval=1, defval=3)
up1 = rma(max(change(src, momentumLength1), 0), length1)
down1 = rma(-min(change(src, momentumLength1), 0), length1)

rmi1 = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))

obLevel1 = input(57, title="RMI1 Sellline")
osLevel1 = input(37, title="RMI1 Buyline")

rmiColor1 = rmi1 > obLevel1 ? #0ebb23 : rmi1 < osLevel1 ? #ff0000 : #ffe173
plot(rmi1, title="RMI 1", linewidth=2, color=rmiColor1, transp=0)
hline(obLevel1, color=#0b57d9)
hline(osLevel1, color=#0b57d9)


//RMI2
length2 = input(title="RMI2 Length", type=input.integer, minval=1, defval=12)
momentumLength2 = input(title="RMI2 Momentum ", type=input.integer, minval=1, defval=3)
up2 = rma(max(change(src, momentumLength1), 0), length2)
down2 = rma(-min(change(src, momentumLength1), 0), length2)

rmi2 = down2 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

obLevel2 = input(72, title="RMI2 Sellline")
osLevel2 = input(37, title="RMI2 Buyline")

rmiColor2 = rmi1 > obLevel1 ? #0ebb23 : rmi2 < osLevel2 ? #ff0000 : #c9ad47
plot(rmi2, title="RMI 2", linewidth=2, color=rmiColor2, transp=0)
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

//RMI3
length3 = input(title="RMI3 Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI3 Momentum ", type=input.integer, minval=1, defval=53)
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))

obLevel3 = input(46, title="RMI3 Sellline")
osLevel3 = input(24, title="RMI3 Buyline")

rmiColor3 = rmi3 > obLevel3 ? #0ebb23 : rmi3 < osLevel3 ? #ff0000 : #967d20
plot(rmi3, title="RMI 3", linewidth=2, color=rmiColor3, transp=0)
hline(obLevel3, color=#cf0bd9)
hline(osLevel3, color=#cf0bd9)
//RMI4
length4 = input(title="RMI4 Length", type=input.integer, minval=1, defval=520)
momentumLength4 = input(title="RMI4 Momentum ", type=input.integer, minval=1, defval=137)
up4 = rma(max(change(src, momentumLength4), 0), length4)
down4 = rma(-min(change(src, momentumLength4), 0), length4)

rmi4 = down4 == 0 ? 100 : up4 == 0 ? 0 : 100 - (100 / (1 + up4 / down4))

obLevel4 = input(0, title="RMI4 Sellline")
osLevel4 = input(100, title="RMI4 Buyline")

rmiColor4 = rmi4 > obLevel4 ? #0ebb23 : rmi4 < osLevel4 ? #ff0000 : #7a630b
plot(rmi4, title="RMI 4", linewidth=2, color=rmiColor4, transp=0)
hline(obLevel4, color=#bd1150)
hline(osLevel4, color=#bd1150)


//RMI5
length5 = input(title="RMI5 Length", type=input.integer, minval=1, defval=520)
momentumLength5 = input(title="RMI5 Momentum ", type=input.integer, minval=1, defval=137)
up5 = rma(max(change(src, momentumLength5), 0), length5)
down5 = rma(-min(change(src, momentumLength5), 0), length5)

rmi5 = down5 == 0 ? 100 : up4 == 0 ? 0 : 100 - (100 / (1 + up5 / down5))

buy5 = input(0, title="RMI5 Buy Above")
sell5 = input(47, title="RMI5 Sell Below")

rmiColor5 = rmi5 > buy5 ? #0ebb23 : rmi5 < sell5 ? #ff0000 : #7a630b
plot(rmi5, title="RMI 5", linewidth=2, color=rmiColor5, transp=0)
hline(buy5, color=#bd1150)
hline(sell5, color=#bd1150)
///
///END RMIS 
//
// 
// Relative Momentum Index script may be freely distributed under the MIT license.
//
///
///

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

//alerts


longcondition1 = crossover(chandeMO, osLevel)
shortcondition1 = crossunder(chandeMO, obLevel)
longcondition2 = rmi5>buy5 and rmi4<osLevel4 and rmi3<osLevel3 and rmi2<osLevel2 and rmi1<osLevel1 and longcondition1
shortcondition2 =  rmi5<sell5 and rmi4>obLevel4 and rmi3>obLevel3 and rmi2>obLevel2 and rmi1>obLevel1 and shortcondition1

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