Strategi Kombo Indikator Multi-Momentum

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

Gambaran umum

Strategi eksperimental ini menggabungkan Momentum Chande, RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI dan indikator momentum lainnya, memasuki posisi ketika semua indikator memberikan sinyal yang selaras.

Logika Strategi

  1. Menghitung Chande Momentum dan mengatur garis beli dan jual.

  2. Menghitung RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI dan indikator lainnya.

  3. Tetapkan garis beli dan jual untuk setiap indikator.

  4. Ketika Momentum Chande melintasi di atas garis beli, periksa apakah indikator lain juga berada di bawah garis beli masing-masing.

  5. Sebaliknya, ketika Chande Momentum melintasi di bawah garis jual, sementara indikator lain melebihi garis jual mereka, menghasilkan sinyal pendek.

Keuntungan

  1. Menggabungkan indikator memberikan validasi timbal balik, menghindari sinyal palsu.

  2. Chande Momentum dengan sensitif menangkap perubahan tren.

  3. RMI menunjukkan tingkat momentum untuk mengidentifikasi tingkat overbought/oversold.

  4. Uji perhitungan RSI yang berbeda dengan HMA RSI, EVW RSI dll.

  5. Kombinasi multi-indikator yang fleksibel memungkinkan pengujian efektivitas indikator.

Risiko

  1. Persyaratan untuk kombinasi multi-indikator lebih sulit untuk dipenuhi, lebih sedikit perdagangan, kesempatan hilang.

  2. Tidak ada mekanisme kontrol risiko seperti stop loss.

  3. Kinerja indikator tergantung pada kerangka waktu, mungkin tidak bekerja pada semua periode.

  4. Tidak ada optimasi parameter, pengaturan parameter yang buruk mungkin.

  5. Data backtest tidak cukup untuk sepenuhnya memvalidasi strategi.

Kemungkinan Solusi:

  1. Meredakan ambang batas indikator untuk lebih banyak perdagangan.

  2. Masukkan trailing atau hard stop loss untuk membatasi kerugian.

  3. Uji produk dan jangka waktu yang berbeda untuk menemukan parameter optimal.

  4. Gunakan pembelajaran mesin atau pencarian grid untuk optimasi parameter.

  5. Backtest di lebih banyak pasar untuk memastikan ketahanan.

Arahan Optimasi

  1. Uji set parameter yang berbeda untuk menemukan konfigurasi yang optimal.

  2. Tambahkan indikator momentum adaptif multi-skala waktu.

  3. Masukkan deteksi tren untuk menghindari perdagangan kontra-tren.

  4. Menggunakan pembelajaran mesin untuk meningkatkan berat multi-indikator.

  5. Gabungkan dengan sistem rata-rata bergerak untuk meningkatkan entri.

Ringkasan

Strategi ini mencoba untuk mengidentifikasi titik balik tren yang lebih dapat diandalkan dengan menggabungkan beberapa indikator momentum. Logika yang terdiversifikasi memiliki potensi ekstensi dan optimalisasi yang besar di bidang seperti pemilihan parameter, bobot indikator, kontrol risiko dll, untuk memperoleh sinyal berkualitas lebih banyak sambil memastikan ketahanan, tetapi risiko seperti kurva-fiting perlu dikelola.


/*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 banyak