Cette stratégie génère des signaux de trading en croisant l'indicateur JMA et l'indicateur RSI.
La stratégie utilise principalement deux types d'indicateurs:
Indicateur JMA: Moyenne mobile lissée utilisant des multiplicateurs de puissance, avec un décalage plus faible et une capture plus rapide des variations de prix.
Indicateur RSI: Indicateur commun de force reflétant la dynamique d'achat/de vente.
Lorsque le JMA dépasse le RSI, il indique une tendance haussière à court terme plus forte que la tendance à long terme et génère un signal d'achat.
À la signalisation, la stratégie entre dans le commerce dans la direction correspondante.
Paramètres JMA réglables et adaptables à différentes périodes.
Le RSI filtre les fausses fuites.
La combinaison de deux indicateurs réduit les faux signaux.
Contrôle des pertes par arrêt intégré.
Ratio de profit personnalisable pour le ciblage du profit.
Une combinaison de deux indicateurs peut générer trop peu de signaux, peut modifier les paramètres de sensibilité.
JMA a encore du retard, peut manquer des points tournants, peut optimiser avec des indicateurs de pointe.
Un mauvais placement de stop loss peut entraîner une plus grande perte.
Une trop grande dépendance aux indicateurs peut produire de faux signaux, ajouter des filtres de volume ou de volatilité.
Testez les paramètres JMA pour trouver les paramètres optimaux.
Essayez différents paramètres RSI pour une meilleure performance.
Ajouter un mécanisme d'arrêt de traînée pour les arrêts adaptatifs.
Optimiser la taille des positions d'entrée comme ajouter à des transactions gagnantes.
Recherchez des filtres supplémentaires comme KD, MACD.
La stratégie permet de suivre la tendance avec des croisements JMA et RSI et limite le risque via des arrêts. Mais les faux signaux restent probables, nécessitant une optimisation supplémentaire des paramètres et des filtres.
/*backtest start: 2023-01-01 00:00:00 end: 2023-03-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Stratégie marche le mieux sur du 2 jours strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000) // Strategy Tester Start Time sYear = input(2019, title = "Start Year") sMonth = input(06, title = "Start Month", minval = 01, maxval = 12) sDay = input(01, title = "Start Day", minval = 01, maxval = 31) sHour = input(00, title = "Start Hour", minval = 00, maxval = 23) sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59) startTime = true // Strategy Tester End Time eYear = input(2019, title = "End Year") eMonth = input(12, title = "End Month", minval = 01, maxval = 12) eDay = input(01, title = "End Day", minval = 01, maxval = 31) eHour = input(00, title = "End Hour", minval = 00, maxval = 23) eMinute = input(00, title = "End Minute", minval = 00, maxval = 59) endTime = true // === RSI === src = close, len = input(14, minval=1, title="Length") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) plot(rsi, color=color.purple) band1 = hline(70) band0 = hline(30) // === JMA === _length = input(7, title="Length") _phase = input(50, title="Phase") _power = input(2, title="Power") highlightMovements = input(true, title="Highlight Movements ?") // srcJMA = input(rsi, title="Source") srcJMA = rsi phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5 beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2) alpha = pow(beta, _power) jma = 0.0 e0 = 0.0 e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1]) e1 = 0.0 e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1]) e2 = 0.0 e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1]) jma := e2 + nz(jma[1]) // === End of JMA def === jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0) // === Inputs === // risk management useStop = input(true, title = "Use Initial Stop Loss?") goLong() => crossover(rsi, jma) killLong() => crossunder(rsi, jma) // ======= DEBUGGGGGGGG ============ long_price = 0.0 short_price = 0.0 if(startTime and endTime) if(goLong()) long_price := close strategy.entry("Buy", strategy.long, when = goLong()) strategy.close("Buy", when = killLong() and close > long_price) // Shorting if using goShort() => killLong() killShort() => goLong() if(startTime and endTime) if(goShort()) short_price := close strategy.entry("Sell", strategy.short, when = goShort() and close < short_price) strategy.close("Sell", when = killShort()) // ========================= if (useStop) strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08) strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)