Strategi Kombo Penunjuk Multi-Momentum

Penulis:ChaoZhang, Tarikh: 2023-09-24 13:24:47
Tag:

Ringkasan

Strategi eksperimen ini menggabungkan Momentum Chande, RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI dan penunjuk momentum lain, memasuki kedudukan apabila semua penunjuk memberikan isyarat sejajar.

Logika Strategi

  1. Mengira Chande Momentum dan menetapkan garis beli dan jual.

  2. Mengira RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI dan penunjuk lain.

  3. Tetapkan garis beli dan jual untuk setiap penunjuk.

  4. Apabila Chande Momentum melintasi di atas garis beli, periksa sama ada penunjuk lain juga berada di bawah garis beli masing-masing.

  5. Sebaliknya, apabila Chande Momentum melintasi di bawah garis jual, sementara penunjuk lain melebihi garis jual mereka, menghasilkan isyarat pendek.

Kelebihan

  1. Menggabungkan penunjuk memberikan pengesahan bersama, mengelakkan isyarat palsu.

  2. Chande Momentum dengan sensitif menangkap perubahan trend.

  3. RMI menunjukkan tahap momentum untuk mengenal pasti tahap overbought / oversold.

  4. Ujian pengiraan RSI yang berbeza dengan HMA RSI, EVW RSI dll.

  5. Gabungan pelbagai penunjuk yang fleksibel membolehkan ujian keberkesanan penunjuk.

Risiko

  1. Keperluan untuk kombinasi pelbagai penunjuk lebih sukar dipenuhi, lebih sedikit perdagangan, peluang yang hilang.

  2. Tiada mekanisme kawalan risiko seperti stop loss.

  3. Prestasi penunjuk bergantung pada jangka masa, mungkin tidak berfungsi pada semua tempoh.

  4. Tidak ada pengoptimuman parameter, penyesuaian parameter yang buruk mungkin.

  5. Data backtest tidak mencukupi untuk mengesahkan sepenuhnya strategi.

Kemungkinan Penyelesaian:

  1. Melepaskan ambang penunjuk untuk lebih banyak perdagangan.

  2. Menggabungkan kerugian yang tertinggal atau kehilangan berhenti keras untuk mengehadkan kerugian.

  3. Uji produk dan jangka masa yang berbeza untuk mencari parameter optimum.

  4. Gunakan pembelajaran mesin atau carian grid untuk pengoptimuman parameter.

  5. Ujian semula di lebih banyak pasaran untuk memastikan ketahanan.

Arahan pengoptimuman

  1. Uji set parameter yang berbeza untuk mencari konfigurasi optimum.

  2. Tambah penunjuk momentum pelbagai skala masa.

  3. Memasukkan pengesanan trend untuk mengelakkan perdagangan yang bertentangan dengan trend.

  4. Gunakan pembelajaran mesin untuk meningkatkan berat pelbagai penunjuk.

  5. Gabungkan dengan sistem purata bergerak untuk meningkatkan entri.

Ringkasan

Strategi ini cuba mengenal pasti titik perubahan trend yang lebih boleh dipercayai dengan menggabungkan beberapa penunjuk momentum. Logik yang pelbagai mempunyai potensi pengembangan dan pengoptimuman yang besar dalam bidang seperti pemilihan parameter, berat penunjuk, kawalan risiko dll, untuk memperoleh lebih banyak isyarat berkualiti sambil memastikan ketahanan, tetapi risiko seperti pemasangan lengkung perlu diurus.


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

Lebih lanjut