Stratégie de combinaison d'indicateurs à dynamique multiple

Auteur:ChaoZhang est là., Date: le 24 septembre 2023 à 13h24h47
Les étiquettes:

Résumé

Cette stratégie expérimentale combine le momentum de Chande, le RMI, le triple HMA RSI, le double EVW RSI, le triple EMA RSI et d'autres indicateurs de momentum, en entrant dans des positions lorsque tous les indicateurs donnent des signaux alignés.

La logique de la stratégie

  1. Calculer l'élan de Chande et définir ses lignes d'achat et de vente.

  2. Le montant de l'indemnité de dépôt est calculé en fonction de la valeur de l'indemnité.

  3. Définir des lignes d'achat et de vente pour chaque indicateur.

  4. Lorsque le momentum de changement dépasse sa ligne d'achat, vérifiez si d'autres indicateurs sont également en dessous de leurs lignes d'achat respectives.

  5. À l'inverse, lorsque la dynamique de Chande traverse la ligne de vente, tandis que d'autres indicateurs dépassent leurs lignes de vente, ils génèrent un signal court.

Les avantages

  1. La combinaison d'indicateurs permet une validation mutuelle, évitant ainsi de faux signaux.

  2. Chande Momentum capte avec sensibilité les changements de tendance.

  3. L'indicateur RMI indique les niveaux de dynamique pour identifier les niveaux de surachat/survente.

  4. Test de différents calculs du RSI avec le RSI HMA, le RSI EVW, etc.

  5. Une combinaison flexible de plusieurs indicateurs permet de tester l'efficacité des indicateurs.

Les risques

  1. Les exigences pour les combinaisons multi-indicateurs sont plus difficiles à satisfaire, moins de transactions, des opportunités manquées.

  2. Aucun mécanisme de contrôle des risques comme le stop loss.

  3. Les performances des indicateurs dépendent des délais et peuvent ne pas fonctionner sur toutes les périodes.

  4. Pas d'optimisation des paramètres, un mauvais réglage des paramètres possible.

  5. Des données insuffisantes pour valider pleinement la stratégie.

Des solutions possibles:

  1. Réduire les seuils d'indicateur pour plus de transactions.

  2. Pour limiter les pertes, intégrer un retard ou un arrêt dur.

  3. Testez sur différents produits et délais pour trouver les paramètres optimaux.

  4. Utilisez l'apprentissage automatique ou la recherche en grille pour optimiser les paramètres.

  5. Des tests de retour sur plus de marchés pour assurer la robustesse.

Directions d'optimisation

  1. Testez différents ensembles de paramètres pour trouver la configuration optimale.

  2. Ajouter des indicateurs de momentum adaptatifs à échelle temporelle multiple.

  3. Incorporer la détection de tendance pour éviter les transactions contre-tendance.

  4. Utiliser l'apprentissage automatique pour améliorer la pondération multi-indicateurs.

  5. Combinez avec le système de moyenne mobile pour améliorer les entrées.

Résumé

Cette stratégie tente d'identifier des tournants de tendance plus fiables en combinant plusieurs indicateurs de dynamique. La logique diversifiée a une grande extensibilité et un potentiel d'optimisation dans des domaines tels que la sélection de paramètres, la pondération des indicateurs, le contrôle des risques, etc., afin d'acquérir plus de signaux de qualité tout en assurant la robustesse, mais des risques tels que l'ajustement de la courbe doivent être gérés.


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

Plus de